Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/377.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring引导JNDI CommonJ资源_Java_Spring_Jndi_Apache Tomee - Fatal编程技术网

Java Spring引导JNDI CommonJ资源

Java Spring引导JNDI CommonJ资源,java,spring,jndi,apache-tomee,Java,Spring,Jndi,Apache Tomee,试图让工作经理在一个Spring Boot应用程序中使用CommonJ,该应用程序托管在TomEE中 当前具有以下配置: Tomcat context.xml <Context> <Resource name="myWorkManager" auth="Container" type="commonj.work.WorkManager" factory="de.myfoo.commonj.work.FooWorkManagerFactory"

试图让工作经理在一个Spring Boot应用程序中使用CommonJ,该应用程序托管在TomEE中

当前具有以下配置:

Tomcat context.xml

<Context>
  <Resource name="myWorkManager"
    auth="Container"
    type="commonj.work.WorkManager"
    factory="de.myfoo.commonj.work.FooWorkManagerFactory"
    maxThreads="5" />
  <ResourceLink
    name="myWorkManager"
    global="myWorkManager"
    type="commonj.work.WorkManager" />
</Context>
我在Tomcat lib目录中下载了CommonJ JAR

我觉得我已经很接近了,但对这个例外有点困惑

任何帮助都将不胜感激

更新

如果我从TomEE lib文件夹中删除两个CommonJ jar,就会得到这个异常

原因:java.lang.ClassNotFoundException:commonj.work.WorkManager

这正是我所期望的

如果我从资源元素中删除factory属性,我将获得:

原因:org.springframework.jndi.typemistchnamingexception: 类型为[class org.apache.openejb.core.ivm.naming.IvmContext]的对象 在JNDI位置可用[java:comp/env/wm/default]不是 可分配给[commonj.work.WorkManager]


当我尝试在maven jetty插件中本地启动我的应用程序时,我遇到了同样的问题。这个评论很有帮助。如果您的应用程序服务器的共享库和WEB应用程序的WEB-INF/lib文件夹中有lib-jar,则会发生此错误,因为服务器使用一个jar来创建资源(父类加载器),而应用程序使用self-jar(子类加载器),并且它使用两个不同的类层次结构,因此,不能将FooWorkManager转换为WorkManager。

确保您的web应用程序中没有JAR。已根据您的建议进行更新否您没有。。。您不应该从tomcat库中删除它们,但应该从应用程序库目录(即WEB-INF/lib)中删除它们。您似乎也没有使用Tomcat,而是使用TomEE,这有点不同。是的,对不起,我正在使用TomEE,将更新问题我还确认这些JAR也不在我的应用程序中
<resource-ref>
    <res-ref-name>myWorkManager</res-ref-name>
    <res-type>commonj.work.WorkManager</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
Caused by: org.springframework.jndi.TypeMismatchNamingException: Object of type [class de.myfoo.commonj.work.FooWorkManager] available at JNDI location [java:comp/env/myWorkManager] is not assignable to [commonj.work.WorkManager]
    at org.springframework.jndi.JndiTemplate.lookup(JndiTemplate.java:182)
    at org.springframework.jndi.JndiLocatorSupport.lookup(JndiLocatorSupport.java:95)
    at org.springframework.scheduling.commonj.WorkManagerTaskExecutor.afterPropertiesSet(WorkManagerTaskExecutor.java:110)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
    ... 53 more