我最近一直在研究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);
...
}
}
}