[英]How do i access EJB implementing remote interface in separate web application?
我正在使用Netbeans 6.8和Glassfish v3.0。
我創建了一個ejb模塊並從數據庫創建了實體類,然后使用遠程接口創建了無狀態會話bean。 比如說。
@Remote
public interface customerRemote{
public void add(String name, String address);
public Customer find(Integer id);
}
@Stateless
public class customerBean implements customerRemote{
//implementations of methods
}
然后我創建了一個新的Web應用程序。 但是現在如何在我的Web應用程序中訪問遠程ejb。 我可以用jndi名稱查找一個bean,但我想知道的是,它將返回什么類型的對象? 我如何在customerRemote中進行類型轉換? 我的Web應用程序中沒有任何名為customerRemote的類。 那么,我該怎么做? 另外,實體類客戶怎么樣? 我的Web應用程序中也沒有名為Customer的類。 所有ejb和實體類都在單獨的ejb模塊中。 請幫我 :(
我如何在customerRemote中進行類型轉換? 我的Web應用程序中沒有任何名為customerRemote的類。 那么,我該怎么做? 另外,實體類客戶怎么樣? 我的Web應用程序中也沒有名為Customer的類。 所有ejb和實體類都在單獨的ejb模塊中。
您的Web應用程序必須依賴於包含這些類和接口的庫。 然后你就可以像往常一樣導入界面和類型轉換。 你有兩種方法:
所有在一個罐子里 。 這似乎是你現在擁有的。 在這種情況下,您的Web應用程序需要依賴於此jar。
拆分API和實現 。 更好的方法是將ejb模塊拆分為兩個jar:一個jar myModule-api
包含屬於模塊API的類。 在這種情況下,將是customerRemote
和Customer
。 另一個jar myModule-impl
包含實現(當然,實現依賴於API)。 然后在您的Web應用程序中,您只需要依賴myModule-api
。
我正在使用Eclipse 3.5.2,EJB 3.0和GlassFish 2.1,但我確信這對你也有用。
好吧,首先我創建了一個EJB項目,它將作為獨立的EJB模塊部署在容器上,另一個項目實際上是一個使用單個servlet進行測試的Web應用程序。
我可以解決相同的問題,將下一個參數添加到調用bean的servlet上的@EJB聲明:
public class SimlpeServletClient extends HttpServlet {
.
.
.
@EJB(beanInterface=ISimpleJob.class,mappedName="ISimpleJob")
ISimpleJob statelesBean;
.
.
.
protected void doPost(HttpServletRequest ...){...}
.
.
.
}
這是實現暴露給servlet的接口的bean的結構:
@Stateless(name="SimpleJobBean", mappedName="ISimpleJob")
@Remote( { ISimpleJob.class })
public class SimpleJobBean implements ISimpleJob {
.
.
.
}
正如您所看到的,您的客戶端似乎只知道要使用的接口,但它並不告訴服務器哪個資源可以滿足請求。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.