EJB2.0版本的HelloWorld
 
虽然EJB3.1已经出来了,可是EJB2.0的项目还需要维护啊。下面写个简单EJB2.0的HelloWorld程序,练练手。
 
环境:
JBoss 4.0.2
JDK1.5
IDEA8.1.4
 
一、开发EJB组件
 
1、开发Bean类
package lavasoft.testejb20;

import javax.ejb.SessionBean; 
import javax.ejb.SessionContext;

/** 
* Bean类 
* 所有具体的业务逻辑都在此类里面,此类不抛出远程异常 

* @author leizhimin 2010-3-30 9:06:57 
*/ 
public class HelloBean implements SessionBean { 
        /** 
         * 业务方法 
         * 
         * @param someOne 
         * @return Hello的消息 
         */ 
        public String sayHello(String someOne) { 
                System.out.println("HelloBean: sayHello() is called!"); 
                return "Hello, " + someOne + "!"; 
        }

/** 
         * 必须有这个方法,这是EJB的一条原则,这个方法不是来自SessionBean接口的 
         */ 
        public void ejbCreate() { 
                System.out.println("HelloBean: ejbCreate() is called!"); 
        }

//-------下面四个方法是来自SessionBean的,必须写出来,但没啥用------- 
        public void ejbActivate() { 
                System.out.println("HelloBean: ejbActivate() is called!"); 
        }

public void ejbPassivate() { 
                System.out.println("HelloBean: ejbPassivate() is called!"); 
        }

public void ejbRemove() { 
                System.out.println("HelloBean: ejbRemove() is called!"); 
        }

public void setSessionContext(SessionContext sessionContext) { 
                System.out.println("HelloBean: setSessionContext() is called!"); 
        } 
}

 
2、组件接口
 
package lavasoft.testejb20;

import javax.ejb.EJBObject; 
import java.rmi.RemoteException;

/** 
* 组件接口 
* 所有的业务方法都要在此接口中声明 

* @author leizhimin 2010-3-30 9:10:32 
*/ 
public interface Hello extends EJBObject { 
        /** 
         * 业务方法,组件接口中的业务方法必须抛出RemoteException 
         * 
         * @param someOne 
         * @return 
         * @throws RemoteException 
         */ 
        public String sayHello(String someOne) throws RemoteException; 
}

 
3、Home接口
 
package lavasoft.testejb20;

import javax.ejb.CreateException; 
import javax.ejb.EJBHome; 
import java.rmi.RemoteException;

/** 
* Home接口 
* Home接口必须扩展EJBHome或者EJBLocalHome接口 
* 客户使用Home接口来请求组件接口的一个引用 
* 可以将Home接口看做是一个工厂,它能制造Bean的引用个,而且能向客户分配bean引用 

* @author leizhimin 2010-3-30 9:12:05 
*/ 
public interface HelloHome extends EJBHome { 
        public Hello create() throws CreateException, RemoteException; 
}

 
4、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> 
        <display-name>Hello EJB</display-name> 
        <enterprise-beans> 
                <session> 
                        <display-name>helloEJB</display-name> 
                        <ejb-name>helloEJB</ejb-name> 
                        <home>lavasoft.testejb20.HelloHome</home> 
                        <remote>lavasoft.testejb20.Hello</remote> 
                        <ejb-class>lavasoft.testejb20.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>
 
5、jboss.xml
 
<?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>
 
6、编译打包
 
C:\test\testejb20\out\exploded\testejb20EJB>jar -cvf ../helloejb.jar . 
标明清单(manifest) 
增加:lavasoft/(读入= 0) (写出= 0)(存储了 0%) 
增加:lavasoft/testejb20/(读入= 0) (写出= 0)(存储了 0%) 
增加:lavasoft/testejb20/Hello.class(读入= 250) (写出= 183)(压缩了 26%) 
增加:lavasoft/testejb20/HelloBean.class(读入= 1455) (写出= 670)(压缩了 53%) 
增加:lavasoft/testejb20/HelloHome.class(读入= 277) (写出= 200)(压缩了 27%) 
增加:lavasoft/client/(读入= 0) (写出= 0)(存储了 0%) 
增加:lavasoft/client/TestClient.class(读入= 1367) (写出= 701)(压缩了 48%) 
忽略项 META-INF/ 
增加:META-INF/ejb-jar.xml(读入= 882) (写出= 365)(压缩了 58%) 
增加:META-INF/jboss.xml(读入= 237) (写出= 130)(压缩了 45%)
 
7、部署EJB
解压缩jboss-4.0.2.zip到一个目录下面,然后将打包后的helloejb.jar组件复制到jboss-4.0.2\server\default\deploy目录下面。
 
8、启动jboss
运行jboss-4.0.2\bin\run.bat文件,启动服务器
 
 
二、开发EJB客户端调用代码
 
