запуск потока с использованием пула потоков jboss5 - PullRequest
2 голосов
/ 27 октября 2011

Моему приложению, работающему в JBoss 5, нужно запустить поток, чтобы выполнить некоторую работу асинхронно. Код использует ThreadPoolMBean для использования потока из собственного пула потоков JBoss - это работало в JBoss 4, но теперь, похоже, работает с проблемами загрузчика классов, поскольку я получаю это исключение:

14:52:15,918 WARN [org.jboss.util.threadpool.RunnableTaskWrapper] (JBoss System Threads(1)-413:) Unhandled throwable for runnable: application.NSP@4c80c3ab () 
    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 в JBoss-5? Или мне нужно определить свой собственный пул потоков в приложении, может быть, в адаптере JCA?

1 Ответ

0 голосов
/ 09 ноября 2011

У вас в ухе есть файл jboss-app.xml? Взгляните на этот сайт, чтобы узнать о проблемах изоляции загрузки классов JBoss http://community.jboss.org/wiki/ClassLoadingConfiguration

...