嗨,我有一個名爲「服務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次:)
對不起,我不明白。 service-lib包含遠程接口和所有需要的類(傳輸等),我已經嘗試將service-lib項目添加到客戶端應用程序(激活了包選項而不是),但部署總是失敗,出現「zip文件是空的 - 無效的zip文件... service-lib.jar「。 如果必須將其打包到我的項目中,有可能調用遠程ejb,這有什麼意義? –
只打包遠程接口等,而不是實現。 – Puce
所以,我誤解了一些東西:遠程調用ejb我必須打包遠程接口是或是,所以如果我有100個使用「服務」的應用程序,我將有100個服務遠程接口的副本,是嗎? –