2013-03-24 135 views
2

根據我的參考資料,可以在部署bean的同一JVM(客戶端&服務器在同一JVM上運行)下訪問@Local會話bean。獨立EJB客戶端本地無狀態會話bean查找

我已經實現了一個簡單的無狀態本地會話bean並部署在我的GlassFish服務器中(也在JBoss服務器中嘗試過)。

而我的獨立客戶端查找會話bean,但本地會話無法訪問。我確實嘗試了可以​​訪問的@Remote。

因爲這兩個服務器和客戶端運行在相同/單個JVM(在我的機器上)。

是否可以從獨立客戶端應用程序訪問本地會話bean?有沒有具體的訪問方式?

我的代碼是:

Statless本地會話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"); 

回答

1

不幸的是,你只能在同一部署單元(通常耳)使用本地接口。

你必須使用遠程接口有兩種情況:

  • 客戶端不在同一部署單元
  • 在集羣環境中

檢查此鏈接獲得更詳細的建議關於本地/遠程接口的使用:Local vs. Remote Interfaces in EJB (EJB3)

相關問題