开发工具:javaee版本的eclipse
jboss4.0、jdk1.6
经测试,ejb2,0似乎不能用jboss5来运行,所以改用jboss4。
用javaee版本的eclipse配置好jboss4。
新建ejb项目,选择jboss4和 ejb2.0。
然后加入java代码:
package com.ejb; import java.rmi.RemoteException; import javax.ejb.EJBObject; /** * 所有的业务方法都要在此接口中声明 */ public interface Hello extends EJBObject { /** * 业务方法,组件接口中的业务方法必须抛出RemoteException * @param someOne * @return * @throws RemoteException */ public String sayHello(String someOne) throws RemoteException; }
package com.ejb; import java.rmi.RemoteException; import javax.ejb.EJBException; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import static java.lang.System.out; /** * 所有具体的业务逻辑都在此类里面,此类不抛出远程异常 */ public class HelloBean implements SessionBean { private static final long serialVersionUID = 1L; @Override public void ejbActivate() throws EJBException, RemoteException { out.println("ejbActivate"); } @Override public void ejbPassivate() throws EJBException, RemoteException { out.println("ejbPassivate"); } @Override public void ejbRemove() throws EJBException, RemoteException { out.println("ejbRemove"); } @Override public void setSessionContext(SessionContext arg0) throws EJBException, RemoteException { out.println("setSessionContext"); } public void ejbCreate() { out.println("ejbCreate"); } /** * 必须有这个方法,但是这个方法不是来自SessionBean接口的 * @param someOne * @return */ public String sayHello(String someOne) { out.println("sayHello"); return "Hello, " + someOne + "!"; } }
package com.ejb; import java.rmi.RemoteException; import javax.ejb.CreateException; import javax.ejb.EJBHome; /** * Home接口必须扩展EJBHome或者EJBLocalHome接口 * 客户使用Home接口来请求组件接口的一个引用 * 可以将Home接口看做是一个工厂,它能制造Bean的引用个,而且能向客户分配bean引用 */ public interface HelloHome extends EJBHome { public Hello create() throws CreateException, RemoteException; }
<?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> <display-name>Hello EJB</display-name> <enterprise-beans> <session> <display-name>helloEJB</display-name> <ejb-name>helloEJB</ejb-name> <home>com.ejb.HelloHome</home> <remote>com.ejb.Hello</remote> <ejb-class>com.ejb.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> <security-identity> <description></description> <use-caller-identity></use-caller-identity> </security-identity> </session> </enterprise-beans> </ejb-jar>
<?xml version="1.0" encoding="UTF-8"?> <jboss> <enterprise-beans> <session> <ejb-name>helloEJB</ejb-name> <jndi-name>ejb/helloEJB</jndi-name> </session> </enterprise-beans> </jboss>
编写测试代码:
package com.ejb.client; import java.rmi.RemoteException; import java.util.Properties; import javax.ejb.CreateException; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.rmi.PortableRemoteObject; import com.ejb.Hello; import com.ejb.HelloHome; public class TestClient { /** * @param args * @throws NamingException * @throws CreateException * @throws RemoteException */ public static void main(String[] args) throws NamingException, RemoteException, CreateException { Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory"); props.setProperty("java.naming.provider.url", "localhost:1099"); // 初始化JNDI上下文环境,因为客户端不知道JBOSS的环境 InitialContext ctx = new InitialContext(props); // 检索指定的对象 Object objref = ctx.lookup("ejb/helloEJB"); // 强制转换为所需类型的对象 HelloHome home = (HelloHome) PortableRemoteObject.narrow(objref, HelloHome.class); // 通过home对象创建一个组件接口对象 Hello hello = home.create(); // 通过组件接口对象调用业务方法 String msg = hello.sayHello("ejb"); System.out.println(msg); } }
Hello, ejb!
服务端输出:
14:41:33,515 INFO [Server] Starting JBoss (MX MicroKernel)... 14:41:33,515 INFO [Server] Release ID: JBoss [Zion] 4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418) 14:41:33,515 INFO [Server] Home Dir: F:\software\jboss-4.0.0 14:41:33,515 INFO [Server] Home URL: file:/F:/software/jboss-4.0.0/ 14:41:33,515 INFO [Server] Library URL: file:/F:/software/jboss-4.0.0/lib/ 14:41:33,515 INFO [Server] Patch URL: null 14:41:33,515 INFO [Server] Server Name: default 14:41:33,515 INFO [Server] Server Home Dir: F:\software\jboss-4.0.0\server\default 14:41:33,515 INFO [Server] Server Home URL: file:/F:/software/jboss-4.0.0/server/default/ 14:41:33,515 INFO [Server] Server Data Dir: F:\software\jboss-4.0.0\server\default\data 14:41:33,515 INFO [Server] Server Temp Dir: F:\software\jboss-4.0.0\server\default\tmp 14:41:33,515 INFO [Server] Server Config URL: file:/F:/software/jboss-4.0.0/server/default/conf/ 14:41:33,515 INFO [Server] Server Library URL: file:/F:/software/jboss-4.0.0/server/default/lib/ 14:41:33,515 INFO [Server] Root Deployment Filename: jboss-service.xml 14:41:33,515 INFO [Server] Starting General Purpose Architecture (GPA)... 14:41:33,765 INFO [ServerInfo] Java version: 1.6.0_41,Sun Microsystems Inc. 14:41:33,765 INFO [ServerInfo] Java VM: Java HotSpot(TM) Client VM 20.14-b01,Sun Microsystems Inc. 14:41:33,765 INFO [ServerInfo] OS-System: Windows XP 5.1,x86 14:41:33,984 INFO [Server] Core system initialized 14:41:35,359 INFO [Log4jService$URLWatchTimerTask] Configuring from URL: resource:log4j.xml 14:41:35,406 INFO [WebService] Using RMI server codebase: http://notice.ppstream.com:8083/ 14:41:35,562 INFO [NamingService] Started jnpPort=1099, rmiPort=1098, backlog=50, bindAddress=/0.0.0.0, Client SocketFactory=null, Server SocketFactory=org.jboss.net.sockets.DefaultSocketFactory@ad093076 14:41:36,796 INFO [Embedded] Catalina naming disabled 14:41:37,125 INFO [Http11Protocol] Initializing Coyote HTTP/1.1 on http-0.0.0.0-8080 14:41:37,156 INFO [Catalina] Initialization processed in 297 ms 14:41:37,156 INFO [StandardService] Starting service jboss.web 14:41:37,156 INFO [StandardEngine] Starting Servlet Engine: Apache Tomcat/5.0.28 14:41:37,171 INFO [StandardHost] XML validation disabled 14:41:37,171 INFO [Catalina] Server startup in 15 ms 14:41:37,265 INFO [TomcatDeployer] deploy, ctxPath=/ebxmlrr, warUrl=file:/F:/software/jboss-4.0.0/server/default/deploy/ebxmlrr-service.sar/ebxmlrr.war/ 14:41:37,640 INFO [WebappLoader] Dual registration of jndi stream handler: factory already defined 14:41:37,796 INFO [STDOUT] Initialized REST 14:41:37,859 INFO [SAAJServlet] init 14:41:38,093 INFO [SAAJServlet] init 14:41:38,187 INFO [TomcatDeployer] deploy, ctxPath=/ws4ee, warUrl=file:/F:/software/jboss-4.0.0/server/default/tmp/deploy/tmp4665125682164258987jboss-ws4ee-exp.war/ 14:41:38,265 INFO [TomcatDeployer] deploy, ctxPath=/, warUrl=file:/F:/software/jboss-4.0.0/server/default/deploy/jbossweb-tomcat50.sar/ROOT.war/ 14:41:38,671 INFO [STDOUT] [ jacorb.home unset! Will use '.' ] 14:41:38,671 INFO [STDOUT] [ File .\jacorb.properties for configuration jacorb not found ] 14:41:38,828 INFO [interceptors] InterceptorManager started with 2 SIs, 2 CIs and 4 IORIs 14:41:39,015 INFO [orb] ORB run 14:41:39,093 INFO [CorbaNamingService] Naming: [IOR:000000000000002B49444C3A6F6D672E6F72672F436F734E616D696E672F4E616D696E67436F6E746578744578743A312E3000000000000200000000000000E8000102000000000E3139322E3136382E312E313030000DC8000000114A426F73732F4E616D696E672F726F6F74000000000000060000000000000008000000004A414300000000010000001C0000000000010001000000010501000100010109000000010501000100000014000000080000001A00000DC9000000210000005000000000000000010000000000000024000000200000007E00000000000000010000000E3139322E3136382E312E313030000DC9000000000000000000000000000000000000000000000000000000000000002000000004000000000000001F000000040000000300000001000000440000000000000003000000010000001C000000000001000100000001050100010001010900000001050100010000002000000004000000000000001F0000000400000003] 14:41:39,187 INFO [naming] re-Bound name: TransactionService 14:41:39,187 INFO [CorbaTransactionService] TransactionFactory: [IOR:000000000000003049444C3A6F72672F6A626F73732F746D2F69696F702F5472616E73616374696F6E466163746F72794578743A312E30000000000200000000000000E8000102000000000E3139322E3136382E312E313030000DC8000000144A426F73732F5472616E73616374696F6E732F46000000060000000000000008000000004A414300000000010000001C0000000000010001000000010501000100010109000000010501000100000014000000080000001A00000DC9000000210000005000000000000000010000000000000024000000200000007E00000000000000010000000E3139322E3136382E312E313030000DC9000000000000000000000000000000000000000000000000000000000000002000000004000000000000001F000000040000000300000001000000440000000000000003000000010000001C000000000001000100000001050100010001010900000001050100010000002000000004000000000000001F0000000400000003] 14:41:39,187 INFO [naming] re-Bound name: UserTransaction 14:41:39,578 INFO [RARDeployment] Required license terms exist view the META-INF/ra.xml: file:/F:/software/jboss-4.0.0/server/default/deploy/jboss-local-jdbc.rar 14:41:39,640 INFO [RARDeployment] Required license terms exist view the META-INF/ra.xml: file:/F:/software/jboss-4.0.0/server/default/deploy/jboss-xa-jdbc.rar 14:41:39,687 INFO [RARDeployment] Required license terms exist view the META-INF/ra.xml: file:/F:/software/jboss-4.0.0/server/default/deploy/jms/jms-ra.rar 14:41:40,375 INFO [WrapperDataSourceService] Bound connection factory for resource adapter for ConnectionManager 'jboss.jca:service=DataSourceBinding,name=DefaultDS to JNDI name 'java:DefaultDS' 14:41:40,515 INFO [ConnectionFactoryBindingService] Bound connection factory for resource adapter for ConnectionManager 'jboss.jca:service=ConnectionFactoryBinding,name=JmsXA to JNDI name 'java:JmsXA' 14:41:40,750 INFO [A] Bound to JNDI name: queue/A 14:41:40,750 INFO [B] Bound to JNDI name: queue/B 14:41:40,750 INFO [C] Bound to JNDI name: queue/C 14:41:40,750 INFO [D] Bound to JNDI name: queue/D 14:41:40,765 INFO [ex] Bound to JNDI name: queue/ex 14:41:40,828 INFO [testTopic] Bound to JNDI name: topic/testTopic 14:41:40,828 INFO [securedTopic] Bound to JNDI name: topic/securedTopic 14:41:40,828 INFO [testDurableTopic] Bound to JNDI name: topic/testDurableTopic 14:41:40,828 INFO [testQueue] Bound to JNDI name: queue/testQueue 14:41:40,828 INFO [DLQ] Bound to JNDI name: queue/DLQ 14:41:40,890 INFO [UILServerILService] JBossMQ UIL service available at : /0.0.0.0:8093 14:41:41,078 INFO [MailService] Mail Service bound to java:/Mail 14:41:41,250 INFO [EjbModule] Deploying helloEJB 14:41:41,343 INFO [EJBDeployer] Deployed: file:/F:/software/jboss-4.0.0/server/default/deploy/ejb2.jar 14:41:41,375 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=file:/F:/software/jboss-4.0.0/server/default/deploy/jmx-console.war/ 14:41:41,500 INFO [TomcatDeployer] deploy, ctxPath=/web-console, warUrl=file:/F:/software/jboss-4.0.0/server/default/deploy/management/web-console.war/ 14:41:42,156 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-0.0.0.0-8080 14:41:42,218 INFO [ChannelSocket] JK2: ajp13 listening on /0.0.0.0:8009 14:41:42,218 INFO [JkMain] Jk running ID=0 time=0/15 config=null 14:41:42,234 INFO [Server] JBoss (MX MicroKernel) [4.0.0 (build: CVSTag=JBoss_4_0_0 date=200409200418)] Started in 8s:610ms 14:42:24,187 INFO [STDOUT] setSessionContext 14:42:24,187 INFO [STDOUT] ejbCreate 14:42:24,187 INFO [STDOUT] sayHello