繁体   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