JavaEE知识整理系列(二)EJB .

转载 2013年12月04日 10:29:20

1.        JBoss安装与启动

按照http://www.blogjava.net/lingyu/articles/78572.html 文章步骤按照和启动EJB。 注意如果EJB无法启动,多半是没有安装好,或者JBOSS_HOME环境变量或者JAVA_HOME环境变量没有设置好的原因。

2.        EJB服务端

  1. package org.martin.common.communication.ejb;  
  2. //EJB的方法参数、返回值Bean   
  3. public class EjbMessage implements Serializable  
  4. {  
  5.     private static final long serialVersionUID = 1L;  
  6.     public long commandID=0;  
  7.     public Object obj;  
  8. }  
  9. public interface Hello extends EJBObject {  
  10.  public EjbMessage getHello(EjbMessage para) throws java.rmi.RemoteException;  
  11. }  
  12. public interface HelloHome extends EJBHome {  
  13.     Hello create() throws java.rmi.RemoteException, CreateException;   
  14. }  
  15. package org.martin.server.communication.ejb  
  16. public class HelloEJB implements SessionBean{  
  17.     private static final long serialVersionUID = 1L;  
  18.       
  19.     public void setSessionContext(SessionContext arg0) throws EJBException,  
  20.                     RemoteException{  
  21.     }  
  22.       
  23.     public void ejbRemove() throws EJBException, RemoteException{  
  24.         System.out.println("EJB ejbRemove");  
  25.     }  
  26.       
  27.     public void ejbActivate() throws EJBException, RemoteException{  
  28.         System.out.println("EJB ejbActivate");  
  29.     }  
  30.       
  31.     public void ejbPassivate() throws EJBException, RemoteException{  
  32.         System.out.println("EJB ejbPassivate");  
  33.     }  
  34.       
  35.     public void ejbCreate(){  
  36.         System.out.println("EJB ejbCreate");  
  37.     }  
  38.       
  39.     public EjbMessage getHello(EjbMessage para){  
  40.         EjbMessage reObj = new EjbMessage();  
  41.         reObj.commandID = para.commandID;  
  42.         reObj.obj = para.obj + " is echo by server";  
  43.         return reObj;  
  44.     }  
  45. }  

3.        部署EJB

(1)将服务端和common的代码用eclipse导出jar包,命名为Hello.jar。

(2)将EJB描述文件ejb-jar.xml放入导出的Hello.jar包中的META-INF目录下(与META-INF置于同一目录),ejb-jar.xml文件内容如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">  
  3. <ejb-jar>  
  4. <description>  
  5. This is Hello EJB example  
  6. </description>  
  7. <display-name>HelloBean</display-name>  
  8. <enterprise-beans>  
  9. <session>  
  10. <display-name>Hello</display-name>  
  11. <ejb-name>Hello</ejb-name>  
  12. <home>org.martin.common.communication.ejb.HelloHome</home>  
  13. <remote>org.martin.common.communication.ejb.Hello</remote>  
  14. <ejb-class>org.martin.server.communication.ejb.HelloEJB</ejb-class>  
  15. <session-type>Stateless</session-type>  
  16. <transaction-type>Container</transaction-type>  
  17. </session>  
  18. </enterprise-beans>  
  19. </ejb-jar>  

(3)将Hello.jar放到JBOSS安装目录下的\server\default\deploy目录下,JBOSS支持热部署,因此不需要重启JBOSS,文件放入后,JBOSS的控制台中会打印,部署成功日志,如下所示:

08:43:52,859 INFO  [EJBDeployer] Deployed: file:/C:/jboss/server/default/deploy/

Hello.jar

4.        客户端测试

为了简单,这里用JavaSE客户端程序的方式调用EJB方法,代码如下

  1. package org.martin.client.communication.ejb  
  2. public class HelloClient  
  3. {  
  4.     @SuppressWarnings("unchecked")  
  5.     public static void main(String[] args)  
  6.     {  
  7.         Hashtable env = new Hashtable();  
  8.         env.put(Context.INITIAL_CONTEXT_FACTORY,  
  9.                         "org.jnp.interfaces.NamingContextFactory");  
  10.         env.put(Context.PROVIDER_URL, "localhost:1099");  
  11.         env.put("java.naming.factory.url.pkgs",  
  12.                         "org.jboss.naming:org.jnp.interfaces");  
  13.           
  14.         try  
  15.         {  
  16.             Context ctx = new InitialContext(env);  
  17.             Object obj = ctx.lookup("Hello");  
  18.             HelloHome home = (HelloHome) javax.rmi.PortableRemoteObject  
  19.                                           .narrow(obj,HelloHome.class);  
  20.             Hello helloWorld = home.create();  
  21.               
  22.             EjbMessage para=new EjbMessage();  
  23.             para.commandID=10000001;  
  24.             para.obj="hello";  
  25.             EjbMessage re=helloWorld.getHello(para);  
  26.             System.out.println(re.obj);  
  27.             helloWorld.remove();  
  28.         }  
  29.         catch(Exception e)  
  30.         {  
  31.             e.printStackTrace();  
  32.             System.out.println("Exception: " + e.getMessage());  
  33.         }  
  34.     }  
  35. }  

