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의 자신의 스레드 풀에서 스레드를 사용하는 '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) 사이의 서로 다른 클래스 로더 가정. 문제는 Hibernate를 참조하는 것인데, 시스템에 두 개의 버전이있다 (하나는 JBoss에, 다른 하나는 EAR에 있음).
JBoss-5에서 이런 식으로 JBoss 스레드 풀을 사용할 수 있습니까? 아니면 JCA 어댑터에서 응용 프로그램 내 자신의 스레드 풀을 정의해야합니까?
답변 해 주셔서 감사합니다. 이 경우 JBoss threadPool을 명시 적으로 사용하고 있으며 EAR에서 최대 절전 모드 버전을 알 수 없기 때문에 최대 절전 모드 충돌이 발생한다고 생각합니다. – drkicknrush