我试图掌握IntelliJ Idea及其工作原理。我需要像在Eclipse中一样创建Session bean ejb 3.x,但在IntelliJ Idea中它似乎有点困难。
这就是我尝试的方式。
首先,我右键单击项目/ new / Stateless Session Bean。 然后我得到这个弹出窗口:
我输入ejb-name然后按OK。
现在我不知道去哪里创建本地和远程会话bean。 我应该按下按钮"更改EJB类"?因为当我这样做时,这个弹出窗口出现了。
我是否想要标记远程接口和本地接口盒? 什么是本地家庭和本地之间的区别?因为当我这样做时,我为每种类型(本地和家庭)获得两个接口。
答案 0 :(得分:2)
好的,EJB 2.1 or earlier client view
需要存在家庭和组件接口。在JEE7(EJB 3.x API
)中,这是可选的。
如果你创建一个Local
或Remote
接口,它取决于你的决定,例如,如果你的SessionBean继续你的客户的订单并与计费bean一起工作,这将是一个很好的Local Access
的候选人。
如果您的Bean将从其他客户端访问,例如Glassfish
,然后您应该启用远程访问。
默认情况下,JEE7中没有注释的接口为@Local
本地客户端
本地客户:
@Local
public interface OrderServiceLocal {
// ...
}
@Local(OrderServiceLocal.class)
@Stateless
public class OrderService implement OrderServiceLocal {
// ...
}
在您的CDI Bean中,您可以像这样使用OrderService:
@Named(name = "MyCDIBean")
@SessionScoped
public class MyCDIBean {
// ...
// your applicationserver creates an instance of
// the Service if it is needed
// and he also handles the lifecycle
@Inject
OrderServiceLocal orderService;
// ...
public List<Orders> listOrders() {
return orderService.listOrders();
}
}
远程客户
远程接口
@Remote
public interface OrderServiceRemote {
// methods
}
@Remote(OrderServiceRemote.class)
@Stateless
public class OrderService implement OrderServiceRemote {
// do something cool in here ;)
}
@Named(name = "MyCDIBean")
@SessionScoped
public class MyCDIBean {
// ...
// your applicationserver creates an instance of
// the Service if it is needed
// and he also handles the lifecycle
@Inject
OrderServiceLocal orderService;
// ...
public List<Orders> listOrders() {
return orderService.listOrders();
}
}
两个接口都定义了特定于Bean的Business
和Lifecycle
方法。
Local
或Remote
视图的JNDI查找也不同,例如,如果您编写自己的客户端并使用InitialContext.lookup()来获取访问权限。
<强> @Local 强>
OrderServiceLocal osl = (OrderServiceLocal)
InitialContext.lookup("java:module/OrderServiceLocal");
<强> @Remote 强>
OrderServiceRemote osr = (OrderServiceRemote)
InitialContext.lookup("java:global/myApp/OrderServiceRemote");
所以,我希望这会对你有所帮助,我需要把它作为一个答案来写,因为文本和列表将是一个很长的评论。
帕特里克