簡體   English   中英

Spring Boot JNDI CommonJ資源

[英]Spring Boot JNDI CommonJ resource

試圖讓托管在TomEE中的Spring Boot應用程序中的WorkManager與CommonJ一起使用。

當前具有以下配置:

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>

春季應用程序web.xml

<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

我在Tomcat的lib目錄中有從http://commonj.myfoo.de/install.shtml下載的CommonJ jar。

我覺得我已經很接近了,但是對此異常感到有些困惑。

任何幫助將非常感激。

UPDATE

如果我從TomEE lib文件夾中刪除兩個CommonJ jar,則會出現此異常

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

這是我所期望的。

如果從資源元素中刪除factory屬性,則會得到:

由以下原因引起:org.springframework.jndi.TypeMismatchNamingException:在JNDI位置[java:comp / env / wm / default]可用的[class org.apache.openejb.core.ivm.naming.IvmContext]類型的對象不可分配給[ commonj.work.WorkManager]

我嘗試在maven-jetty-plugin中本地啟動我的應用程序時遇到相同的問題。 M. Deinum的評論非常有幫助。 如果您在Application Server的共享庫和Web應用程序的WEB-INF / lib文件夾中都有lib jar,則會發生此錯誤,因為服務器使用一個jar創建資源(父類加載器),而應用程序使用self jar(子類加載器)並且它具有兩個不同的類層次結構,因此FooWorkManager不能強制轉換為WorkManager。

暫無
暫無

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

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