EJB的名聲很不好,尤其在Spring框架出現以後,而EJB3似乎脫胎換骨了。而我現在學習的仍然是EJB2,原因是EJB3的書很難找。暑假時大概把《精通EJB》和《EJB》這兩本書看過一下,現在想復習,加深理解,就從第一個HelloWorld開始。
文件結構:
E:.
│ build.XML
│
└─src
├─META-INF
│ application.xml
│ ejb-jar.xml
│ jboss.xml
│
├─powerwind
│ ClientServlet.Java
│ Hello.java
│ HelloBean.java
│ HelloHome.java
│
└─WEB-INF
jboss-web.xml
web.xml
ant文件
build.xml
<?xml version="1.0"?>
<project name="Hello" default="prepare" basedir=".">
<property environment="env" />
<property name="src.dir" value="${basedir}/src" />
<property name="jboss.home" value="${env.JBOSS_HOME}" />
<property name="build.dir" value="${basedir}/build" />
<property name="classes.dir" value="${build.dir}/classes" />
<property name="dist.dir" value="${basedir}/dist" />
<path id="compile.classpath">
<pathelement location="${classes.dir}" />
<fileset dir="${jboss.home}/client">
<include name="jboss-j2ee.jar" />
<include name="javax.servlet.jar" />
<include name="commons-httpclient.jar" />
</fileset>
</path>
<target name="prepare">
<mkdir dir="${classes.dir}" />
<mkdir dir="${dist.dir}" />
<copy todir="${build.dir}">
<fileset dir="${src.dir}">
<include name="WEB-INF/*.xml" />
<include name="META-INF/*.xml" />
</fileset>
</copy>
</target>
<target name="clean">
<delete dir="${build.dir}" />
<delete dir="${dist.dir}" />
</target>
<target name="compile" depends="prepare">
<javac srcdir="${src.dir}" destdir="${classes.dir}">
<classpath refid="compile.classpath" />
</javac>
</target>
<target name="jar" depends="compile">
<jar destfile="${dist.dir}/HelloEJB.jar">
<fileset dir="${build.dir}">
<exclude name="META-INF/application.xml" />
<include name="META-INF/*.xml" />
</fileset>
<fileset dir="${classes.dir}">
<include name="**/*.class" />
</fileset>
</jar>
</target>
<target name="war" depends="jar">
<jar destfile="${dist.dir}/HelloEJB.war">
<fileset dir="${build.dir}">
<include name="WEB-INF/*.xml" />
</fileset>
</jar>
</target>
<target name="ear" depends="war">
<jar destfile="${dist.dir}/HelloEJB.ear">
<fileset dir="${dist.dir}">
<include name="HelloEJB.jar" />
<include name="HelloEJB.war" />
</fileset>
<fileset dir="${build.dir}">
<include name="META-INF/application.xml" />
</fileset>
</jar>
</target>
<target name="deploy" depends="ear">
<copy file="${dist.dir}/HelloEJB.ear" overwrite="true"
todir="${jboss.home}/server/default/deploy" />
</target>
</project>
更多的請看:http://www.QQread.com/windows/2003/index.Html
java源文件
Hello.java
package powerwind;
import java.rmi.RemoteException;
import javax.ejb.EJBObject;
publicinterface Hello
extends EJBObject {
public String sayHello()
throws RemoteException;
}
HelloHome.java
package powerwind;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;
publicinterface HelloHome
extends EJBHome {
public Hello create()
throws RemoteException, CreateException;
}
HelloBean.java
package powerwind;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
publicclass HelloBean
implements SessionBean {
private SessionContext context;
publicvoid ejbCreate()
throws EJBException, RemoteException {
}
publicvoid ejbActivate()
throws EJBException, RemoteException {
}
publicvoid ejbPassivate()
throws EJBException, RemoteException {
}
publicvoid ejbRemove()
throws EJBException, RemoteException {
}
publicvoid setSessionContext(SessionContext newContext)
throws EJBException {
context = newContext;
}
public String sayHello()
throws EJBException {
return"Hello from ejb";
}
}
用於測試的Servlet
ClientServlet.java
package powerwind;
import java.io.IOException;
import java.io.PrintWriter;
import javax.naming.InitialContext;
import javax.rmi.PortableRemoteObject;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
publicclass ClientServlet
extends HttpServlet {
publicvoid doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String message =
null;
try {
InitialContext ic =
new InitialContext();
Object obj = ic.lookup("HelloEJB");
HelloHome home = (HelloHome) PortableRemoteObject.
narrow(obj,
powerwind.HelloHome.
class);
Hello hello = home.create();
message = hello.sayHello();
}
catch (Exception e) {
e.printStackTrace();
}
out.println(message);
out.flush();
out.close();
}
publicvoid doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
更多的請看:http://www.qqread.com/windows/2003/index.html
配置文件:
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'>
<ejb-jar>
<description>HelloEJB,my first ejb program</description>
<display-name>HelloEJB</display-name>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<home>powerwind.HelloHome</home>
<remote>powerwind.Hello</remote>
<ejb-class>powerwind.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
jboss-jar
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HelloEJB</ejb-name>
<jndi-name>HelloEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>
application.xml
<?xml version="1.0"?>
<application>
<display-name>HelloEJB J2EE Application</display-name>
<module>
<web>
<web-uri>HelloEJB.war</web-uri>
<context-root>/HelloEJB</context-root>
</web>
</module>
<module>
<ejb>HelloEJB.jar</ejb>
</module>
</application>
jboss-web.xml
<?xml version="1.0"?>
<jboss-web>
<ejb-ref>
<ejb-ref-name>HelloEJB</ejb-ref-name>
<jndi-name>HelloEJB</jndi-name>
</ejb-ref>
</jboss-web>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>ClientServlet</servlet-name>
<servlet-class>powerwind.ClientServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ClientServlet</servlet-name>
<url-pattern>/ClientServlet</url-pattern>
</servlet-mapping>
<ejb-ref>
<ejb-ref-name>HelloEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>powerwind.HelloHome</home>
<remote>powerwind.Hello</remote>
</ejb-ref>
</web-app>
輸入 ant –deploy 部署,啟動Jboss服務器,在浏覽器地址欄輸入:
http://localhost:8080/HelloEJB/ClientServlet
然後看到浏覽器輸出“
Hello from ejb”,就是成功了。