AspectJ&使用hibernate在WildFly 9上的EAR内共享Spring上下文 - "找不到当前线程的会话"!

时间:2015-08-06 12:00:46

标签: spring jboss aspectj wildfly spring-orm

我想使用AspectJ来加载包含DAO& amp;的服务层JAR的加载时编织。域类以及与在WildFly(JBoss)上运行的EAR内的多个Web项目共享的会话和事务bean,但是我找到了当前线程的#34; No会话"每当我尝试使用hibernate会话时都会出现异常。

以下是我的EAR的结构:

testapp.ear
    |
    |------ /lib/testapp-service.jar + all required libraries as I'm using skinny WARs.
    |   
    |------ testapp.web1.war
    |   
    |------ testapp-web2.war

我正在使用以下技术

WildFly 9
Hibernate 4.1.8
Spring 3.1.1
Maven 4

春季配置

我使用spring的parentContextKey context-param按照spring文档加载共享上下文。我使用AspectJ进行事务管理器的加载时编织。

以下是我的来源链接:https://github.com/Nigel-funguru/testapp.git

注意:如果我从spring配置中删除加载时间AspectJ编织,则此配置确实有效。

这是我的堆栈跟踪

Caused by: org.hibernate.HibernateException: No Session found for current thread
    at org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97)
    at org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:978)
    at com.testapp.db.hibernate.EmployeeHibernateRepository.findAll(EmployeeHibernateRepository.java:31)
    at com.testapp.service.impl.EmployeeManagerImpl.findAll(EmployeeManagerImpl.java:34)
    at com.testapp.mvc.HomeController.showHomePage(HomeController.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    ... 30 more

有关完整堆栈跟踪,请参阅:http://pastebin.ca/3090734

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

为了在WildFly上使用基于Aspectj的加载时编织,您必须先执行以下步骤:

  1. JBOSS_MODULES_SYSTEM_PKGS="org.jboss.logmanager"添加到 $WILDFLY_HOME/bin/standalone.conf
  2. 的开头
  3. -Djava.util.logging.manager=org.jboss.logmanager.LogManager添加到 JAVA_OPTS
  4. 末尾的$WILDFLY_HOME/bin/standalone.conf
  5. 添加 -Xbootclasspath/p:$JBOSS_HOME/modules/system/layers/base/org/jboss/logmanager/main/jboss-logmanager-2.0.0.Final.jarJAVA_OPTS
  6. 结尾处$WILDFLY_HOME/bin/standalone.conf

    有关详细信息,请参阅https://issues.jboss.org/browse/WFLY-895