我想從使用JNDI查找的獨立JVM上運行的客戶端訪問遠程EJB3 bean。以下是我的bean類:如何使EJB3遠程接口可供客戶端使用?
@Path("/payment/")
@Consumes({ "application/xml", "application/json" })
@Produces({ "application/xml", "application/json" })
@Local({ PaymentWebServiceLocal.class })
@Remote({ PaymentWebServiceRemote.class })
@Stateless(mappedName = "ejb/PaymentWebService")
public class PaymentWebServiceImpl implements PaymentWebServiceLocal,PaymentWebServiceRemote {
private static final Logger logger = Logger.getLogger(PaymentWebServiceImpl.class);
@POST
@Path("/processpayment")
public PaymentResponse processPayment(PaymentRequest request) {
//do something
}
bean的遠程接口如下
@Remote
public interface PaymentWebServiceRemote {
public PaymentResponse processPayment(PaymentRequest request);
}
現在,我使用JNDI來調用從遠程客戶端的processPayment()方法如下查找的EJB
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
env.put(Context.PROVIDER_URL, t3:\\);
Context ctx = new InitialContext(env);
return ctx.lookup("ejb.PaymentWebService#test.webservice.payment.service.PaymentWebServiceRemote");
我不明白的是客戶端不知道遠程PaymentWebServiceRemote接口。它在另一個具有EJB Bean代碼的服務器中。我是否也必須將此界面的副本也用於客戶端代碼?或者有什麼方法可以創建一個客戶端EJB jar,並在客戶端使用EJB3的遠程接口(就像我們在EJB2中那樣)?
任何幫助表示讚賞。
那麼,它與EJB2的工作方式類似嗎? – user3057702
EJB2.1和EJB3.x都基於RMI/IIOP協議,因此它是相似的。 – Diversity