Jboss学习笔记 运行步骤: 将项目src那一块打包成为HelloWorld.jar (使用eclipse中自带的打包工具)然后把该文件拷贝到jboss安装目录/server/default/deploy/目录下,然后在C:/jboss/jboss-4.2.2.GA/bin的目录下启动run.bat进行热部署, Web打包方式一: 在WebRoot目录下添加build.xml ant文件,文件为: <?xml version="1.0"?> <project name="wartest" default="war" basedir="."> <target name="war" description="创建WEB发布包"> <war warfile="${basedir}/EJBTest.war" webxml="${basedir}/WEB-INF/web.xml"> <fileset dir="${basedir}"> <include name="**"/> <exclude name="build.xml" /> <exclude name="/WEB-INF/web.xml" /> </fileset> </war> </target> </project> Web打包方式二: 1. 复制WEB-INF文件以及jsp文件 2. 将改文件压缩成为rar文件,之后在改变它的后缀名为war 接下来继续把EJBTest.war文件拷贝到jboss安装目录/server/default/deploy/目录下。启动jboss服务在浏览器上输入 : http://localhsot:8080/EJBTest/Test.jsp 服务器框架 EJB是Java服务器端服务器框架的规范,它是Java服务器服务框架的规范,软件厂商根据它来实现EJB服务器。应用程序开发者可以专注于支持应用所需要的商业逻辑,而不用担心周围框架的实现问题。 EJB规范详细的解释了一些最小但是必须的服务,如事物,安全和名字等。软件厂商根据这些规范要求保证一个enterprises bean 能使用某个必须的服务。规范并没有说明厂商如何实现这些服务。这使得通知阅读规范来学习EJB更加困难,因为它允许厂商在不牺牲核心服务的可移植性的前提下来提供一些增强功能。 什么是JNDI: JNDI,Java 命名目录接口 。是JDK1.3版本开始就绑定的标准JavaAPI。他为各种现有的命名和目录服务提供了通用接口:DNS,LDAP,活动目录(Active Directory)、RMI注册器、COS注册器、NIS级文件系统。在结构上,JNDI有两部分组成:客户API和服务提供商接口Service Provider Intergace ,SPI),应用程序通过客户API访问命名和目录服务:服务提供商接口用于供厂商创建命名和目录服务的JNDI实现。 命名服务用于将名称和对象联系起来,使得我们可以用名称访问对象。例如:当你在web浏览器输入URL:http://www.baidu.com时,DNS(Domain Name System,域名系统)将这个域名转换成为IP地址。 目录服务是命名服务的自然扩展,在这种服务中,对象不但有名称,还有属性。于命名服务的关键差别是:目录服务中对象可以有属性(例如:用户emain地址)而命名服务中对象没有属性。 会话Bean(Session Bean) Session Bean是实现业务逻辑的地方,简单的说:像我们要实现两数相加或是从数据库中读取数据,都是通过Session Bean来实现。 根据是否可以维护会话状态,Session Bean分为有状态bean和无状态bean。有状态bean可以维护会话状态,无状态bean不会维护会话状态。要维护会话状态,意味着EJB容器要为每个用户创建一个bean实例,并通过该实例保存着与用户会话状态。不维护会话状态,意味着一个bean实例不需要保存与某个用户的会话状态,这是一个bean实例可以为多个用户服务。 要开发一个Session Bean,我们需要定义接口和Bean class 。其中接口分为远程(remote)和本地(local)接口。 在EJB3.0中,不要求你同时实现remote和local接口,但是实现两者是比较好的做法: 1. 远程接口remote interface : 定义了session bean 的业务方法,这些方法可以被来自EJB容器之外的应用访问到。 2.本地接口local interface : 同样定义session bean 的业务方法,这些方法可以被同处于EJB容器内的其他应用使用。因为local interface 接口允许bean 之间直接通过内存交互,没有分布式对象协议的开销,从而改善了性能。 3.Bean类: bean class 包含了业务逻辑,他必须具备一个远程或本地接口。在Bean类,我们应该实现接口的业务方法,尽管这并不是必须的,但我们没理由不这样做。由于无状态会话Bean不维护会话状态,意味着一个bean实例可以为多个用户服务。因此EJB容器使用实例池化技术管理无状态会话Bean。简单的说就是:无状态会话Bean部署应用服务器时,EJB容器会为它预先创建一些bean实例放在对象池。当有用户访问EJB方法时,EJB容器会从对象池中取出一个实例为之服务,服务完了就回到对象池。当下一个用户在访问EJB方法时,EJB容器有可能再次把该实例取出来为之服务。正因为如此,无状态会话Bean只需要少量的实例就可以成百上千的用户服务,大大提高了系统性能。 由于无状态会话Bean能够支持多个用户,并且通常在EJB容器中共享,可以为需要大量客户的应用提供更好的扩充能力。无 状态会话Bean 比有状态会话Bean更具有性能优势,在条件允许的情况下开放人员应该首先考虑使用无状态会话Bean 。