开发具有本地接口和远程接口的无状态bean

开发步骤

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>

猜你喜欢

转载自javaeedevelop.iteye.com/blog/1830716