[英]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.