Ejb in action(二)——实例入门

在上一篇文章当中,我们介绍了Ejb的相关概念。再展开后文介绍之前,我先给大家提供一个Ejb实例,加深印象。

开发环境:eclipse

应用服务器:jboss

1、服务端程序

在Eclipse中创建一个Ejb项目:EjbTest

添加接口IHelloWorld

package com.ejb;

public interface IHelloWorld {
	public String sayHello(String world);
}

添加实现类HelloWorld

此处声明为Ejb无状态bean,且为远程方法。

package com.ejb;

import javax.ejb.Remote;
import javax.ejb.Stateless;

/**
 * Session Bean implementation class HelloWorld
 */
@Stateless
@Remote
public class HelloWorld implements IHelloWorld {
	@Override
	public String sayHello(String world) {
		return "Hello"+ world + "!";
	}
}

2、客户端程序

新建一个java项目EjbTestJava

新建测试类HelloWorldTest

也可以选择其他客户端如jsp或jsf等其他类客户端。客户端通过JNDI,根据名称,在Ejb容器中查找部署的bean。

package com.ejb;

import java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;

public class HelloWorldTest {

	public static void main(String[] args) {
		//配置属性,他们是创建InitialContext的实例条件
		Properties props = new Properties();
		//JDNI工厂
		props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		//JNDI查找包
		props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
		//JNDI服务地址
		props.setProperty("java.naming.provider.url", "localhost:1099");

		try {
			//创建JNDI的查找上下文InitialContext的实例,然后从该实例中查找发布好的Ejb服务
			InitialContext ctx = new InitialContext(props);
			IHelloWorld helloworld = (IHelloWorld)ctx.lookup("HelloWorld/remote");

			System.out.println(helloworld.sayHello(" dear"));

		} catch (NamingException e) {
			e.printStackTrace();
		}
	}

}

3、配置

服务端开发好后,需要将其jar包部署到jboss的热部署目录。客户端通过JNDI服务,能够从此拿到服务对象。

使用JNDI来远程访问Ejb服务,需要使用强制转换来转化成接口类型。

所以,我们需要在Ejb的客户端引入jboss的client包,加到当前项目的环境变量中,来支持JNDI服务;

另外客户端需要知道服务端的接口,不然就无法根据名字拿到服务。所以需要将服务端的接口打成jar包,并在ejb的客户端引入。

实现了本文实例,大家就算是入门了,在后文我们会对Ejb进行更加深入的剖析。

时间: 2024-10-11 05:25:33

Ejb in action(二)——实例入门的相关文章

Java深度历险(一) Jboss+EJB的第一个实例

学习感悟:每次学习新的知识,都会通过第一个小的实例入手,获得成就感,经典的Hello Workd实例奠定了我们成功的大门哈,这些经典的实例虽小但是五脏俱全呢,很好的理解了,Ejb的核心. 今天主要以这个小实例,来学习EJB的分布式,我们可以将接口与实现放到一台计算机上,而客户端可以放到另一台机器上,当然分布式的意思很大了(下篇博客给大家讲解),快来看实例. 一:代码实现 1:定义接口 <span style="font-size:18px;"><span style=

微信公众平台开发教程(四) 实例入门:机器人(附源码)

微信公众平台开发教程(四) 实例入门:机器人(附源码) 上一篇文章,写了基本框架,可能很多人会觉得晕头转向,这里提供一个简单的例子来予以说明,希望能帮你解开谜团. 一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要的话可以在此基础上进行扩展. 当然后续我们还会推出比较复杂的应用实例. 二.具体实现 1.提供访问接口 这里不再赘述,参照上一章,微信公

Ejb in action(五)——会话Bean的生命周期