执行客户端程序后,客户端程序控制台打印出“hello is echo by server”说明EJB方法调用成功。

5.        总结

        这里简单描述了一个stateless的Session Bean的 DIY 过程,这里方法中使用了可序列化的Bean作为消息的载体。

        在实际项目中,为了客户端调用、处理方便,可以在服务端将每个EJB用一个命令码进行关联,这时候客户端调用就只要指定这个命令码就可以,通过这个命令码去服务端查找EJB服务,调用完直接将结果返回给客户端。上面消息体中的commandID字段就可以作为这类命令码使用

        实际项目中还可以对一个EJB进行封装,再增加消息ID来区分同一个EJB调用的不同操作,这种处理在实际项目中是非常常见的,因为不可能任何一个操作都定义一个EJB,一般是一个大功能(模块)定义一个EJB。客户端最关注的是参数和返回结果,因此EJB的通信流程等处理对客户端而言需要尽可能的透明。

JavaEE知识整理系列(二)EJB

1.        JBoss安装与启动 按照http://www.blogjava.net/lingyu/articles/78572.html 文章步骤按照和启动EJB。 注意如果EJB无法启动,...
  • ICTCamera
  • ICTCamera
  • 2013年11月01日 21:23
  • 691

JavaEE知识整理系列(一)JavaEE概述

1.        JavaEE基本概念 JavaEE 是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用。但那是需要一个跨J2SE/WEB/EJB的微容器,保护我...
  • ICTCamera
  • ICTCamera
  • 2013年11月01日 21:19
  • 952

JavaEE知识点总结

JavaEE简介 JavaEE 容器和组件 Applet Container 浏览器 applet App Container Java应用 Web Container 网页服务器 ...
  • sun_xiaofan
  • sun_xiaofan
  • 2015年07月30日 16:20
  • 2857

JavaEE-EJB

EJB(Enterprise JavaBean)是Java EE的核心组件技术之一,它是创建基于Java的服务器端分布式组件的标准。 EJB规范定义了如何编写Java EE服务器端分布式组件,提供了...
  • MartinChong
  • MartinChong
  • 2016年12月26日 23:40
  • 254

JavaEE知识整理系列(一)JavaEE概述 .

1.        JavaEE基本概念 JavaEE 是 J2EE的一个新的名称,之所以改名,目的还是让大家清楚J2EE只是Java企业应用。但那是需要一个跨J2SE/WEB/EJB的微容器,保护...
  • sunjia961673278
  • sunjia961673278
  • 2013年12月04日 10:27
  • 791

【JavaEE】EJB与Spring的全面比较与JavaBean的不同

一:EJB与spring的全面比较         Rod Johnson将Indeed.com(一个求职网站)职位列表中对EJB和Spring两种技能的需求数量进行了对比,并通过分析这一统...
  • u013047584
  • u013047584
  • 2017年06月17日 09:52
  • 675

javaEE之JPA、EJB、JSF架构工程

按照星爷的视频教程架构JPA+EJB+JSF工程主要有以下几步: 1、服务器架构: 按照本人之前的《javaEE之eclipse+jboss搭建开发环境》方法搭建好的开发环境,添加server时要...
  • double_zero
  • double_zero
  • 2012年05月12日 01:32
  • 5338

MySQL数据库知识整理归纳

数据库创建需要考虑的内容
  • cz28274815
  • cz28274815
  • 2014年09月04日 22:21
  • 745

javaEE基础知识

什么是servlet servlet实际就是java类,只不过继承了httpServlet类 servlet最主要功能就是接受页面参数,然后调用业务逻辑,你可以将其理解为一个中转站 servlet在服...
  • float_dream
  • float_dream
  • 2017年01月17日 16:11
  • 835

为什么要使用EJB

 经常有同学问我这样的问题:现在企业使用EJB的多吗?什么情况下会使用EJB?为了回答这个问题,我们首先要知道EJB的目标是什么。EJB的目标在EJB的规范中描述的EJB的目标如下:Ø        ...
  • JavaEETeacher
  • JavaEETeacher
  • 2007年05月11日 22:52
  • 4086
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JavaEE知识整理系列(二)EJB .
举报原因:
原因补充:

(最多只允许输入30个字)