Hibernate实战_笔记11(EJB容器JBoss)

引入EJB组件

      当你还使用EJB3.0会话bean和消息驱动的bean(和其他Java EE5.0标准)时,Java Persistence就开始初露锋芒。EJB3.0规范已经被设计为允许持久化的整合,因为你可以在Bean方法范围获得自动的事务划分,或者跨越状态会话EJB生命周期的一个持久化上下文(如Session)。
这次内容是从一个托管的JavaEE环境中的EJB3.0和JPA开始,你将再次通过修改“Hello World”应用程序学习基础的知识。首先需要Java EE环境——提供JavaEE服务的运行时容器。

建议大家使用JBoss(RedHat一款开源JavaEE服务器)

JBoss是一个管理EJB的容器和服务器,支持EJB 1.1、EJB 2.0和EJB3.0的规范。
http://sourceforge.net/projects/jboss/files/JBoss/JBoss-4.2.3.GA/
如果你安装的JDK是1.5版本(请选择jboss-4.2.3.GA.zip文件下载),如果你安装的jdk是1.6版本,请选择jboss-4.2.3.GA-jdk6.zip文件下载。下载后直接解压缩文件即可完成安装,为了避免应用出现莫名的错误,解压缩的路径最好不要带空格和中文。
启动JBoss
进入jboss的bin目录,找到启动脚本run.bat。双击run.bat即可启动jboss。
如果启动出错,请检查下列情况
1、端口是否被占用,如:8080、1099
2、是否为JDK设置了JAVA_HOME和ClassPath系统变量
3、检查jboss所用的jdk是否1.5以上版本,这些信息可以在jboss的控制台观察到
4、如果启动时出现这样的错误:“findstr不是内部或外部命令,也不是可运行的程序或批处理文件”。那么应该在系统变量Path中追加“%SystemRoot%\system32;%SystemRoot%;”。
否则最后的办法就是重装机器上的JDK咯。
还有就是为jboss设置JBOSS_HOME系统变量,系统变量里添加JBOSS_HOME变量,值为jboss的安装路径。
为了方便输入jboss的命令,我们把jboss的bin目录添加到系统路径里。

引入EJB组件前先学习一点EJB基础内容。。。

EJB中的三种bean

1、会话bean(session bean)
负责与客户端交互,是编写业务逻辑的地方,在bean可以通过jdbc直接操作数据库,但大多数情况下都是通过实体bean来完成对数据库的操作。
2、实体bean(entity bean)
它实际上属于java持久化规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在Hibernate、TopLink等ORM框架各自为营的局面。
3、消息驱动bean(message-driven bean)

它是专门用于异步处理java消息的组件,具有处理大量并发消息的能力。


会话bean
1)无状态会话bean
平常,我们使用最多的是无状态bean,因为它的bean实例可以供多个用户使用,所以它的性能比有状态bean高,正因为一个bean实例被多个用户使用,前一个用户设置的值有可能被后一个用户所修改,所以它无法正确保存某个用户设置的值,因此是无状态的。
2)有状态会话bean
有状态bean平常使用的并不多,因为它的一个bean实例只供一个用户使用,所以性能开销比较大,正因为它的实例只被一个用户使用,所以用户设置的值不会被其他用户所修改,所以可以正确保存用户设置的值,因此是有状态的。

如何开发一个无状态的会话bean

1)接口(接口可以是远程接口或本地接口)
2)实现类

操作步骤:

1)打开IDE开发工具(我使用的是MyEclipse)
2)导入jboss\client目录下的所有jar文件
3)编写接口
package cn.jbit.ejb3.dao;


public interface HelloWorldDao {


	public String sayHelloWorld();
}
4)编写实现类
package cn.jbit.ejb3.dao.impl;


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


import cn.jbit.ejb3.dao.HelloWorldDao;


@Stateless
// 无状态会话bean
@Remote(HelloWorldDao.class)
// 远程接口
public class HelloWorldDaoImpl implements HelloWorldDao {
	
	public String sayHelloWorld() {
		return "HelloWorld";
	}
}
5)打包

File->Export->Java->JAR file,截图


6)发布
打包的jar包复制到jboss\server\default\deploy进行热部署
开发EJB的客户端
package cn.jbit.ejb3.test;


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


import cn.jbit.ejb3.dao.HelloWorldDao;


public class Test {


	public static void main(String[] args) {
		try {
			InitialContext ctx = new InitialContext();
			HelloWorldDao dao = (HelloWorldDao) ctx
					.lookup("HelloWorldDaoImpl/remote");
			System.out.println(dao.sayHelloWorld());
		} catch (NamingException e) {
			e.printStackTrace();
		}
	}
}
注意在src目录添加jndi.properties(JNDI生成策略)
内容如下:
java.naming.factory.initial=org.jnp.interfaces.NamingContextFactory
java.naming.provider.url=localhost:1099

JBoss默认生成的JNDI名称
当EJB发布到JBoss时,如果我们没有为它指定全局JNDI名称或修改过其默认EJB名称,JBoss就会按照默认的命名规则为EJB生成全局JNDI名称,默认的命名规则如下:
如果把EJB应用打包成后缀为*.jar的模块文件,默认的全局JNDI名称是
1)本地接口:EJB-CLASS-NAME/local
2)远程接口:EJB-CLASS-NAME/remote

如果把EJB作为模块打包进后缀为*.ear的JAVA EE企业应用文件,默认的全局JNDI名称是
1)本地接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/local
2)远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote

EAR-FILE-BASE-NAME为ear文件的名称,EJB-CLASS-NAME为EJB的非限定类名。

总结:

这篇文章只蜻蜓点水地提了一下EJB,把难度尽量降低。

下一篇内容是JPA内引用EJB组件

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值