JBoss+Ant实现EJB无状态会话bean实例

EJB分为session bean、entity bean、message-driven bean,session bean又分为无状态会话bean和有状态会话bean。

session bean负责与客户端交互,是编写业务逻辑的地方,在session bean中可以通过jdbc直接操作数据库,但大多数情况下都是通过entity bean来完成对数据库的操作的。

平常,我们使用最多的是无状态bean,因为它的bean实例可供多个用户使用,所以它的性能比有状态bean高。正因为一个bean实例被多个用户使用。那么,前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因为是无状态的。下面用一个JBoss+Ant实现EJB无状态会话bean实例,帮助大家初步认识EJB。

1.创建一个普通的java项目,创建时引用jboss-4.2.3.GA\client目录下的所有jar包;

2.创建一个HelloWorld接口;

package cn.tgb.ejb3;

public interface HelloWorld {

	public String sayHelloWorld(String name);
}

3.创建一个实现HelloWorld接口的实现类;

package cn.tgb.ejb3.impl;

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

import cn.tgb.ejb3.HelloWorld;

@Stateless
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld {

	@Override
	public String sayHelloWorld(String name) {
		return name + "说:你好,世界!";
	}
}

在HelloWorldBean类中,我们用注解Stateless注明当前类是无状态的,用注解Remote注明当前类对外提供的远程访问接口。

4.在项目的src目录下新建build.xml文件,用Ant管理项目的构建过程;

<?xml version="1.0" encoding="UTF-8"?>
<project name="HelloWorld" basedir=".">
	<property name="src.dir" value="${basedir}/src" />
	<property name="build.dir" value="${basedir}/build" />
	<property environment="env" />
	<property name="jboss.home" value="${env.JBOSS_HOME}" />
	<property name="jboss.server.config" value="default" />
	<path id="build.classpath">
		<fileset dir="${jboss.home}/client">
			<include name="*.jar" />
		</fileset>
	</path>
	<target name="prepare">
		<delete dir="${build.dir}" />
		<mkdir dir="${build.dir}" />
	</target>
	<target name="compile" depends="prepare" description="编译EJB工程">
		<javac srcdir="${src.dir}" destdir="${build.dir}">
			<classpath refid="build.classpath" />
		</javac>
	</target>
	<target name="ejbjar" depends="compile" description="EJB工程打包">
		<jar jarfile="${basedir}/${ant.project.name}.jar">
			<fileset dir="${build.dir}">
				<include name="**/*.class" />
			</fileset>
		</jar>
	</target>
	<target name="deploy" depends="ejbjar" description="发布EJB工程">
		<copy file="${basedir}/${ant.project.name}.jar" todir="${jboss.home}/server/${jboss.server.config}/deploy" />
	</target>
	<target name="undeploy" description="卸载EJB">
		<delete file="${jboss.home}/server/${jboss.server.config}/deploy/${ant.project.name}.jar" />
	</target>
</project>

5.在eclipse的Outline窗口选中deploy,右键run as Ant build,执行此操作后,Ant会在当前项目根目录和jboss-4.2.3.GA\server\default\deploy目录生成项目的jar文件;

6.启动JBoss服务器;

7.在其它项目中通过JNDI调用EJB无状态会话bean提供的方法;

package com.tgb.test;

import java.util.Properties;

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

import cn.tgb.ejb3.HelloWorld;

public class EJBClient {

	public static void main(String[] args) {
		Properties props = new Properties();
		props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
		props.setProperty("java.naming.provider.url", "localhost:1099");
		props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
		try {
			InitialContext ctx = new InitialContext(props);
			HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote");
			System.out.println(helloworld.sayHelloWorld("北京"));
		} catch (NamingException e) {
			System.out.println(e.getMessage());
		}
	}
}

到此,我们完成了EJB无状态会话bean的实例创建过程,希望能帮助大家进步。

时间: 2024-10-03 06:14:19

JBoss+Ant实现EJB无状态会话bean实例的相关文章

无状态会话bean(2)----声明周期回调(未排版)

与用于应用程序代码的常规Java类不同,服务器管理无状态会话bean的声明周期它在两个方面影响了一个bean的实现. 首先,服务器决定了创建和删除bean实例的时间.应用程序不会控制何时或者甚至创建多少特定的无状态会话bean实例,或者它们将存活多久. 第二,服务器必须在构建之后,但是在调用bean的业务逻辑之前,初始化bean服务.同样,该bean可能必须在使用业务方法之前获得可用的资源,如JDBC数据源.然而,为了使得bean获取资源,服务器必须首先完成初始化bean服务.这限制了类的构造函

EJB开发第一个无状态会话bean、开发EJB客户端

