我从EJB开始,我遇到了问题:
我在youtube上受到这个啧啧的引导 - http://www.youtube.com/watch?v=6xJx9hpzkbs (这是法语,但并不重要)
所以基本上tut(和我一样)做的是,创建一个EJB项目,创建无状态会话Bean(MyBean)和一个远程接口(MyBeanRemote),一个简单的方法返回一个字符串。
他还创建了动态Web项目,并在Servlets doGet方法中使用以下代码来调用bean方法:
Context con = new InitialContext();
Object ob = con.lookup("MyBean/remote");
if(ob != null){
MyBeanRemote bean = (MyBeanRemote) ob;
// And then prints out the returned value from the method
}
但问题是我在客户端项目中没有可用的MyBeanRemote接口。他是怎么得到的? (视频5:17)
答案 0 :(得分:0)
如果你的是基于maven的项目,你可以通过在你的pom.xml文件中添加一个插件来生成客户端jar,如下所示
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<configuration>
<generateClient>true</generateClient>
<clientIncludes>
<clientInclude>**/*Local.class</clientInclude>
<clientInclude>**/*Remote.class</clientInclude>
<clientInclude>**/*Exception.class</clientInclude>
</clientIncludes>
</configuration>
</plugin>
</plugins>
</build>
答案 1 :(得分:0)
正如您在2:47分钟所看到的,他在服务器中部署了EJB(包括接口)。所以你没有明确地将它添加到项目中(这是远程 bean的想法)。所以你只需要知道名称的接口(“MyBean / remote”)来进行查找。然后容器将解析并找到正在实现该接口的正确对象。
这是一种使用EJB的方法,稍后您可以看到您可以使用本地接口,甚至可以使用无bean的接口视图。也许你在想“远离什么?,本地到底是什么?”嗯...到JVM(通常)。您仍然可以在同一JVM中对EJB进行远程调用(因为EJB存在于其他服务器中的JVM),这比本地/无接口调用的成本更高。
这个基本概念通常用作:依赖注入,其中您只描述接口的对象(加上@EJB注释),容器将找出正确的对象。
要了解有关何时选择本地与远程的更多信息,请参阅此文章: http://docs.oracle.com/javaee/6/tutorial/doc/gipjf.html