OpenLiberty JakartaEE 9:访问 TransactionManager
OpenLiberty JakartaEE 9: access TransactionManager
在 Docker 图像 open-liberty:22.0.0.1-full-java17-openj9 上具有以下激活功能:
<featureManager>
<feature>persistence-3.0</feature>
<feature>localConnector-1.0</feature>
<feature>microProfile-5.0</feature>
<feature>beanValidation-3.0</feature>
</featureManager>
和 javax 命名空间,可以通过 api 依赖项
创建一个 TransactionManager
compileOnly "com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.transaction:1.1.60"
通过以下方式:
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();
}
}
我们正在迁移到 JakartaEE9,这个 API 依赖项似乎没有 jakarta.* 命名空间的等效项,所以这是 不是 编译:
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();
}
}
在 openliberty zip 中,请参阅https://repo1.maven.org/maven2/io/openliberty/openliberty-runtime/22.0.0.1/openliberty-runtime-22.0.0.1.zip
的等效实现
wlp\dev\api\ibm\com.ibm.websphere.appserver.api.transaction_1.1.60.jar (javax.*)
可在此处获得:
wlp\dev\api\ibm\io.openliberty.transaction_1.1.60.jar (jakarta.*)
但我似乎无法为 io.openliberty.transaction 包找到合适的 API。有谁知道如何访问 TransactionManagerFactory?感谢任何帮助。
--- 更新:
在 API 包可用之前,我选择通过反射创建 TransactionManager:
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");
}
}
}
这里的问题是 API 和以 io.openliberty 开头的 SPI 包没有发布到 DHE 和 Maven 作为 Liberty 发布任务的一部分 运行新版本发布。我们希望通过 22.0.0.2 解决此问题,如果我们不 运行 遇到任何其他障碍并且 io.openliberty 发布顺利的话,计划于明天推出。
对于 22.0.0.3,api 终于在这里正确发布了:
https://repo.maven.apache.org/maven2/io/openliberty/api/io.openliberty.transaction/1.1.62/
在 Docker 图像 open-liberty:22.0.0.1-full-java17-openj9 上具有以下激活功能:
<featureManager>
<feature>persistence-3.0</feature>
<feature>localConnector-1.0</feature>
<feature>microProfile-5.0</feature>
<feature>beanValidation-3.0</feature>
</featureManager>
和 javax 命名空间,可以通过 api 依赖项
创建一个 TransactionManager compileOnly "com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.transaction:1.1.60"
通过以下方式:
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();
}
}
我们正在迁移到 JakartaEE9,这个 API 依赖项似乎没有 jakarta.* 命名空间的等效项,所以这是 不是 编译:
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();
}
}
在 openliberty zip 中,请参阅https://repo1.maven.org/maven2/io/openliberty/openliberty-runtime/22.0.0.1/openliberty-runtime-22.0.0.1.zip
的等效实现wlp\dev\api\ibm\com.ibm.websphere.appserver.api.transaction_1.1.60.jar (javax.*)
可在此处获得:
wlp\dev\api\ibm\io.openliberty.transaction_1.1.60.jar (jakarta.*)
但我似乎无法为 io.openliberty.transaction 包找到合适的 API。有谁知道如何访问 TransactionManagerFactory?感谢任何帮助。
--- 更新: 在 API 包可用之前,我选择通过反射创建 TransactionManager:
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");
}
} }
这里的问题是 API 和以 io.openliberty 开头的 SPI 包没有发布到 DHE 和 Maven 作为 Liberty 发布任务的一部分 运行新版本发布。我们希望通过 22.0.0.2 解决此问题,如果我们不 运行 遇到任何其他障碍并且 io.openliberty 发布顺利的话,计划于明天推出。
对于 22.0.0.3,api 终于在这里正确发布了: https://repo.maven.apache.org/maven2/io/openliberty/api/io.openliberty.transaction/1.1.62/