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

本文介绍了如何使用Ant构建工具创建并部署EJB无状态会话bean实例,包括接口定义、实现类编写、构建流程设置等步骤,并通过JNDI调用来演示实际应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        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的实例创建过程,希望能帮助大家进步。

Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax.ejb.AfterCompletion.class javax.ejb.ApplicationException.class javax.ejb.Asynchronous.class javax.ejb.AsyncResult.class javax.ejb.BeforeCompletion.class javax.ejb.ConcurrencyManagement.class javax.ejb.ConcurrencyManagementType.class javax.ejb.ConcurrentAccessException.class javax.ejb.ConcurrentAccessTimeoutException.class javax.ejb.CreateException.class javax.ejb.DependsOn.class javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome.class javax.ejb.EJBLocalObject.class javax.ejb.EJBMetaData.class javax.ejb.EJBObject.class javax.ejb.EJBs.class javax.ejb.EJBTransactionRequiredException.class javax.ejb.EJBTransactionRolledbackException.class javax.ejb.embeddable.EJBContainer.class javax.ejb.EnterpriseBean.class javax.ejb.EntityBean.class javax.ejb.EntityContext.class javax.ejb.FinderException.class javax.ejb.Handle.class javax.ejb.HomeHandle.class javax.ejb.IllegalLoopbackException.class javax.ejb.Init.class javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb.MessageDrivenContext.class javax.ejb.NoMoreTimeoutsException.class javax.ejb.NoSuchEJBException.class javax.ejb.NoSuchEntityException.class javax.ejb.NoSuchObjectLocalException.class javax.ejb.ObjectNotFoundException.class javax.ejb.PostActivate.class javax.ejb.PrePassivate.class javax.ejb.Remote.class javax.ejb.RemoteHome.class javax.ejb.Remove.class javax.ejb.RemoveException.class javax.ejb.Schedule.class javax.ejb.ScheduleExpression.class javax.ejb.Schedules.class javax.ejb.SessionBean.class javax.ejb.SessionContext.class javax.ejb.Session
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值