EJB中的应用程序与容器认证

时间:2015-03-21 15:31:32

标签: java-ee ejb ejb-2.x

我对EJB更新,处理使用EJB2.0的维护应用程序。我只是浏览应用程序代码并尝试理解它。它有一些会话bean的ejb-jar.xml,如下所示。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 
2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<enterprise-beans>
  <session>
     <ejb-name>StatelessBean</ejb-name>
     <home>com.example.interfaces.StatelessBeanHome</home>
     <remote>com.example.interfaces.StatelessBean</remote>
     <local-home>com.example.interfaces.StatelessBeanLocalHome</local-home>
     <local>com.example.interfaces.StatelessBeanLocal</local>
     <ejb-class>com.example.interfaces.StatelessBeanSession</ejb-class>
     <session-type>Stateless</session-type>
     <transaction-type>Container</transaction-type>

     <security-identity> 
        <use-caller-identity>
     </security-identity>

     <resource-ref>
        <res-ref-name>eis/SAPFactory</res-ref-name>
        <res-type>javax.resource.cci.ConnectionFactory</res-type>
        <res-auth>Application</res-auth>
        <re-sharing-scope>Shareable</re-sharing-scope>
     </resource-ref>

  </session>
</enterprise-beans> 
</ejb-jar>

我看到资源身份验证可以是应用程序容器,在上面的代码片段中它是应用程序,在其他一些应用程序中我已经看到它被提及为容器,它们之间究竟有什么区别?何时使用超过其他。此外,交易类型也被指定为容器,请注意这一点。

1 个答案:

答案 0 :(得分:1)

<res-auth>Application</res-auth>表示应用程序将执行对资源的登录。例如,对于JDBC,这意味着应用程序将使用getConnection(user, password)<res-auth>Container</res-auth>允许应用程序服务器提供登录凭据,通常是通过服务器管理员提供的配置。容器管理的身份验证通常是首选,以避免在应用程序中硬编码用户/密码信息或需要发明辅助机制来为应用程序提供配置。

EJB的

<transaction-type>Container</transaction-type>意味着默认情况下,当EJB方法结束时,EJB容器将隐式地开始事务,并在EJB方法结束时提交/回滚(取决于抛出的异常)。此外,每个方法的事务属性可用于修改容器管理的事务的行为(在调用方法时挂起/拒绝现有事务,并选择根本不启动全局事务)。 <transaction-type>Bean</transaction-type>表示EJB必须使用UserTransaction开始/提交/回滚自身。