package lavasoft.client;

import lavasoft.testejb20.Hello; 
import lavasoft.testejb20.HelloHome;

import javax.ejb.CreateException; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.rmi.PortableRemoteObject; 
import java.rmi.RemoteException; 
import java.util.Properties;

/** 
* 客户端代码 
* 客户端会依赖组件接口和Home接口 

* @author leizhimin 2010-3-30 10:22:50 
*/ 
public class TestClient { 
        public static void main(String[] args) throws NamingException, CreateException, RemoteException { 
                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); 
        } 
}

 
调用结果:
jboss控制台输出消息:
 
再调用一次看看服务端会做什么:
 
 
注意:客户端程序依赖JBoss应用服务器下的一些库文件,这些文件存在于:jboss-4.0.2\client下面,供客户端程序来使用。

EJB2.0版本的HelloWorld的更多相关文章

  1. 【转】cocos2d-x 2.0版本 自适应屏幕分辨率

    http://codingnow.cn/cocos2d-x/975.html 我使用的版本是cocos2d-2.0-x-2.0.4,cocos2dx-2.0版本对多分辨率适配提供了很好的支持,使用起来 ...

  2. 汇编2.汇编版本的helloworld

    寻址方式 立即数寻址 寄存器寻址 存储器寻址 直接寻址 : mov ax, [ 01000h ]; 直接在[]内给出一个内存地址 寄存器间接寻址: mov ax ,[si]; 在[]以寄存器的值给出内 ...

  3. .NET Core 2.0版本预计于2017年春季发布

    英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...

  4. 纪念BLives 1.0版本发布

    历时两个多月的时间,BLives程序1.0发布,在开发程序期间自己经历了很多,考试,恋爱,学业,自己很纠结 很伤心,有时候很无助,为了让自己有事干,我在考试备考期间去设计程序- -#,虽然程序设计的一 ...

  5. 【vuejs小项目——vuejs2.0版本】单页面搭建

    http://router.vuejs.org/zh-cn/essentials/nested-routes.html 使用嵌套路由开发,这里会出错主要把Vue.use(VueRouter);要进行引 ...

  6. geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍

    目录 前言 变化情况介绍 总结 一.前言        之前版本是0.9或者0.10.1.0.10.2,最近发现更新成为1.0.0-2077839.1.0应该也能称之为正式版了吧.发现其中有很多变化, ...

  7. 【原】迎接微信winphone 5.0 版本的IE10样式兼容

    微信 Android 5.1 和 iPhone 5.1 已正式发布了,据说本12月底,微信将推出 Winphone 5.0版本,全面支持微信支付,它绑定 IE10 浏览器,那么做微信公众号的 H5 页 ...

  8. Mirantis OpenStack 8.0 版本大概性分析

    作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...

  9. 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github

    4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...

随机推荐

  1. HDOj-1425

    sort Time Limit: 6000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  2. 3.1 HiveServer2.Beeline JDBC使用

    https://cwiki.apache.org/confluence/display/Hive/HiveServer2+Clients 一.HiveServer2.Beeline 1.HiveSer ...

  3. DNS与BIND介绍

    前言 DNS(Domain Name System),网域名称系统,是互联网上基础性的服务.DNS 将域名和网络服务器的 IP 地址相互映射,并将这些数据保存至 DNS 服务器.两台主机通信事实上是依 ...

  4. 668. Kth Smallest Number in Multiplication Table

    Nearly every one have used the Multiplication Table. But could you find out the k-th smallest number ...

  5. 【BZOJ1226】[SDOI2009] 学校食堂

    题目描述 小F 的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味都可以用一个非负整数 ...

  6. bzoj1130:[POI2008]POD Subdivision of Kingdom

    传送门 看到数据范围这么小,不由得算了一下暴力复杂度,算出来情况一共只有1e7,不多,再乘上暴力判断的复杂度,好像T了,判断的话位运算可以方便解决 但是我写的优化似乎比较渣,还留了个log,但是还是n ...

  7. TYVJ1424占卜DIY

    Description lyd学会了使用扑克DIY占卜.方法如下:一副去掉大小王的扑克共52张,打乱后均分为13堆,编号1~13,每堆4张,其中第13堆称作“生命牌”,也就是说你有4条命.这里边,4张 ...

  8. w3c网址和标准化过程

  9. 关于log

    如果项目上过线的话,那你一定知道Log是多么重要. 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题.这时打一手好Log的重要性绝不亚于写一手好代码.项目出问题时,你要能拿出 ...

  10. 基于PHP的正则表达式

    用法 从某个字符抽取信息 用新文本替换匹配的文本 把字符串拆分成小块字符串组成的数组 基础 preg_match('/需要匹配的正则表达式/', '字符串'); 正则匹配模式 集合: [xxxx]-- ...