![](/img/trans.png)
[英]OpenLiberty JakartaEE with IBM MQ Resorce Adapater - java.lang.NoClassDefFoundError
[英]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 發布順利的話,該版本計划於明天可用。
對於 22.0.0.3,api 最終在此處正確發布: https://repo.maven.apache.org/maven2/io/openliberty/api/io.openliberty.transaction/1.1.62/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.