EJB2.0版本的HelloWorld
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!");
}
}
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;
}
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;
}
<!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>
<jboss>
<enterprise-beans>
<session>
<ejb-name>helloEJB</ejb-name>
<jndi-name>ejb/helloEJB</jndi-name>
</session>
</enterprise-beans>
</jboss>
标明清单(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%)

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);
}
}



EJB2.0版本的HelloWorld的更多相关文章
- 【转】cocos2d-x 2.0版本 自适应屏幕分辨率
http://codingnow.cn/cocos2d-x/975.html 我使用的版本是cocos2d-2.0-x-2.0.4,cocos2dx-2.0版本对多分辨率适配提供了很好的支持,使用起来 ...
- 汇编2.汇编版本的helloworld
寻址方式 立即数寻址 寄存器寻址 存储器寻址 直接寻址 : mov ax, [ 01000h ]; 直接在[]内给出一个内存地址 寄存器间接寻址: mov ax ,[si]; 在[]以寄存器的值给出内 ...
- .NET Core 2.0版本预计于2017年春季发布
英文原文: NET Core 2.0 Planned for Spring 2017 微软项目经理 Immo Landwerth 公布了即将推出的 .NET Core 2.0 版本的细节,该版本预计于 ...
- 纪念BLives 1.0版本发布
历时两个多月的时间,BLives程序1.0发布,在开发程序期间自己经历了很多,考试,恋爱,学业,自己很纠结 很伤心,有时候很无助,为了让自己有事干,我在考试备考期间去设计程序- -#,虽然程序设计的一 ...
- 【vuejs小项目——vuejs2.0版本】单页面搭建
http://router.vuejs.org/zh-cn/essentials/nested-routes.html 使用嵌套路由开发,这里会出错主要把Vue.use(VueRouter);要进行引 ...
- geotrellis使用(二十)geotrellis1.0版本新功能及变化介绍
目录 前言 变化情况介绍 总结 一.前言 之前版本是0.9或者0.10.1.0.10.2,最近发现更新成为1.0.0-2077839.1.0应该也能称之为正式版了吧.发现其中有很多变化, ...
- 【原】迎接微信winphone 5.0 版本的IE10样式兼容
微信 Android 5.1 和 iPhone 5.1 已正式发布了,据说本12月底,微信将推出 Winphone 5.0版本,全面支持微信支付,它绑定 IE10 浏览器,那么做微信公众号的 H5 页 ...
- Mirantis OpenStack 8.0 版本大概性分析
作为 OpenStack 领域标杆性企业之一的 Mirantis 在2016年3月初发布了最新的 MOS 8.0 版本.本文试着基于公开资料进行一些归纳分析. 1. 版本概况 1.1 概况 社区版本: ...
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
随机推荐
- 如何正确遍历删除List中的元素,你会吗?
遍历删除List中的元素有很多种方法,当运用不当的时候就会产生问题.下面主要看看以下几种遍历删除List中元素的形式: 1.通过增强的for循环删除符合条件的多个元素 2.通过增强的for循环删除符合 ...
- OpenWrt路由器通过iPhone有线共享网络上网
2018年4月更新: 我自己的手机在openwrt上网速很慢,在电脑上又很快.应该不是被限速了,但是没找到原因. 三大运营商在学校争客户,手机卡开出了校内无限流量的条件.很开心,之前准备到东北大学的时 ...
- 使用 Multipath TCP 为 iOS 创建备份连接(转)
这篇文章的英文版如下: https://support.apple.com/en-us/HT201373 这里咱们采用苹果手机打开测试网站,发现没有检测到MPTCP,初步猜想可能需要打开什么设置,后续 ...
- c/c++面试39-44之内存动态分配
39 指针的初始化(二叉树排序),其中引入了双向链表 #include <stdio.h> #include <stdlib.h> struct Tag_Node { stru ...
- Nginx的安装配置和tomcat负载均衡
Nginx简介 什么是nginx? Nginx是一款高性能的http 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器.由俄罗斯的程序设计师Igor Sysoev所开发,官方测试ngi ...
- HDU 3501【欧拉函数拓展】
欧拉函数 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) . 通式:φ(x)=x*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)-..(1- ...
- 使用dynamic关键词 CS1969错误
添加 Microsoft.CSharp.dll 引用即可 不需要添加using Microsoft.CSharp 这类namespace
- uoj#267. 【清华集训2016】魔法小程序(乱搞)
传送门 感觉很像FFT的过程的说-- 先来考虑\(b\)如何转化成\(c\),那么只要通过它的逆过程就可以了 首先,我们称"魔法"为比较两个数的字典序,记\(x=a_0\),那么把 ...
- hyperledger fabric 1.0.5 分布式部署 (六)
如何在相同的peer 节点上创建多个 channel 作者在hyperledger fabric 1.0.5 分布式部署 (五)已经向读者们介绍了一个简单的fabric 的部署流程,那么根据上一篇博客 ...
- 初入Three.js 第一章
一.什么是WebGL? 1.WebGL是在浏览器中实现三维效果的一套规范. 二.什么是threejs? 1.你将它理解成three + js就可以了.three表示3D的意思,js表示javascri ...