我试图了解EJB的目的和为什么需要不同的客户端视图。 有人可以试着解释吗?
我正在阅读Java EE 6教程,并试图了解无状态和有状态会话bean之间的区别。 如果无状态会话bean在方法调用之间不保留它们的状态,为什么我的程序按照它的方式行事? package mybeans; import javax.ejb.LocalBean; import javax.ejb.Stateless; @LocalBean @Stateless public class MyBean { private int number = 0; public int getNumber() { return number; } public void increment() { this.number++; } } 客户端 import java.io.IOException; import javax.ejb.EJB; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.annotation.WebServlet; import mybeans.MyBean; import java.io.PrintWriter; @WebServlet(name = "ServletClient", urlPatterns = […]
我很难理解这两者之间的相互作用以及它们之间的界限在哪里。 他们重叠? 他们之间是否有冗余? 我知道有两个相关的注释,但我一直没能find一个完整的清单,简要说明。 不知道这是否有助于清除它们之间的差异或重叠。 真的只是困惑。 我认为我相当了解EJB,我想我很难理解CDI究竟带来了什么,以及它如何取代或增强EJB已经提供的东西。
在下面的设置中,方法B在(新)事务中运行吗? 一个EJB,有两种方法,方法A和方法B. public class MyEJB implements SessionBean public void methodA() { doImportantStuff(); methodB(); doMoreImportantStuff(); } public void methodB() { doDatabaseThing(); } } EJB是容器pipe理的,methodB在requires_new事务中,方法A在所需的事务中。 从而: <container-transaction id="MethodTransaction_1178709616940"> <method id="MethodElement_1178709616955"> <ejb-name>MyName</ejb-name> <method-name>*</method-name> <trans-attribute>Required</trans-attribute> </method> <method id="MethodElement_1178709616971"> <ejb-name>MyName</ejb-name> <method-name>methodB</method-name> </method> <trans-attribute>RequiresNew</trans-attribute> </container-transaction> 现在让另一个EJB调用methodA调用EJB方法。 methodA现在运行在一个事务中。 从methodA的后续调用methodB运行在同一个事务中,还是运行在一个新的事务? (请注意,这里是实际的代码,没有明确的方法B的ejb调用)
我试图处理@ManagedProperty但没有成功! 我一直在遵循这个指南,似乎并不难。 但是我的代码根本行不通 这是一个小片段 @ManagedBean @SessionScoped public class LoginBean { @EJB private LoginUserLocal loginUser; private boolean loggedIn = false; private User user; private StreamedContent image; . . . //– @Named(value = "messagesBean") @RequestScoped public class MessagesBean { @ManagedProperty(value = "#{loginBean}") private LoginBean loginBean; public LoginBean getLoginBean() { return loginBean; } public void setLoginBean(LoginBean loginBean) { […]
我发现这个问题: @Inject和@EJB有什么区别,但我没有得到任何明智的。 我以前没有做过Java EE,也没有使用dependency injection的经验,所以我不明白我应该使用什么? 是@EJB和旧的注射方式? 在使用@Inject时使用此批注时,EJB容器是否使用新的CDI框架进行注入? 这是不同的,如果是这样的话,我应该使用@Inject而不是@EJB?
我在企业应用程序模块中有一个EJB(PersonManager),它注入了另一个EJB(Person): @Stateful public class PersonManager implements PersonManagerLocal { @EJB private PersonLocal person; @Override public void setPersonName(String name) { person.setName(name); } @Override public String getPersonName() { return person.getName(); } } 我想在JSF Web应用程序中使用PersonManager EJB。 我在faces-config.xml中定义它: <managed-bean> <managed-bean-name>personManager</managed-bean-name> <managed-bean-class>ejb.PersonManager</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> 问题是,PersonLocal EJB的注入不会发生。 person属性始终为NULL。 我错了什么? 但是,如果我把这个PersonManager注入一个JSF托pipebean,如下所示: @ManagedBean @RequestScoped public class Index { @EJB private PersonManagerLocal personManager; …. 有用。 […]
我使用JSF标记<f:event维护了一个包含页面的Web应用程序。 我已经重写了一个服务类中的方法,以引发业务exception。 但是,在引发业务exception时,不会在托pipebean中捕获,并在页面上显示exception。 似乎我的代码try/catch不起作用。 在XHTML中: <f:event listener="#{resourceBean.init(enrollment)}" type="preRenderView" /> Managed Bean中的监听器方法: private boolean canCreateResource; public void init(Enrollment enrollment) { (…) try { canCreateResource = resourceService.canCreateResource(enrollment); } catch (BusinessException e) { canCreateResource = false; } } 服务类中的方法: public boolean canCreateResource(Enrollment enrollment) { if (…) { if (mandateService.isCoordinator(user, course)) { return true; } else { throw new […]
我了解本地视图,远程视图和无界面视图的区别。 我只是不明白“无视图”(无注释)和无界面视图之间有什么区别。 另外为什么我应该用@Local注释我的界面? 如果我根本不注释界面,有什么区别?
我最近听到有人说数据传输对象 (DTO)是反模式的 。 为什么? 有什么select?