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. es6 import 报错

    现在绝大多数的浏览器都不支持ES6,所以使用es6时需要使用bebal把es6转化为es5, 项目目录: demo1:单个js文件的转化 src文件下的 test1.js const aa=" ...

  2. Identity Server 4 原理和实战(完结)_Hybrid Flow 实例, Claims, 角色授权和策略授权

    4分50 建立客户端 不需要身份认证 客户端叫做HybirdClient 配置IdentityServer服务端,先把客户端添加上 把userClaims添加到token里面 然后运行服务端就可以了 ...

  3. OpenGL Geometry Shader

    http://blog.csdn.net/bugrunner/article/details/5455324 Geometry Shader可以处理Vertex Shader和Fragment Sha ...

  4. 浅谈C++中内存泄漏的检测

    首先我们需要知道程序有没有内存泄露,然后定位到底是哪行代码出现内存泄露了,这样才能将其修复.最简单的方法当然是借助于专业的检测工具,比较有名如BoundsCheck,功能非常强大,相信做C++开发的人 ...

  5. CZGL.AliIoTClient 文档:说明

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  6. java 程序从linux 上接收不可见字符

    近期在写一个简单的小java程序,希望在运行java 程序时,从shell 中接收参数,并且参数的内容为不可见字符. 开始时还觉得可以使用"\"之类的转义符来写,后来发现java程 ...

  7. 利用Web服务生成产品编号 执行添加操作

    为什么我想要执行添加操作,却添加不成功,系统提示我comm.ExecuteNonQuery有错误 已找到原因 在 string strsql = "insert into tb_goods( ...

  8. C# 正则表达式输出查询结果

                //正则 第一种方法             Regex regex = new Regex(@"\d{0,}\.\d{0,}\,\d{0,}\.\d{0,}&quo ...

  9. ADO学途 three day

    1· 程序的根本----数据 一个程序是用来处理数据算法的具体表现,可以说没有数据,程序就没有意义.今天主 要分享在一个程序中数据的支持者SQL server的建立和使用.首先当然不可缺少SQL se ...

  10. hdu 1695 GCD(容斥)

    题目链接 #include <bits/stdc++.h> using namespace std; typedef long long ll; inline int read() { , ...