一、目录结构与打包
jbossEJB(文件夹)
---------------
|
|--ejb组件(文件夹)
| |
| |--META-INF(文件夹)
| | |--ejb-jar.xml
| | |--jboss.xml
| |
| |--ejbs(文件夹)
| | |--Hai.class
| | |--HaiHome.class
| | |--HaiBean.class
|
|--web组件(文件夹)
| |--haiejb.jsp
| |
| |--WEB-INF(文件夹)
| | |--web.xml
| | |--jboss.xml
|
|--META-INF(文件夹)
| |--application.xml
打包haiejb.jar:jar cvf haiejb.jar META-INF/ ejbs/
打包haiejb.war:jar cvf haiejb.war haiejb.jsp WEB-INF/
打包haiejb.ear:jar cvf haiejb.ear haiejb.jar haiejb.war META-INF/
二、文件
1、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>Hai EJB instance.</description>
<display-name>Hai EJB</display-name>
<enterprise-beans>
<session>
<ejb-name>HaiEJB</ejb-name>
<home>ejbs.HaiHome</home>
<remote>ejbs.Hai</remote>
<ejb-class>ejbs.HaiBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Bean</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>
2、jboss.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>HaiEJB</ejb-name>
<jndi-name>ejb/HaiEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>
3、java文件
//Haihome.java
package ejbs;
import java.io.Serializable;
import java.rmi.*;
import javax.ejb.*;
public interface HaiHome extends EJBHome {
Hai create() throws RemoteException, CreateException;
}
//Hai.java
package ejbs;
import javax.ejb.*;
import java.rmi.RemoteException;
public interface Hai extends EJBObject {
public String sayHai() throws RemoteException;
}
//HaiBean.java
package ejbs;
import javax.ejb.*;
import javax.naming.*;
public class HaiBean implements SessionBean{
public String sayHai(){
return "Hai, EJB technology!";
}
public void ejbCreate() throws EJBException {}
public void ejbRemove() throws EJBException {}
public void ejbPassivate(){}
public void ejbActivate(){}
public void setSessionContext(SessionContext sc){}
}
4、haiejb.jsp
<%@ page contentType="text/html;charset=GBK" %>
<%@ page import="ejbs.*,javax.ejb.*,javax.naming.*,javax.rmi.PortableRemoteObject,java.rmi.RemoteException" %>
<html>
<body>
<% String message = "nothing!";
try {
InitialContext ic = new InitialContext();
Object objRef = ic.lookup("ejb/HaiEJB");
HaiHome home = (HaiHome) PortableRemoteObject.narrow(objRef,ejbs.HaiHome.class);
Hai haiRemote = home.create();
message = haiRemote.sayHai();
} catch (RemoteException re) {
re.printStackTrace();
} catch (CreateException ce) {
ce.printStackTrace();
} catch (NamingException ne) {
ne.printStackTrace();
}
%>
<h1><%=message%></h1>
</body>
</html>
5、web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<ejb-ref>
<ejb-ref-name>HaiEJB</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>ejbs.HaiHome</home>
<remote>ejbs.Hai</remote>
</ejb-ref>
</web-app>
6、jboss-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
<ejb-ref>
<ejb-ref-name>HaiEJB</ejb-ref-name>
<jndi-name>ejb/HaiEJB</jndi-name>
</ejb-ref>
</jboss-web>
三、部署J2EE应用
把haiejb.ear拷贝到JBOSS_HOME\server\default\deploy\
启动jboss 4.0.2默认服务器,注意命令行窗口中有无异常,如果有异常情况,请查看log文件:
JBOSS_HOME\server\default\log\server.log
从中查找分析问题所在,然后改正之,直到无异常显示
说明:haiejb的servlet写在JBOSS_HOME\server\default\work\jboss.web\localhost\里,可以删除并重新部署。
最后在浏览器地址栏中键入:
http://localhost:8080/haiejb/haiejb.jsp
结果: Hai, EJB technology!
四、application client
//Client.java
import ejbs.HaiHome;
import ejbs.Hai;
import javax.ejb.*;
import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import java.rmi.RemoteException;
import java.util.Properties;
public class Client{
public static void main(String []args){
String message = "nothing!";
Properties env=new Properties();
env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
env.put("java.naming.provider.url","localhost:1099");
env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
try{
InitialContext ic = new InitialContext(env);
Object objRef = ic.lookup("ejb/HaiEJB");
HaiHome home =(HaiHome)PortableRemoteObject.narrow(objRef,HaiHome.class);
Hai haiRemote = home.create();
message = haiRemote.sayHai();
System.out.println(message);
}catch(RemoteException re){
re.printStackTrace();
}catch (CreateException ce){
ce.printStackTrace();
}catch (NamingException ne){
ne.printStackTrace();
}
}
}
application client的运行注意事项请参照本博客以前的文章(jboss3.2.3的例子)