首页
学习
活动
专区
圈层
工具
发布

资源
EN

Stack Overflow用户
提问于 2016-02-25 14:08:14
回答 1查看 2.7K关注 0票数 2

试图让WorkManagers在TomEE托管的Spring应用程序中使用CommonJ。

目前有以下配置:

Tomcat context.xml

代码语言:javascript
复制
<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>

Spring应用程序web.xml

代码语言:javascript
复制
<resource-ref>
    <res-ref-name>myWorkManager</res-ref-name>
    <res-type>commonj.work.WorkManager</res-type>
    <res-auth>Container</res-auth>
</resource-ref>

当应用程序加载时,这将引发以下异常:

代码语言:javascript
复制
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

我在Tomcat目录中从http://commonj.myfoo.de/install.shtml下载了http://commonj.myfoo.de/install.shtml jars。

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

任何帮助都将不胜感激。

更新

如果我从CommonJ lib文件夹中删除两个TomEE jars,则会得到此异常。

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

这正是我所期望的。

如果从资源元素中移除工厂属性,将得到:

由:在JNDI位置可用的类型为org.springframework.jndi.TypeMismatchNamingException:的org.apache.openejb.core.ivm.naming.IvmContext对象引起的java:comp/env/wm/org.apache.openejb.core.ivm.naming.IvmContext不能分配给commonj.work.WorkManager

EN

回答 1

Stack Overflow用户

发布于 2019-01-06 11:25:00

当我尝试用maven-jetty插件在本地启动我的应用程序时,我也会遇到同样的问题。M. Deinum的评论非常有用。如果在application的共享库中和web应用程序的web/ lib文件夹中都有lib jar,则会发生此错误,因为服务器使用一个jar来创建资源(父类加载程序),但是应用程序使用self jar(子类加载器)及其两个不同的类层次结构,因此不能将FooWorkManager转换为WorkManager。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35629600

复制
相关文章

相似问题

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