如何创建本地和远程无状态会话Bean接口?

时间:2014-03-25 19:06:34

标签: java-ee intellij-idea

我试图掌握IntelliJ Idea及其工作原理。我需要像在Eclipse中一样创建Session bean ejb 3.x,但在IntelliJ Idea中它似乎有点困难。

这就是我尝试的方式。

首先,我右键单击项目/ new / Stateless Session Bean。 然后我得到这个弹出窗口:

enter image description here

我输入ejb-name然后按OK。

现在我不知道去哪里创建本地和远程会话bean。 我应该按下按钮"更改EJB类"?因为当我这样做时,这个弹出窗口出现了。

enter image description here

我是否想要标记远程接口和本地接口盒? 什么是本地家庭和本地之间的区别?因为当我这样做时,我为每种类型(本地和家庭)获得两个接口。

1 个答案:

答案 0 :(得分:2)

好的,EJB 2.1 or earlier client view需要存在家庭和组件接口。在JEE7(EJB 3.x API)中,这是可选的。

如果你创建一个LocalRemote接口,它取决于你的决定,例如,如果你的SessionBean继续你的客户的订单并与计费bean一起工​​作,这将是一个很好的Local Access的候选人。

如果您的Bean将从其他客户端访问,例如Glassfish,然后您应该启用远程访问。

默认情况下,JEE7中没有注释的接口为@Local

本地客户端

  • 在同一个虚拟机上运行
  • 它可以是会话Bean或其他Web组件

本地客户:

@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();
   }

}

远程客户

  • 远程客户端可以在不同的JVM或/和不同的计算机上运行
  • 应该访问的Bean必须实现远程接口,因为远程客户端无法通过非接口视图访问

远程接口

@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的BusinessLifecycle方法。

LocalRemote视图的JNDI查找也不同,例如,如果您编写自己的客户端并使用InitialContext.lookup()来获取访问权限。

<强> @Local

OrderServiceLocal osl = (OrderServiceLocal)
         InitialContext.lookup("java:module/OrderServiceLocal");

<强> @Remote

OrderServiceRemote osr = (OrderServiceRemote)
        InitialContext.lookup("java:global/myApp/OrderServiceRemote");

所以,我希望这会对你有所帮助,我需要把它作为一个答案来写,因为文本和列表将是一个很长的评论。

帕特里克