On Docker Image open-liberty:22.0.0.1-full-java17-openj9 with the following activated features:
<featureManager>
<feature>persistence-3.0</feature>
<feature>localConnector-1.0</feature>
<feature>microProfile-5.0</feature>
<feature>beanValidation-3.0</feature>
</featureManager>
and the javax namespace, it was possible to create an TransactionManager via the api dependency
compileOnly "com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.transaction:1.1.60"
in the following way:
package de.xxx.xxx;
import com.ibm.tx.jta.TransactionManagerFactory;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Produces;
import javax.transaction.TransactionManager;
@RequestScoped
public class TransactionManagerProducer {
@Produces
public TransactionManager produce() {
return TransactionManagerFactory.getTransactionManager();
}
}
We are moving to JakartaEE9 and this one API dependency seems not to have an equivalent for the jakarta.* namespace, so that this is not compiling:
package de.xxx.xxx;
import com.ibm.tx.jta.TransactionManagerFactory;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.transaction.TransactionManager;
@RequestScoped
public class TransactionManagerProducer {
@Produces
public TransactionManager produce() {
return TransactionManagerFactory.getTransactionManager();
}
}
In the openliberty zip, see https://repo1.maven.org/maven2/io/openliberty/openliberty-runtime/22.0.0.1/openliberty-runtime-22.0.0.1.zip an equivalent implementation for
wlp\dev\api\ibm\com.ibm.websphere.appserver.api.transaction_1.1.60.jar (javax.*)
is available here:
wlp\dev\api\ibm\io.openliberty.transaction_1.1.60.jar (jakarta.*)
But I can't seem to find the proper API for the io.openliberty.transaction package. Does anyone know how to access the TransactionManagerFactory? Any help is appreciated.
--- UPDATE: Until the API package is available I chose to create the TransactionManager via reflection:
package de.xxx.xxx;
import jakarta.enterprise.context.RequestScoped;
import jakarta.enterprise.inject.Produces;
import jakarta.transaction.TransactionManager;
import java.lang.reflect.InvocationTargetException;
@RequestScoped
public class TransactionManagerProducer {
@Produces
public TransactionManager produce() {
try {
return (TransactionManager)
Class.forName("com.ibm.tx.jta.TransactionManagerFactory")
.getDeclaredMethod("getTransactionManager")
.invoke(null);
} catch (ClassNotFoundException
| NoSuchMethodException
| InvocationTargetException
| IllegalAccessException e) {
throw new IllegalStateException("TransactionManager could not be created");
}
} }
For 22.0.0.3, the api is published finally correctly here: https://repo.maven.apache.org/maven2/io/openliberty/api/io.openliberty.transaction/1.1.62/