首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Org.apache.aries.transaction.plan/1.1.1无法获得javax.transaction.TransactionManager

Org.apache.aries.transaction.plan/1.1.1无法获得javax.transaction.TransactionManager
EN

Stack Overflow用户
提问于 2017-03-22 10:22:28
回答 1查看 767关注 0票数 1

我使用karaf插件创建了maven发行版。

我创建了maven项目

mvn原型:生成-DarchetypeGroupId=org.apache.karaf.archetypes -DarchetypeArtifactId=karaf-assembly-archetype -DarchetypeVersion=4.1.0

然后我添加了以下特性:

代码语言:javascript
复制
                <bootFeatures>
                    <feature>standard</feature>
                    <feature>jpa/2.5.0</feature>
                    <feature>transaction-api/1.2.0</feature>
                    <feature>transaction</feature>
                    <feature>eclipselink</feature>
                    <feature>pax-jdbc-config</feature>
                    <feature>pax-jdbc-postgresql</feature>
                </bootFeatures>

当我从Apache站点下载karaf 4.1.0发行版并使用feature:install安装特性时,一切正常,但是,在插件构建的发行版中,我得到了错误:

由于未解决的依赖关系,(objectClass=javax.transaction.TransactionManager) java.util.concurrent.TimeoutException在org.apache.aries.blueprint.container.BlueprintContainerImpl$1.run(BlueprintContainerImpl.java:371) 15:org.apache.aries.blueprint.core:1.7.1 at org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) 15:org.apache.aries无法启动bundle的蓝图容器java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) .blueprint.core:1.7.1 ?:?在java.util.concurrent.FutureTask.run(FutureTask.java:266) ?:?在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ?:?在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ?:?在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ?:?在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ?:?在java.lang.Thread.run(Thread.java:745) ?:? 2017-03-22T11:03:51,401财政错误:蓝图扩展程序:1\x{e 010}_org.apache.aries.blueprint.utils.threading.impl.DiscardableRunnable.run(DiscardableRunnable.java:48) 15的.blueprint.core:1.7.1 :org.apache.aries.Blueprint.core:1.7.1 at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ?:?在java.util.concurrent.FutureTask.run(FutureTask.java:266) ?:?在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ?:?在java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ?:?在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ?:?在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ?:?在java.lang.Thread.run(Thread.java:745) ?:?

我在web控制台的OSGi注册表中找到了该服务:

代码语言:javascript
复制
Service 266 - [org.apache.aries.transaction.AriesTransactionManager, javax.transaction.TransactionManager, javax.transaction.TransactionSynchronizationRegistry, javax.transaction.UserTransaction, org.apache.geronimo.transaction.manager.RecoverableTransactionManager] (pid: n/a)
  from Bundle 143 - Apache Aries Transaction Manager (org.apache.aries.transaction.manager), version 1.3.2
    service.bundleid: 143
    service.scope: singleton

这里怎么了?是maven插件做错了什么,还是问题是,插件使用了不稳定版本的工件?

EN

回答 1

Stack Overflow用户

发布于 2017-11-22 16:00:31

如果不查看OSGi包的连接,就不可能确定,但最有可能的解释是有毒的javax.transaction包。当指定JTA时,很明显“核心Java”中的某些类型需要实现某些JTA接口,例如SQL对象需要一个相关的Connection。这迫使一些JTA进入核心Java,但是没有将完整的API放入基本运行时,只添加了几种类型。这导致Java和JTA之间出现了一个分离包,并在模块化系统中造成了很大的问题(通常不允许您从多个源同时看到相同的包。

在这种情况下,事务管理器服务必须使用部署在OSGi框架内的包中的JTA (基本运行时不包括TransactionManager接口)。另一方面,消费包可能是从系统包(即Java运行时)导入javax.transaction。由于这两个包不共享服务API的视图,因此它们不能共享OSGi服务。

解决这一问题的唯一真正方法是将JTA放在Java类路径上,并使用如下的启动属性在正确的版本中公开它:

代码语言:javascript
复制
org.osgi.framework.system.packages.extra=javax.transaction;version=1.2
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42948784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档