Ejb3.0学习笔记(在Jobss下运行Ejb)
什么是EJB?
全称是Enterprice JavaBeans是一个用于分布式业务应用的标准服务端组件模型。采用Enterprice JavaBeans架构编写的应用是可伸的,事务性的,多用户安全的。采用Ejb编写的这些应用,可以部署在任何支持Enterprice JavaBeans 规范的服务器平台,如Jboss,WebLojic等。
Ejb是用来干什么的?
EJB 实际上是用来编写业务层的代码。
EJB的好处
EBJ为我们提供了很多在企业开发中需要使用到的服务,如事务管理/安全/持久化/分布式,它大大减少了我门的开发工作量。
有关EJB的书籍:1.EJB3.0入门经典 2.EJB3.0实例教程 电子版 :http://www.foshanshop.net
5.JavaEE 中的主流服务器
1.Jboss:是一个成熟的开源的准JavaEE应用服务器,在开源JavaEE应用服务器中所占的市场份额第一。如果你打算选用开源的JavaEE应用服务器,那么JBoss是最值得选择的。(4.2以上的版本)
2.Glassfish:是一个开源的JavaEE应用服务器,对JavaEE规范支持非常好,其运行性能比较高。因为发展时间相对较短,和JBoss有的一拼。
3.Weblogic:是市场占有率第一的商业JavaEE应用服务器,他具有出色的稳定性,并提供人性化的管理界面。但在EJB3.0的领域里,它比JBOSS差些,bug比较多。(10以上的版本)
4.Sun Application Server:商业JavaEE应用服务器,如果打算用商业应用服务器运行EJB3.0的话,这个很好的。
5.Oracle Application Server:商业JavaEE应用服务器,如果你的数据库是Oracle,要想兼容性更好,这个是不错的选择。
6.apusic应用服务器:这是国内的商业JavaEE应用服务器,主要在政府中占有份额。但开发文档太少。
注意:Tomcat目前只是Web容器,它不能运行EJB应用。
6.sping+hibernate同样提供了事务管理/持久化服务,好像没有必要使用EJB,这中说法对吗?
不对的。因为Ejb 设计的初衷是用于分布式场合,而Sping—开始就没有打算提供分布式功能。所以两者看似有竞争的关系,
但两者的实际上偏重点布同,像EJB比较适合用于大型的企业。为了避免业务功能的重复开发,有必要把业务独立处来,让多个信息系统共享一个业务中心,这样应用就需要具备分布式能力。
7.EJB3.0的运行环境(1.EJB3.应用需要运行在JDK1.5以上的版本)
1.安装JBoss之前要安装JAVA_HOME.
步骤:1.我的电脑》》属性》》高级》》环境变量,在‘在系统变量’里添加JAVA_HOME变量,值为JDK的安装路径,如 C:\java\jdk1.5.0_16
2.在“在系统变量”在添加CLASSPATH变量,值为:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3.在系统变量栏里找到变量名为Path的选项,点’编辑’在变量值的末尾加:;%JAVA_HOME%\bin;
8.如何下载并安装Jobss
步骤:1.在Http://www.jboss.org/jbossas/downloads/ 官方网站下载最新版本的jboss.
2. 下载4.2.3最新版的Jobss,5.0还是适用版,打开连
3.Jdk1.6下载这个版本。Jdk1.5下载这个版 本的
4.解压后就将Jobss安装好了。 然后启动run.bat 就可以启动Jobss (如果没有错误信息表示启动成功)
5.在浏览器中敲Http://localhost:8080就可以进入管理后台了
6.给Jobss添加系统变量 在我的电脑---》属性—》高级—》》设置》》》变量名写:JBOSS_HOME >>>路径写JBOSSde
安装路径,
7.添加Bin 在变量值的末尾中写
9.Ejb3.0中的Bean
会话Bean(Session Bean)
分为:有状态的会话Bean;一个用户只能对一个实例
无状态会话Bean;性能好,bean的实例可以共多个用户使用
负责与客户端交互,是编写业务逻辑的地方,在会话Bean中可以通过JDBC直接操作数据库,大多数情况下都是通过实体bean来完成对数据库的操作。
实体bean(entity bean)
它实际属于Java持久回规范(简称JPA)里的技术,JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,结束现在的Hibernate,TopLink等ORM框架各自为营的局面。
消息驱动Bean(Message-driven bean)
它是专门用于异处理Java消息的组件,具有处理大量并法消息的能力。
10.如何开发一个无状态的会话Bean
开发工具:Eclipse IDE for Java EE
下载地址:Http://www.eclipse.org/downloads
开发EJB依赖的jar文件
可以在Jboss安装路径的client目录下找到通常会把client目录下所有的jar文件添加到项目的类路径下。
创建一个EJB项目
给项目导入Jar包
点击在Libraires中 Add External JARS添加Client的所有jar文件
开始开发一个无状态的的会话Bean
10.1.开始开发无状态的会话Bean
1.首先New一个接口
Public interface HelloWord{
Public String SayHello(String name);
}
import javax.ejb.Stateless;
import javax.ejb.Remote;
2.再创建一个实现类
@Stateless(实现EJB)
@Remote(HelloWorld.CLass)代表远程接口
Public class HelloWordBean implements HelloWord{
Public String SayHello(String name){
Return name+”你好,世界!”;
}}
在实现类中加入以上两句话就可以实现一个无状态的会话Bean
开发完成后对EJB进行打包,
通过集成工具进行打包
导出----》》选择Jar文件----》》下一步-选择文件—》》完成
生成一个jar文件
发布EJB
启动JBoss
在EJB的Default/Depoly目录下发布,将EJB的jar文件拷贝到Jboss的Depoly目录下完成EJB的部署,发布成功
11.开发EJB的客户端
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");
try{
InitialContext ctx=new InitialContext(props);
HelloWorld helloworld=(HelloWorld)ctx.lookup("HelloWorldBean/remote");
System.out.println(helloworld.SayHello("老头?"));
}catch(NamingException e){
System.out.println(e.getMessage());
}
}
}
Jboss 默认生成的JNDI名称
当EJB 发布到Jboss上时,如果我们没有为它指定全局JNDI名称或修改过其默认EJB名称,Jboss就会按照规则默认的命名规侧为EJB生成全局的JNDI名称,默认为
本地接口:EAR-File-BASE—NAME/EJB-CLASS-NAME/LOCAL
远程接口:EAR-FILE-BASE-NAME/EJB-CLASS-NAME/remote
EAR-FILE-BASE为ear文件名,EJB—CLASS-NAME为EJB的非限定类名。
把HelloWorld 应用作为EJB模块打包进名为HelloWorld.ear的企业应用文件,它的远程接口的JNDI名称是:HelloWorldBean/remote
如果把EJB应用打包成后缀为.jar的模块文件,默认的全局JNDI名称是
本地接口:EJB-CLASS-NAME/local
远程接口:EJB-CLASS-NAME/remote
例:把HelloWorld 应用打包成HelloWrld.jar 文件,它的远程接口的JDNI名称是:
HelloWorldBean/remote
12.把Jboss集成进Eclipse
1.操作步骤:
在控制台中:1.右键 New->Server
2.选中你说需要的服务器版本
3.在JRE 中选中JDK的版本,Application ServerDirectory 中选中你jboss 的安装路径
4.下一步,然后完成。(Ctrl+C)可以关闭Jboss。
13.通过ANT提高EJB应用的开发效率
源码:<project name="HelloWorld" basedir=".">
<property name="src.dir" value="${basedir}\src" />
<property environment="env"/>
<property name="jboss.home" value="${env.JBOSS_HOME}"></property>
<property name="jboss.server.config" value="default"></property>
<property name="build.dir" value="{basedir}\build"/>
<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="编译">
<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>
14.开发具有本地接口的无状态BEAN
1.开发具有Local接口的 Session Bean
通过远程接口调用EJB的过程,首先客户端需要与EJB建立起Socket通讯,在通信管道上他们之间需要来回发送IIOP协议消息,因为数据要在网络进行传输,存数据的Java对象必须要进行序列化。
Socket通讯
IIOP消息
在这个过程中,有网络通信的开销,协议解析的开销,对象序列化的开销。因为EJB是分布式技术,它允许客户端与ejb应用在
不同的机器上,所以这些性能开销也是必然的。但是在实际生产中,我门不可能避免这种情况:客户端与EJB应用运行在同一台机器上的同一个JBoss中。那么,这个时候客户端和EJB是否还进行网络通讯呢?不需要。这个时候客户端和EJB在同一个Jvm中,他们完全可以通过内存进行交互,可以避免上面的性能开销。于是,可以通过引入本地接口。通过本地接口调用EJB 直接在内存中交互。这样就可以避免因网络通信所造成的各种性能的开销。但是,只有客户端和EJB应用都在同一个Jvm内运行的时候,我们才能调用本地的接口,否则只能调用远程接口。只要客户端与ejb发布在同一个jboss中,我们就认为他们在同一个Jvm中。
2开发一个Local接口
步骤:1.建立一个动态的Java Web 项目,并创建一个Jsp也页面.
2.在页面中调用EJB应用
3.再在Web项目中右键 属性》》Java Build Path>>Project >>添加包含EJB接口的项目》》然后在再页面中导入包即可
4.再在Web项目中右键 Export>>War file>>保存在一个盘中
5.然后将刚才的war包粘贴到Jboss的发布目录下
6.然后启动Jboss,就可以运行了
15.开发有状态BEAN
1.在类的前面用 @Stateful (内--->磁盘较钝化,磁盘---->内存叫激活)
2.无状态Bean使用实例池技术管理Bean。
3.有状态Bean使用激活(activation)管理bean。(是要为每个用户创建一个BEAN实例,这个实例只能为这个用户服务,他是不能被其他的用户访问的)
开发完后部署到EJB容器中
16.通过注解方式并使用其他EJB或者服务
1在一个EJB中调用另外一个EJB
方法1;通过JNDI查找的方法
Eg: InitialContext ctx=new InitialContext();
Other other=(Other)ctx.lookup(“OtherBean/local”);
Other.XXX();
Other 是被调的EJB接口,OtherBean是被调EJB的实现类,
方法2:通过注解的方法调用另外一个EJB
在要调另外一个EJB的EJB中写上
@EJB Other other;
Other.XXXX();
注意:注解的工作原理:EJB容器解析到类的字段发现@后就去找是否有实现这个接口的EJB,然后将其注入进来。如果被两个EJB实现,将会抱个错,但是我们注入时可以这样注入
Eg; @EJB(beanName=”OtherBean”) Other other; Statefull(name=””)可以修改EJB名称
EJB的名称,即类名
2.如何注入定时服务
1>>.注入数据源:@Resource TImerService timerervice;
2>>.@Resource(mappedName=”java:XXX”) DataSource dataSource;
“ ”中用于指定数据源的JDNI名称;
17.配置JBOSS数据源
1.首先找到JBOSS的数据源配置模板,在JBOSS的安装目录下的Docs/examples/jca
2.修改JNDI名称 <jndi-name>itcastDS</jndi-name> 写自己创建的数据源的名称
<connection-url>jdbc:mysql://localhost:3306/数据库名称 </connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<user-name>x</user-name> 数据库的用户名和密码
<password>y</password>
2数据源的文件必须为XXX—ds.xml为结尾
3.将MySql的驱动文件拷贝到JBOSS目录下的Server/Default/lib目录下
4.重启JBoss,然后发布配置文件,将数据文件拷贝到JBOSS安装目录的Server/default/deploy下就可以了。
注意: 在Java:XXX后面的JDNI所绑定的资源,只能被JBoss的内部服务访问,不能被外部访问。
http://localhost:8080/jmx-console可以进行访问,然后找到Jboss.Jca 就可以找到我们刚才发布的数据源信息然后点击ManagedConnectionPool就可以进入数据源的连接属性
<min-pool-size>3</min-pool-size>
<max-pool-size>100</max-pool-size>
设置最大的连接数和最小的连接数,InUse ConnectionCount 正在使用的连接数量,如过和Max相等代表不够用要设大一些。
17.实体Bean 的开发
它属于Java持久化规范(简称JPA)里的技术,实体bean 通过元数据在javaBean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对象的编程来操纵数据库。JPA的出现主要是为了简化现有的持久化开发工作和整合ORM技术,目前实现的JPA规范的主流产品有Hibernate,TopLink和OpenJPA,在jboss中采用了Hibernate作为其持久化实现产品。
根据JPA规范的要求,在实体bean应用中,我们需要在应用的类路径下的META-INF目录加入持久化配置文件persistence.xml.
分享到:
相关推荐
经典资料+个人心得,希望大家能喜欢
这份"Java Python 个人学习笔记"涵盖了这两种语言的基础知识、进阶技巧以及可能的结合应用。 Java是一种面向对象的、高性能的编程语言,由Sun Microsystems(现为Oracle公司)开发,其设计目标是“一次编写,到处...
### Spring学习笔记(精华全记录) #### Spring框架概述 Spring框架源自Rod Johnson的个人项目,最初于2002年末发布。Spring并非一开始就作为一个完整的框架出现,而是从一个项目逐步发展而来。随着项目的成熟,...
### JDK 6.0 学习笔记精要 #### 一、Java 概览 - **Java 的起源与发展** - Java 最初是由 Sun Microsystems 的 Green Project 开发出来的,最初是为了设计 Star7 应用程序而创建的一种编程语言。 - 名称由来:...
Java专题学习笔记主要涵盖了Java语言的核心概念、进阶特性以及实际应用中的问题解析。这份笔记是结合了讲师的讲解和个人的整理,旨在为热爱Java编程的朋友们提供丰富的学习资源。以下将详细介绍其中可能包含的知识点...
【标题】"凯达Java学习笔记.rar"是一个包含丰富的Java技术知识的学习资源,主要涵盖了Java的基础、进阶以及企业级应用开发的相关内容。这个压缩包很可能是某位名为"凯达"的学习者或讲师整理的一套Java学习资料,旨在...
这些资料可能包括教程、讲座笔记、演示文稿或视频课程,旨在帮助学习者快速入门并逐步提升技能。 “查找例子分析学习的好教材”意味着这些资源不仅提供了基础知识,还鼓励学习者通过分析和修改现有的代码示例来提高...
这份“Java学习笔记”涵盖了从基础到进阶的各种主题,旨在帮助个人深入理解Java编程的核心概念和技术。 首先,Java的学习始于基础语法。Java的程序结构包括类、对象、包和接口。你需要了解如何定义类,创建对象,...
在这个名为“我的在线教育项目学习笔记资料”的压缩包中,主要包含了与Java编程相关的学习资源。我们可以从这个标题和描述中推断出,这是一份关于个人在在线教育平台上进行Java学习过程中的积累,可能包括笔记、代码...
标题中的"Spring学习笔记之一“why spring”"表明了这篇笔记主要探讨的是Spring框架的核心价值和使用背景。在IT行业中,Spring是一个广泛使用的Java企业级应用开发框架,它以其依赖注入(Dependency Injection,DI)...
综合这些文件,我们可以看到这是一个全面的学习资源集合,覆盖了数据库管理、编程语言、Web开发框架以及日语学习等多个方面,对于想要深入IT领域或者提升自身技能的个人来说,这是一个宝贵的资源库。
Java应用广泛,涉及个人PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网等领域,同时拥有全球最大的开发者专业社群。 Java常年占据热门编程语言排行榜第一,Java工程师综合就业排名第一,完成此路径...
"达内javaSE,javaEE个人学习所有基础笔记"是一个针对初学者的全面学习资源,涵盖了从Java Standard Edition (Java SE)的基础知识到Java Enterprise Edition (Java EE)的高级概念。 Java SE是Java的核心部分,它...
### Java分布式应用学习笔记02再谈JVM 在深入探讨Java虚拟机(JVM)时,我们再次聚焦于这个核心组件,它不仅是Java运行环境的心脏,也是构建分布式应用的关键技术之一。JVM作为Java语言的核心执行环境,其设计与...
Java是一种广泛使用的高级编程语言,...Java语言的广泛应用使得它成为IT行业中的关键技术,学习Java不仅能提升个人技能,也有助于拓宽职业发展道路。无论是桌面应用、Web开发还是移动应用,Java都有着广泛的应用场景。
- **Java EE** 提供了一系列服务、API 和协议,如 JSP、Servlet、Enterprise JavaBeans (EJB)、Java Remote Method Invocation (RMI) 等,这些技术共同构成了开发分布式、多层式、组件化和基于 Web 的应用程序的基础...
个人学习资料可能包括了详细的编程实例、代码注释、调试技巧、面试准备资料等,有助于提高编程能力、解决问题的能力以及理解复杂系统的能力。 【标签】"学习"表明这些资料旨在帮助学习者掌握Java编程技能,可能包含...
本笔记将深入探讨javax相关的基础知识,帮助读者更好地理解和使用Java平台的核心组件。 首先,javax包主要包含以下子包: 1. javax.swing:这是Java Swing库的一部分,提供了丰富的图形用户界面(GUI)组件,如...