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. dcos下rexray服务的配置

    在dcos环境下,rexray服务的默认配置文件为/opt/mesosphere/etc/rexray.conf,而其服务文件则是 /etc/systemd/system/dcos-rexray.se ...

  2. 级联MobileNet-V2实现CelebA人脸关键点检测(转)

    https://blog.csdn.net/u011995719/article/details/79435615

  3. HDOJ-1391

    Number Steps Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  4. HDU - 1016 Prime Ring Problem 经典素数环

    Prime Ring Problem A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., ...

  5. AttributeCollection.Add(String, String) Method

    <%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Trans ...

  6. 【阿里云IoT+YF3300】1.时代大背景下的阿里云IoT物联网的现状和未来

    “未来十到二十年,大家基本已经形成了一个共识,那便是新格局的奠定将由 AI 和物联网技术来支撑.放眼国内,在这些互联网巨头之中,未来真正成为竞争对手厮杀的,阿里和华为是首当其冲,在这两个领域双方分别暗 ...

  7. [Xcode 实际操作]九、实用进阶-(14)使用富文本CoreText框架创建丰富多彩的文本

    目录:[Swift]Xcode实际操作 本文将演示如何使用富文本CoreText框架创建丰富多彩的文本图形. 在项目导航区,打开视图控制器的代码文件[ViewController.swift] imp ...

  8. 黑马MySQL数据库学习day01 安装多个版本MySQL mysqld.exe工具

  9. MyBatis逆向工程中domainObjectRenamingRule报错或无效

    使用domainObjectRenamingRule报错 在使用MyBatis逆向工程时报错如下: org.mybatis.generator.exception.XMLParserException ...

  10. vi/vim打开文件提示Found a swap file by the name

    问题分析 有一次在远程连接主机时,用vi打开文件my.ini却提示:Found a swap file by the name ".my.ini.swp".百度了下才知道,原来在使 ...