2

I am starting with EJB and I am having a problem:

I am guided by this tut on youtube - http://www.youtube.com/watch?v=6xJx9hpzkbs (It's in french but it doesn't really matter)

So basically what tut (And me as well) does is, create an EJB project, create stateless Session Bean (MyBean) and a Remote Interface (MyBeanRemote), with one simple method returning a string.

He also creates dynamic web project and uses the following code in a Servlets doGet method to call a bean method:

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
}

But the problem is that I have no MyBeanRemote interface avaliable in the client project. how does he get it? (5:17 on Video)

4

2 回答 2

0

t如果您的项目是基于 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>
于 2013-10-07T18:10:51.407 回答
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

于 2013-10-08T03:28:10.303 回答