2014-03-27 75 views
0

嗨,我有一個名爲「服務EJB」這個EJB項目:的NetBeans 7-8,注入遠程EJB

@Stateless 
@Remote(ServiceRemote.class) 
public class Services implements ServiceLocal, ServiceRemote { 
    [...business code...] 
} 

在我的本地接口,在同一個項目:

@Local 
public interface ServiceLocal { } 

和遠程接口,在一個類庫項目名爲「服務LIB」:

@Remote 
public interface ServiceRemote { 
    public boolean checkIfOk(); 
} 

我可以部署它的機智hout問題,單獨或在Java EE應用程序中。問題是我不明白如何告訴NetBeans我想從另一個應用程序調用這些bean。比如我有一戰組件,其中一個servlet裏面我寫了另一個Java EE項目:

@EJB 
private ServiceRemote serviceTest; 

當然它會失敗編譯的,所以我試着用:

InitialContext ic = new InitialContext(); 
ServiceRemote serviceTest = (ServiceRemote) ic.lookup("ServiceRemote");  

沒有運氣...在NetBeans中,我可以告訴它使用「service-lib」作爲參考?我不希望它被添加爲庫,然後用耳朵部署,我只想讓NetBeans正確編譯代碼。

很抱歉,如果這個問題聽起來很愚蠢,但我閱讀文檔,我不understant我缺少的是什麼?

---編輯---

我我會盡量做得更清楚。 「service-ejb」引用「service-lib」,所以我已經爲glassfish部署了「service-ejb」。正確的,我有:

glassfish_applications_directory $ find -name "service*" 
./__internal/service-ejb 
./__internal/service-ejb/service-ejb.jar 
./service-ejb 
./service-ejb/com/tecytal/components/email/beans/Service.class 
./service-ejb/com/tecytal/components/email/interfaces/local/ServiceLocal.class 
./service-ejb/service-lib.jar 

然後我打開一個Java EE項目,姑且稱之爲「myEngine」以戰模塊「myEngine戰」。我試圖在「myEngine-war」中添加對「service-lib」的引用,當然,在這種情況下它編譯得很好。關鍵是,我所能做的一切,告訴於NetBeans不打包「服務LIB」與戰爭,但是當我部署「myEngine」我得到:

glassfish_applications_directory $ find -name "service*" 
./myEngine/lib/service-lib.jar 
./__internal/service-ejb 
./__internal/service-ejb/service-ejb.jar 
./service-ejb 
./service-ejb/com/tecytal/components/email/beans/Service.class 
./service-ejb/com/tecytal/components/email/interfaces/local/ServiceLocal.class 
./service-ejb/service-lib.jar 

我不想有兩個service-lib.jar在我的服務器中,一個在service-ejb和一個在myEngine中,我不明白我如何在NetBeans中使用遠程ebj告訴他不要部署相同的庫3214899213次:)

回答

0

我建議將遠程服務接口及其引用的所有類(包括例外)添加到單獨的jar中。然後在另外兩個項目中宣佈對這個罐子的依賴。

I don't want it to be added as library and then deployed with the ear 

我推薦只添加該服務的LIB包含接口等作爲一間圖書館和耳朵部署,而不是整個包含實施服務的EJB。

+0

對不起,我不明白。 service-lib包含遠程接口和所有需要的類(傳輸等),我已經嘗試將service-lib項目添加到客戶端應用程序(激活了包選項而不是),但部署總是失敗,出現「zip文件是空的 - 無效的zip文件... service-lib.jar「。 如果必須將其打包到我的項目中,有可能調用遠程ejb,這有什麼意義? –

+0

只打包遠程接口等,而不是實現。 – Puce

+0

所以,我誤解了一些東西:遠程調用ejb我必須打包遠程接口是或是,所以如果我有100個使用「服務」的應用程序,我將有100個服務遠程接口的副本,是嗎? –