一:开发本地接口
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*,cn.itm.ejb3.*" %>
<!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 ic = new InitialContext( );
HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/local");
// HelloWorldLocal hw = (HelloWorldLocal) ic.lookup("HelloWorldBean/local");
String message = hw.sayHello("本地人 ");
out.println(message);
}catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
HelloWOrld项目:
package cn.itm.ejb3;
public interface HelloWorld {
// 业务方法:
public String sayHello(String name);
}
package cn.itm.ejb3.impl;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import cn.itm.ejb3.HelloWorld;
import cn.itm.ejb3.HelloWorldLocal;
@Stateless // 指明EJB他是一个无状态的会话bean。
@Local(HelloWorld.class) // 本地接口。
/*@Remote(HelloWorld.class) //
@Local(HelloWorldLocal.class) // 如果客户端 和 EJB是部署在同一个 jboss 内,我们优先调用 本地接口。
*/
public class HelloWorldBean implements HelloWorld,HelloWorldLocal{
@Override
public String sayHello(String name) {
return name + "说:您好,世界!!";
}
}
package cn.itm.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import cn.itm.ejb3.HelloWorld;
public class EJBTest {
/**
* @param args
*/
public static void main(String[] args) {
try {
InitialContext ic = new InitialContext( );
HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/local");
// HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/remote"); // 不在同一个jvm类 只能通过远程。
String message = hw.sayHello("天海");
System.out.println(message);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
注意:
首先:启动jboss,在build.xml中发布helloworld项目。
要把helloworld项目导入到EJBClient项目中。
然后:把EJBClient项目打成war包,放到安装jboss的deploy的发布目录、
最后:在浏览器中输入本地接口。
不在同一个jvm类 只能通过远程。
如果客户端 和 EJB是部署在同一个 jboss 内,我们优先调用 本地接口。
二:既有本地又有远程的调用。
package cn.itm.ejb3.impl;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import cn.itm.ejb3.HelloWorld;
import cn.itm.ejb3.HelloWorldLocal;
@Stateless // 指明EJB他是一个无状态的会话bean。
@Remote(HelloWorld.class) //
@Local(HelloWorldLocal.class) // 如果客户端 和 EJB是部署在同一个 jboss 内,我们优先调用 本地接口。
public class HelloWorldBean implements HelloWorld,HelloWorldLocal{
@Override
public String sayHello(String name) {
return name + "说:您好,世界!!";
}
}
package cn.itm.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import cn.itm.ejb3.HelloWorld;
public class EJBTest {
/**
* @param args
*/
public static void main(String[] args) {
try {
InitialContext ic = new InitialContext( );
HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/remote"); // 不在同一个jvm类 只能通过远程。
String message = hw.sayHello("天海");
System.out.println(message);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
package cn.itm.ejb3;
public interface HelloWorldLocal extends HelloWorld {
}
package cn.itm.ejb3;
public interface HelloWorld {
// 业务方法:
public String sayHello(String name);
}
package cn.itm.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import cn.itm.ejb3.HelloWorld;
public class EJBTest {
/**
* @param args
*/
public static void main(String[] args) {
try {
InitialContext ic = new InitialContext( );
HelloWorld hw = (HelloWorld) ic.lookup("HelloWorldBean/remote"); // 不在同一个jvm类 只能通过远程。
String message = hw.sayHello("天海");
System.out.println(message);
} catch (NamingException e) {
e.printStackTrace();
}
}
}
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*,cn.itm.ejb3.*" %>
<!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 ic = new InitialContext( );
HelloWorldLocal hw = (HelloWorldLocal) ic.lookup("HelloWorldBean/local");
String message = hw.sayHello("本地人 ");
out.println(message);
}catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
以下是配置文件ANT。
<?xml version="1.0" encoding="UTF-8"?>
<!-- name中指的是项目名称。basedir指的是与build.xml的同级目录 -->
<!--
(1)basedir 代表 项目所在的路径。
-->
<project name="HelloWorld" basedir=".">
<!-- 项目源文件 所在的目录。-->
<property name="src.dir" value="${basedir}\src" />
<!-- 指向环境变量中系统变量 -->
<property environment="env" />
<!-- 指向系统变量中的JBOSS_HOME变量 ,可以得知JBOSS_HOME的安装地址 -->
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="jboss.server.config" value="default" />
<!-- class文件存在的目录 -->
<property name="build.dir" value="${basedir}\build" />
<path id="build.classpath">
<!-- 包含 client路径下的所有 jar文件-->
<fileset dir="${jboss.home}\client">
<include name="*.jar" />
</fileset>
<pathelement location="${build.dir}" />
</path>
<target name="prepare">
<delete dir="${build.dir}" />
<mkdir dir="${build.dir}" />
</target>
<!-- depends="prepare" 确保 先执行上面的代码,在执行下面的代码 -->
<target name="compile" depends="prepare" description="编译">
<!-- class 存放到 destdir这个目录。在调用javac 这个目录就必须建立起来-->
<javac srcdir="${src.dir}" destdir="${build.dir}" >
<classpath refid="build.classpath" />
</javac>
</target>
<target name="ejbjar" depends="compile" description="创建EJB发布包">
<jar jarfile="${basedir}\${ant.project.name}.jar">
<fileset dir="${build.dir}">
<include name="**/*.class" />
</fileset>
</jar>
</target>
<target name="deploy" depends="ejbjar" description="发布ejb">
<copy file="${basedir}\${ant.project.name}.jar" todir="${jboss.home}\server\${jboss.server.config}\deploy" />
</target>
<target name="undeploy" description="卸载ejb">
<delete
file="${jboss.home}\server\${jboss.server.config}\deploy\${ant.project.name}.jar" />
</target>
</project>