【问题标题】:How to create a local and remote Stateless Session Bean interface?如何创建本地和远程无状态会话 Bean 接口?
【发布时间】:2014-03-25 19:06:33
【问题描述】:

我正在尝试了解 IntelliJ Idea 及其工作原理。我需要像在 Eclipse 中一样创建一个 Session bean ejb 3.x,但在 IntelliJ Idea 中似乎有点困难。

这就是我尝试做的事情。

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

我输入 ejb-name 然后按 OK。

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

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

【问题讨论】:

  • 可能有助于通过 ejb 3.x 教程并查看本地、本地主页、将它们部署到 jboss 或其他应用程序容器的 xml 的含义......可以做一个小例子只有文本板/记事本++
  • 您创建了 JavaEE6 应用程序?
  • @Patrick 这是一个 Java EE7 应用程序。
  • 抱歉,您能告诉我如何打开此更改 EJB 类对话框吗?如果我从 EJB Facet 创建一个 EJB,我只得到了第一个创建 EJB 对话框,但是没有任何选项可以创建远程或本地接口。谢谢!

标签: jakarta-ee intellij-idea


【解决方案1】:

好的,EJB 2.1 or earlier client view 需要一个主界面和组件界面。在 JEE7 (EJB 3.x API) 中,这是可选的。

如果您创建LocalRemote 接口,这取决于您的决定,例如,如果您的 SessionBean 处理客户的订单并与计费 bean 一起工作,那么它将是@987654325 的良好候选者@。

如果您的 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");

所以,我希望这对您有所帮助,我需要将其写为答案,因为文本和列表会很长,需要评论。

帕特里克

【讨论】:

  • 如何在不同的项目中导入 OrderServiceLocal 或 OrderServiceRemote 类?我应该复制项目中的接口,我将在其中进行查找吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
相关资源
最近更新 更多