开发第一个无状态会话bean EJB中的三中bean: 会话Bean(Session Bean) 负责与客户端交互,是编写业务逻辑的地方,在会话bean中可以通过JDBC直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作. 实体Bean(Entity Bean) 它实际上属于java持久化规范(JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate.TopLink等ORM框架各自为营的局面. 消息驱动Bean(Messag

无状态会话bean(1)---定义

无状态会话bean用于完毕在单个方法的生命周期内的操作.无状态bean能够实现很多业务操作,可是每一个方法都不能假定不论什么其它的方法会在它之前调用.后半句的意思是如今的你可能不是刚才的你.明天的你可也能不是今天的你,这个时候你就叫做"无状态你". 上面的阐述听起来像是无状态的bean的一个局限,好像每次再见就像永别似的. 可是这是迄今为止业务服务最常见的形式,就像去饭店吃饭,点菜的服务员与给你上菜的服务员是不是同一个这不是我们所关心的. 无状态回话bean不同于适合在对话中积累状态(

无状态会话bean(1)---定义(未排版)

无状态会话bean用于完成在单个方法的生命周期内的操作.无状态bean可以实现许多业务操作,但是每个方法都不能假定任何其他的方法会在它之前调用. 这听起来像是无状态的bean的一个局限.但是这是迄今为止业务服务最常见的形式.不同于适合在对话中积累状态(如零售应用程序的购物车)的有状态会话bean,无状态回话bean旨在非常有效的执行独立操作.无状态会话bean可以在最小化对整体服务器资源影响的同时,扩展到大量的客户端. 会话bean定义分为如下两个部分: 零个或多个业务接口,定义了一个客户端在b

无状态会话bean(3)---远程业务接口(未排版)

迄今为止,我们只讨论了使用一个本地业务接口的会话bean.在这种情况下,本地意味着只能由运行在同一个应用程序服务器实例的JavaEE组件声明会话bean的依赖性.例如,远程客户端不可能通过本地接口使用会话bean. 为了容纳远程客户端,会话bean可以采用@Remote注解来标记它们的业务接口,以声明它是远程可用的.下面代码演示了前面所示的HelloService接口的远程版本语法.标记一个接口为远程的相当于使其扩展java.rmi.Remote接口.客户端获取的bean的引用不再是服务器上的一

EJB初级篇--EJB组件之会话Bean

上篇博文中我们已经详解介绍了什么是EJB.其实最简单的说:EJB就是运行在独立服务器上的组件,客户端是通过网络对EJB对象进行调用的.而我们常说的企业Bean组件可以分为三种类型:会话Bean.消息驱动Bean和实体Bean.依据应用设计的不同,开发者可以选择适合应用的组件类型.下面几篇博文中我会为大家分别详细的介绍这三种企业Bean组件.本篇博文则就先来介绍介绍会话Bean吧. 首先来介绍一下,什么是会话Bean.会话Bean能够完成客户所要求的业务操作,它是含有业务逻辑的可重用组件,并能够用

有状态会话bean

在会话bean综述中,描述了无状态和有状态bean的区别在于客户端和服务器之间交互形式不同.对于无状态会话bean,交互的开始和结束都在同一个方法中.有时客户端需要发出多个服务请求(需要调用多个方法),而每个请求需要访问或者考虑前面的请求结果.有状态会话bean的出现就是为了处理这种情况,通过向客户端提供一个专用的服务(某一个可以保留前面状态的bean),当客户端获得bean的引用时启动该服务,并且只有当客户端选择结束会话时才结束.回到饭店吃饭的例子就是当你点餐的时候一个服务员在为你服务,直到你

有状态无状态回话bean

1.有状态(Stateful) 可以在不同的方法调用间保持针对各个客户端的状态 与客户端的联系必须被维持,这样做开销要大一些 有状态也可以这样理解,它存在存储能力,也就是说至少有一个属性来标识它目前的状态,例如: 注意:有状态会话bean,每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即“有状态”:一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初始的bean. 2.无状态(Stateless) 在不同方法调用间不保留任何状态

有状态bean和无状态的bean

有状态会话bean :每个用户有自己特有的一个实例,在用户的生存期内,bean保持了用户的信息,即"有状态":一旦用户灭亡(调用结束或实例结束),bean的生命期也告结束.即每个用户最初都会得到一个初始的bean. 无状态会话bean :bean一旦实例化就被加进会话池中,各个用户都可以共用.即使用户已经消亡,bean 的生命期也不一定结束,它可能依然存在于会话池中,供其他用户调用.由于没有特定的用户,那么也就不能保持某一用户的状态,所以叫无状态bean.但无状态会话bean 并非没有