客户端调用EJB有两种方法:1、远程接口;2、本地接口。在使用远程接口调用EJB时会产生性能消耗,因此,我们应该尽可能的采用本地接口调用EJB。使用本地接口调用EJB只需满足一个条件即可——在同一JVM中,也就是在同一服务器中,这样的话它们就可以直接在内存中进行互换。具体操作如下:
创建EJB:
先创建一个EJB接口:
package com.ejb;
public interface HelloWorld {
public String sayHello(String name);
}
再创建EJB实现类
package com.ejb;
import javax.ejb.Local;
import javax.ejb.Stateless;
@Stateless//无状态
@Local(HelloWorld.class)//默认情况下为实现本地接口,远程接口的写法为:@Remote
public class HelloWorldBean implements HelloWorld {
@Override
public String sayHello(String name) {
return name+"说:"+"我爱你";
}
}
然后通过ANT将此EJB打成一个jar包,ANT的写法如下:
<?xml version="1.0" encoding="UTF-8"?>
<!--工程名字以及它所在的目录,“.”代表跟此文件在同一目录-->
<project name="EJBTest" basedir=".">
<!--相关属性-->
<!--src的目录-->
<property name="src.dir" value="${basedir}\src"></property>
<!--声明环境变量的别名-->
<property environment="env" />
<!--jboss环境变量的值-->
<property name="jboss.home" value="${env.JBOSS_HOME}"></property>
<!--jboss服务的加载项,在此设置为默认的-->
<property name="jboss.server.config" value="default"></property>
<!--class文件的存放目录-->
<property name="build.dir" value="${basedir}\build"></property>
<!--指定jboss的JAR包及class文件的路径-->
<path id="build.classpath">
<fileset dir="${jboss.home}\client">
<include name="*.jar"/>
</fileset>
<!--class文件的目录-->
<pathelement location="${build.dir}"/>
</path>
<!--创建class文件目录-->
<target name="prepare">
<delete dir="${build.dir}"></delete>
<mkdir dir="${build.dir}"/>
</target>
<!--创建编译任务时的环境,depends表示在执行此任务之前会先执行的任务-->
<target name="compile" depends="prepare" description="编译">
<javac srcdir="${src.dir}" destdir="${build.dir}">
<classpath refid="build.classpath"></classpath>
</javac>
</target>
<target name="ejbjar" depends="compile" description="创建EJB发布包">
<jar destfile="${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>
执行的操作如下:
当然,在执行ANT执行先得启动JBOSS服务器。这样的话,在执行完此ANT之后后台就会打印出一下信息:
然后,再新建一个web工程,建立一个EJB客户端的jsp页面,代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="javax.naming.*,com.ejb.*" %>
<!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>EJB客户端</title>
</head>
<body>
<%
try {
InitialContext ctx = new InitialContext();
HelloWorld helloworld = (HelloWorld)ctx.lookup("HelloWorldBean/local");//括号内为JNDI名称,远程接口时为:类名/remote(local)
out.print(helloworld.sayHello("北京本地人"));
} catch (NamingException e) {
e.printStackTrace();
}
%>
</body>
</html>
接着,把此工程打成一个war包,然后丢到JBOSS服务器中,路径为:D:\JBoss\jboss-5.1.0.GA\server\default\deploy
最后直接在页面中输入相应的地址就可打印你想要的结果,如图: