开发步骤
1.开发服务端
1.1 开发HelloWorld和HelloWorldLocal接口,在开发HelloWorldBean实现类
2.开发客户端
2.1 开发EJBClient2的java客户端项目和EJBClient的web项目
3.把helloworld.jar服务和EJBClient.war都部署在JBoss容器里,helloworld.jar打包时只需要选定HelloWorld、HelloWorldLocal、HelloWorldBean这三个类导出即可;
HelloWorld.java //远程接口类
package cn.cmcc.ejb3;
public interface HelloWorld {
public String say(String name);
}
HelloWorldLocal.java //本地接口类,现在是模拟,所以就一样的
package cn.cmcc.ejb3;
public interface HelloWorldLocal extends HelloWorld {
}
HelloWorldBean.java //接口实现类
package cn.cmcc.ejb3.impl;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import cn.cmcc.ejb3.HelloWorld;
import cn.cmcc.ejb3.HelloWorldLocal;
@Stateless //申明是一个无状态bean
@Remote(HelloWorld.class) //申明是一个远程接口,不写默认是本地接口
@Local(HelloWorldLocal.class) //申明是一个本地接口
public class HelloWorldBean implements HelloWorld,HelloWorldLocal {
@Override
public String say(String name) {
return name+":说,您好";
}
}
EJBClient2.java //这个是远程接口,因为这个项目和helloworld.jar不在同一个应用服务器中,所以调用远程接口
package cn.cmcc.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import cn.cmcc.ejb3.HelloWorld;
public class EJBClient2 {
public static void main(String[] args) {
try {
//默认是去classpath下寻找jndi.properties文件
InitialContext ctx = new InitialContext();
HelloWorld helloworld = (HelloWorld) ctx
.lookup("HelloWorldBean/remote");
System.out.println(helloworld.say("佛山"));
} catch (NamingException e) {
System.out.println(e.getMessage());
}
}
}
EJBClient.war是一个web项目,和服务端部署在同一个JBOSS应用服务器中,就已个简单的页面
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@page import="javax.naming.*"%>
<%@page import="cn.cmcc.ejb3.*"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
try {
/*
当web客户端和EJB服务部署在同一个应用服务器中,因为应用服务器启动时会把JNDI驱动类等上下文信息添加进系统属性
当不再同一个应用服务器中,需要指定JNDI驱动类等上下文信息
因为现在是helloworld.jar服务和EJBClient.war都部署在JBoss容器里,所以不需要指定JNDI驱动类等上下文信息
*/
InitialContext ctx = new InitialContext();
HelloWorldLocal helloworld = (HelloWorldLocal) ctx
.lookup("HelloWorldBean/local");
out.println(helloworld.say("佛山"));
} catch (NamingException e) {
out.println(e.getMessage());
}
%>
</body>
</html>