JBoss 5で動作している私のアプリケーションは、ある種の作業を非同期に実行するためにスレッドを開始する必要があります。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
コードへ:これはJBossの4で働いていたが、今、私はこの例外を取得するので、クラスローダーの問題に直面して動作しているように見える - コードは、JBoss独自のスレッドプールからスレッドを使用するには「ThreadPoolMBean」を使用しています次のようにスレッドがある開始:
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)の間で異なるクラスローダであると仮定します。この問題は、システム内に2つのバージョン(JBossに1つ、EARに1つ)があるHibernateを参照して発生します。
このようにJBossスレッドプールをJBoss-5で使用できますか?または、アプリケーション内に独自のスレッドプールを定義する必要がありますか(おそらくJCAアダプタ内)。
あなたの答えに感謝します。このケースでは、JBossのthreadPoolを明示的に使用しており、EARの休止状態のバージョンについて知ることができないため、休止状態の競合が発生すると思います。 – drkicknrush