2011-10-27 93 views
2

我在JBoss 5中运行的应用程序需要启动线程以异步执行某些工作。该代码使用“ThreadPoolMBean”使用一个线程JBoss的自己的线程池 - 这个工作在JBoss中4,但现在看来,对类加载器的问题需要跑起来,因为我得到这个异常:使用jboss5线程池开始线程

14:52:15,918 WARN [org.jboss.util.threadpool.RunnableTaskWrapper] (JBoss System Threads(1)-413:) Unhandled throwable for runnable: [email protected]() 
    org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is java.lang.IllegalArgumentException: interface org.hibernate.jdbc.ConnectionWrapper is not visible from class loader 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:596) 
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) 
    at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127) 
    at application.NSP.run(NotfallStopperProzess.java:105) 
    at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:147) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.IllegalArgumentException: interface org.hibernate.jdbc.ConnectionWrapper is not visible from class loader 
    at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353) 
    at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581) 
    at org.hibernate.jdbc.BorrowedConnectionProxy.generateProxy(BorrowedConnectionProxy.java:67) 
    at org.hibernate.jdbc.ConnectionManager.borrowConnection(ConnectionManager.java:163) 
    at org.hibernate.jdbc.JDBCContext.borrowConnection(JDBCContext.java:111) 
    at org.hibernate.impl.SessionImpl.connection(SessionImpl.java:360) 
    at org.springframework.orm.hibernate3.HibernateTransactionManager.doBegin(HibernateTransactionManager.java:507) 
    ... 8 more 

的代码启动线程如下:

MBeanServer server = MBeanServerLocator.locateJBoss(); 
ObjectName objName; 
objName = new ObjectName("jboss.system:service=ThreadPool"); 
ThreadPoolMBean poolMBean = 
    (ThreadPoolMBean) MBeanServerInvocationHandler.newProxyInstance(server, objName, ThreadPoolMBean.class, false); 
poolMBean.getInstance().run(runnable) 

我认为问题是JBoss线程池,我的应用程序(EAR)之间的不同的类加载器。引发Hibernate的问题在系统中有两个版本(一个在JBoss中,一个在EAR中)。

是否可以在JBoss-5中以这种方式使用JBoss线程池?或者我需要在应用程序中定义自己的线程池,也许在JCA适配器中定义?

回答