会话Bean与消息驱动Bean.实体Bean的最重要的区别在于生命周期的差异性.会话Bean实例存活期较短,它和线程类似,包括对象的创建.初始化.运行.钝化.激活.销毁. 生命周期的概念,了解生物学的童鞋一定对这个概念不陌生.这里所谓的生命周期,就是指EjbBean实例存在的各个阶段中,提供的一些注解方法.在运行时,Ejb容器会动态调用这些方法. 关于会话Bean的生命周期,Ejb3.0中一共提供了6个注解方法,这些方法都适合有状态会话Bean,而只有@postConstruct和@PreDes

Ejb in action(六)——拦截器

Ejb拦截器可以监听程序中的一个或所有方法.与Struts2中拦截器同名,而且他们都能够实现切面式服务.同时也与Spring中的AOP技术类似. 不同的是struts2的拦截器的实现原理是一层一层的拦截器包住一个action,拦截Action请求,在自己的拦截器里面自定义内容. Struts2中的拦截器可以说是个过滤器,把不想要或不想显示的内容过滤掉.拦截器可以抽象出一部分代码用来完善原来的Action,同时可以减轻代码冗余,提高重用率.如一些登录验证.权限限制等. Spring的两大主要功能就

Struts2(四)Action二配置

一.method参数 action package com.pb.web.action; public class HourseAction { public String add(){ System.out.println("执行添加操作!"); return "success"; } public String update(){ System.out.println("执行更新操作!"); return "success"

XML学习总结(二)——XML入门

一.XML语法学习 学习XML语法的目的就是编写XML 一个XML文件分为如下几部分内容: 文档声明 元素 属性 注释 CDATA区 .特殊字符 处理指令(processing instruction) 1.1.xml语法——文档声明 在编写XML文档时,需要先使用文档声明,声明XML文档的类型. 最简单的声明语法: <?xml version="1.0" ?> 例如: 1 <?xml version="1.0"?> 2 <softCo

HighCharts基本使用实例(入门)

HighCharts 摘要 HighCharts是眼下最为流行的图表插件,应用范围广泛,眼下支持曲线图.区域图.3D图.柱状图.饼图.散列图.混合图等,而且还支持一些拓展的特殊图表,如:仪表图.极地图.箱线图.瀑布图等.因工作中用到,所以在这里我仅仅做最主要的配置使用. 官方站点:www.highcharts.com,有兴趣的同学也能够去上面学习很多其它的内容. 使用 首先须要到下载安装包 - highcharts下载 解压,然后导入两个js文件,然后写代码.举个官网上最简单的样例: <!doc

Ejb in action(七)——message与JMS

在我们展开对MDBs的学习之前,我们需要了解message(消息)与JMS(Java Message Service)的概念.我们在Java EE中谈论消息,实际上就是意味着实现一个松耦合的过程,系统组件之间的异步通信. 在开发中,许多组件之间的调用都是同步的,像简单的方法调用.Java的RMI等.而此处的异步调用区别于此.在很多时候,使用异步消息能够提高用户体验. 拿CSDN的注册功能来举例:用户点击注册之后,这时客户端向服务器发送一个请求,服务器进行处理后,将注册成功的提示消息返回给客户,同

Redis 二:入门基本篇

1.多数据库设置 select 0 - 15 ,代表16个数据库 2.glob风格通配符 set bar 1 set btt 2 keys * 返回所有 keys ba? 返回 bar keys b[a-z][a-z] 返回btt bar \x 匹配转义字符 3.判断一个键是否存在 exists bar ,存在返回1否则返回0 4.删除键 del bar 删除成功返回1,否则返回0 5.获得键值的数据类型 set b "100" type a 返回string Redis 二:入门基本

【墙裂推荐】适合高中生看的HTML5网页开发实例入门书

清华大学出版社推出的<HTML5网页开发实例详解>是一本最全的HTML 5技术书,是一本最全的HTML 5案例书,由大众点评网资深前端工程师周遥和聚划算资深前端工程师李春城联袂奉献.所有的实例和框架在这里给读者做一个预览. 1.当前天气的APP                       2.新闻阅读列表APP 3.一个网站的用户增长曲线图            4.网页中的3D效果 5.用Node.js搭建Web Server             6.销售数据图表 7.带字幕的视频播放器