ejb3.1无接口会话bean可以远程访问吗

如题所述

概述

当客户端与ejb运行在同一个jvm时,他们之间可以通过内存进行交互,没有必要进行网络通信,减少性能的开销,所以引入了本地接口,只有客户端与ejb运行在同一个jvm中(客户端与ejb发布在同一个jboss内),才能采用本地接口,否则只能采用远程接口。
实现
编写本地接口类,继承与前面编写的远程接口,以使本地接口继承远程接口的所有业务方法

[java] view plain copy
package wang.ejb3;
public interface HelloWorldLocal extends HelloWorld{
}
编写本地接口的ejb实现类,实现本地接口和远程接口,这样在本地客户端和远程客户端都可以调用该ejb

[java] view plain copy
package wang.ejb3.impl;
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Local;
import javax.ejb.Stateless;
import wang.ejb3.HelloWorld;
import wang.ejb3.HelloWorldLocal;
@Stateless
@Remote(HelloWorld.class)
@Local(HelloWorldLocal.class)
public class HelloWorldBean implements HelloWorld, HelloWorldLocal {
public String sayHello(String name) {
return name + "说:你好,世界";
}
}
利用build.xml构建文件部署该ejb到jboss服务器中。

编写本地接口客户端,建立一个web的项目,新建一个testLocal.jsp文件

[java] view plain copy
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*,wang.ejb3.HelloWorldLocal" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
try {
InitialContext ctx = new InitialContext();
HelloWorldLocal helloworld = (HelloWorldLocal)ctx.lookup("HelloWorldBean/local");
out.println(helloworld.sayHello("张三"));
} catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
把该web项目发布成war包,并且部署到jboss服务器中,启动jboss,在浏览器中输入得到正确的结果,表示客户端调用本地ejb成功。
温馨提示:答案为网友推荐,仅供参考
相似回答
大家正在搜