无状态会话与@EJB和@Inject进行身份认证

时间:2017-08-02 12:04:50

标签: ejb-3.1 java-ee-7 ejb-3.2

我最近一直在研究EJB3.2规范的3.4.7.2节并做了一些测试。

规格:

  

@EJB购物车 1 ;
  @EJB购物车 2 ;
  ... if(cart1.equals(cart1)){//   这个测试必须返回true ...}
  ... if(购物车 1 .equals(购物车 2 )){//   此测试还必须返回 true ...}

     

当用于比较引用时,equals方法始终返回true   到同一无状态会话的相同业务接口类型   豆。

规范明确引用@EJB注释,因此我做了一些测试,我可以确认 - if (cart1.equals(cart2)) 始终返回true - 身份假设。

因为我经常看到@Inject@EJB的工作方式相同,所以我尝试使用@Inject上面的相同示例。在这种情况下,if (cart1.equals(cart2)) 始终返回false

我想知道是否有一些意见。

用于测试目的的代码:

public abstract class FormatOutputWithBeansIdentity extends HttpServlet {

    protected void formatOutput(final PrintWriter out, SLSBLocalView beanA, SLSBLocalView beanB) throws IllegalStateException {
        ...;
        out.println("<br>beanA and beanB are equal : " + checkIfEqual(beanA, beanB) + "<br>");
        out.println("<br>beanA and beanA are equal : " + checkIfEqual(beanA, beanA) + "<br>");
    }


    private Boolean checkIfEqual(SLSBLocalView beanA, SLSBLocalView beanB) {
        // The equals method always returns true when used to compare references to the same business interface type of the same stateless session bean.
        return beanA.equals(beanB);
    }
}

@WebServlet(name = "ServletDemo1", urlPatterns = {"/ServletDemo1"})
public class ServletDemo1 extends FormatOutputWithBeansIdentity {

    @EJB
    SLSBLocalView beanA;

    @EJB
    SLSBLocalView beanB;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try (PrintWriter out = response.getWriter()) {

            ...

            out.println("<h1>Test Session Object Identity Using @EJB</h1>");

            formatOutput(out, beanA, beanB);

            ...
        }
    }

}

0 个答案:

没有答案