2

根据我的引用,@Local 会话 bean 可以在部署 bean 的同一个 JVM 下访问(客户端和服务器在同一个 JVM 上运行)。

我已经实现了一个简单的无状态本地会话 bean 并部署在我的 GlassFish 服务器中(也在 JBoss 服务器中尝试过)。

我的独立客户端查找会话 bean,但无法访问此本地会话。我确实对可以访问的@Remote 进行了同样的尝试。

至此,服务器和客户端都在相同/单个 JVM(在我的机器上)中运行。

是否可以从独立客户端应用程序访问本地会话 bean?有没有具体的访问方式?

我的代码是:

无状态本地会话 bean

@Stateless
public class TicketBookingImpl implements TicketBookingLocal {    
   public String doBooking(String name) {
      return "Ticket Booked for " + name;
   }
}

查找代码

public static void main(String[] args) {
    try {
        Properties props = new Properties();
        props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory");
        props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming");
        props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");    
        props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
        props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
        final Context context = new InitialContext(props);
        System.out.println("Doing lookup");
        TicketBooking ticketBooking = (TicketBooking) context.lookup("java:global/ejb-work-1/TicketBookingImpl");
4

1 回答 1

1

不幸的是,您只能在同一个部署单元(通常是 ear)中使用本地接口。

您必须在两种情况下使用远程接口:

  • 客户端不在同一个部署单元中
  • 在集群环境中

查看此链接以获取有关本地/远程接口使用的更详细建议:EJB 中的本地与远程接口 (EJB3)

于 2013-03-24T20:18:15.800 回答