[英]Exception when access to ejb from managed bean
由于此异常,我无法从托管bean(从jsf页面使用)访问我的@EJB
javax.ejb.EJBTransactionRequiredException:调用需要事务:org.jboss.invocation.InterceptorContext@353e531e
jsf部分(pages faces-config和web.xml)与bean部分位于不同的包中,但两个部署在EAR中。 该应用程序部署在jboss 7上
EJB(业务):
@Stateful
@TransactionAttribute(TransactionAttributeType.MANDATORY)
public class DataAccessBusinessImpl implements DataAccessBusiness {
托管Bean:
public class ConfigurationBean implements Serializable {
@EJB
DataAccessBusiness dab;
faces-config.xml中:
<managed-bean>
<managed-bean-name>configurationBean</managed-bean-name>
<managed-bean-class>ch.morphean.videoaid.lb.managedBean.ConfigurationBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
web.xml中:
<display-name>videoaid-site</display-name>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
谢谢你的帮助
根据TransactionAttributeType.MANDATORY
的EJB规范:
如果客户端在客户端与事务上下文关联时调用企业bean的方法,则容器将在客户端的事务上下文中调用企业bean的方法。 如果没有现有事务,则抛出异常。
由于您的“客户端”(托管bean)没有启动事务,EJB容器会抛出异常,因为您已使用TransactionAttributeType.MANDATORY
注释了会话Bean。
不使用MANDATORY
作为@TransactionAttribute的值,而是使用REQUIRED
因为这将强制容器启动事务(如果没有现有事务)。 有关TransactionAttributeType.REQUIRED
的规范说明如下:
如果客户端在客户端与事务上下文关联时调用企业bean的方法,则容器将在客户端的事务上下文中调用企业bean的方法。
如果客户端在客户端未与事务上下文关联时调用企业bean的方法,则容器会在将方法调用委托给enterprise bean方法之前自动启动新事务。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.