簡體   English   中英

如何在單獨的Web應用程序中訪問EJB實現遠程接口?

[英]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:一個ja​​r myModule-api包含屬於模塊API的類。 在這種情況下,將是customerRemoteCustomer 另一個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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM