EJB3入门(3)本地接口

Posted by Elton's Blog on June 16, 2009

之前用到的都是远程接口,顾名思义,远程接口就是提供不再同一个虚拟机中的两端程序来访问的。适合于分布式部署。但是有的时候客户端和服务端又在一个jvm中,比如在一个tomcat或者jboss的web容器中。这个时候就没有必要用远程接口了,毕竟浪费资源。可以改用local接口。

如果你尝试将上一节中的remote直接替换成local,再执行客户端,你会发现如下错误:

Could not find InvokerLocator URL at JNDI address "ShoppingCartBean/local"; looking up local Proxy from Remote JVM?

这说明你试图通过远程的jvm来调用本地的端口,因为客户端执行的这个jvm与ejb容器的jvm是两个不同的虚拟机。所以本地接口调用会失败。

在这里我们再建立一个web工程,创建web工程的时候,可以顺便创建一个EAR工程。

[caption id=”attachment_54” align=”alignnone” width=”331” caption=”创建web工程”]创建web工程[/caption]

然后在这个web工程中加入对之前shoppingcart项目的引用。注意,这里已经将shoppingcart项目中的接口改为local方式。

[caption id=”attachment_84” align=”alignnone” width=”543” caption=”修改Build Path “]修改Build Path [/caption]

在Java build path中,点击projects标签,点击add按钮,加入shoppingcart的项目

[caption id=”attachment_56” align=”alignnone” width=”536” caption=”加入相关项目”]加入相关项目[/caption]

之后,在web项目中新建一个jsp页面,如index.jsp,代码如下:


之后就可以将EAR项目导出到jboss的部署目录中了。

[caption id=”attachment_60” align=”alignnone” width=”443” caption=”导出EAR”]导出EAR[/caption]

部署好以后,jboss的输出会提示:

19:26:53,132 INFO  [TomcatDeployment] deploy, ctxPath=/EJBWeb

之后就可以在浏览器中输入localhost:8080/EJBWeb来测试本地接口了。