2011-10-27 3 views
2

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 어댑터에서 응용 프로그램 내 자신의 스레드 풀을 정의해야합니까?

답변

0

귀에 jboss-app.xml이 있습니까? 이 사이트에서 JBoss 클래스 로딩 격리 문제를 확인하십시오. http://community.jboss.org/wiki/ClassLoadingConfiguration

+0

답변 해 주셔서 감사합니다. 이 경우 JBoss threadPool을 명시 적으로 사용하고 있으며 EAR에서 최대 절전 모드 버전을 알 수 없기 때문에 최대 절전 모드 충돌이 발생한다고 생각합니다. – drkicknrush

관련 문제