簡體   English   中英

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 package 找到合適的 API。有人知道如何訪問 TransactionManagerFactory 嗎? 任何幫助表示贊賞。

--- 更新:在 API package 可用之前,我選擇通過反射創建 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 發布順利的話,該版本計划於明天可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM