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/