您的位置:首页 > 其它

EJB简介

2009-12-03 08:15 211 查看
最近学这个,首先我们应该了解一下J2EE
个人的理解而已,"说"的人多了也就知道了这么一回事,但是你想记忆深刻,还是要靠自己领会!
对于J2EE具体的学习请自行搜索(搜索缩写就可以如,J2EE,JNDI,EJB,JMS...)
J2EE是一组规范,一套标准,一整套解决方案,由N(N>=1000)个规范组成.....
然后我们来认识一个组织
JCP
开放的国际组织JCP(Java Community Process),负责处理和审批各种Java技术和技术规范 
JCP( Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新Java技术规范、参考实现(RI)、技术兼容包(TCK)。Java技术和JCP两者的原创者都是SUN计算机公司。然而,JCP已经由SUN于1995年创造Java的非正式过程,演进到如今有数百名来自世界各地Java代表成员一同监督Java发展的正式程序。 
JCP维护的规范包括J2ME、J2SE、J2EE,XML,OSS,JAIN等。组织成员可以提交JCR(Java Specification Requests),通过特定程序以后,进入到下一版本的规范里面。 
所有声称符合J2EE规范的J2EE类产品(应用服务器、应用软件、开发工具等),必须通过该组织提供的TCK兼容性测试(需要购买测试包),通过该测试后,需要缴纳J2EE商标使用费。两项完成,即是通过J2EE认证(Authorized Java Licensees of J2EE)。
_________________________________________________________________________
EJB只是其中一种,还有一种叫JavaBean,太熟悉不过了.....
EJB呢?(Enterprise JavaBean) 企业javabean...
看下面的图片....好硕大啊-  -


EJB和客户端之间的交互依赖两项技术,JNDI(Java Naming and Directory Interface),java命名目录接口RMI(Java Remote  Invoke)java远程方法调用(激活)
三种类型EJB
会话Bean--控制工作流程,业务过程
实体Bean--持久性数据
消息驱动Bean---异步消息
__________________________________________________
介绍完毕,如果是学习的话小弟推荐两本书,大家说好,我也跟跟
EXPERT.ONE.ON.ONE.J2EE.DEVELOPMENT.WITHOUT.EJB
精通EJB(第三版)
我就两个一起看,^_^.....
    都经典,都有中文版.......自己苦学去吧,别忘了实践,和"知其所以然"
     EJB作为JavaEE的核心规范,然而大部分程序员使用的Spring,Struts,Hibernate都不是JCP的标准规范。但是作为规范,还是有很多厂家支持的.在Hibernate支持者的一片呼声中,Ejb3和Ejb2修改了很多.2009年5月6日,JCP委员会通过了JSR 318的Proposed Final Draft,详情见http://jcp.org/en/jsr/detail?id=318
EJB简介
[b]EJB Session Bean HelloWorld
[/b] EJB简介
[b]Ejb作为一种规范,而不是一种产品。包含很多内容,有很多产品去实现,比如Sunglassfishjbossjboss asbea(已经被Oracle收购)的weblogicIBMWebSphere.
[/b] [b]Ejb 3hibernate很多相似的地方,当然EJB 3.0Entity bean specification的实际领导人是Hibenate创始人Gavin King.比如EJB 3EJB QLHibernateHQL很类似.Ejb也支持类似Spring的依赖注入(DI),然而和传统的技术相比,Ejb有一些明显特性(当然,传统技术也在不断提升和相互整合新的开发思想).
[/b] [b]分布式负载均衡
[/b] [b]Ejb作为企业级Javabean,考虑到企业信息的复杂性,开始便考虑到分布式,比如EjbRemoteLocal接口分别用来为远程JVM和本地JVM的客户端设计的。使用的时候只要在实现Bean中加上@Remote或者@Local即可。远程接口是为了分布式,但是本地接口资源开销要好一些.
[/b] [b]当然,和web service相比,ejb使用的时候需要占用服务器的特定端口,比如Jboss使用的1099Sun应用服务器使用的3700.web service只要告诉客户端wsdl的地址既可,传的SOAP都是用HTTP协议和80端口。而web service传输的是XML的文本流。Ejb传输的是二进制。EJB可以整合Web Service
[/b] [b]Enterprise Java Beans
[/b] [b]Ejb有三种Bean,分别是Session BeanEntity BeanMessageDriven Bean
[/b] [b]Session Bean分为StatelessStateful,两者的区别在于前者由EJB容器管理时候的声明周期无状态,取决于容器。而后者是有状态的,当与用户的交互结束后也销毁了。
[/b]      Entity Bean是实体bean,是一个POJO
[b]MessageDriven BeanJMS中用于消息驱动的,因为异步消息很节省资源,因此也使用很多.
[/b] ORMEJB QL
[b]EJB的JPQLHibernateHQL很类似,是一种面向对象的查询语句,但是EJB本身也支持Native SQL语句。对于JavaEE的事务处理是JTA,JavaSE的事务处理RESOURCE_LOCAL.
[/b] [b]这一模块详情可以查阅JPAJava持久化API
[/b] 安全
[b]EJB提供了Java Authentication and Authorization Service(JAAS),只需要简单的修改下配置即可。当然JAAS也可以的权限和用户也可以整合到数据库
[/b] EJB Session Bean HelloWorld
[b]以下代码运行环境为
[/b] [b]JDK 1.6 Update 14
[/b] [b]JbossAS 4.2社区版
[/b] [b]测试用Junit 4
[/b] 本例为无状态session bean,仅仅其抛砖引玉作用,是一个helloworld程序
[b]采用remote接口
[/b] [b]packagecom.greysh.ejb;
[/b] importjavax.ejb.Remote;
@Remote
publicinterfaceHelloEjb {
publicString say(Stringmsg);
}
实现代码
[b]packagecom.greysh.ejb;
[/b] importjavax.ejb.Stateless;
importcom.greysh.ejb.HelloEjb;
public@StatelessclassHelloEjbBeanimplementsHelloEjb {
publicString say(String msg) {
returnmsg;
}
}
jar命令打包后放在jbossASjboss/server/default/deploy即可,jboss会自动部署
[b]21:56:20,656 INFO
[/b] [b][EJB3Deployer] Deployed: file:/D:/jboss/server/default/deploy/FCA_Greysh_Ejb.jar
[/b] [b]如果部署成功,则可以在Global JNDI Namespace中查到
[/b] +- HelloEjbBean (class: org.jnp.interfaces.NamingContext)
| +- remote (proxy: $Proxy323 implements interface com.greysh.ejb.HelloEjb,interface org.jboss.ejb3.JBossProxy)
然后编写客户端,编写的时候需要将jbossclient目录的jar加到build path
[b]@BeforeClass
[/b] [b]public static void setUpBeforeClass() throws Exception {
[/b] [b]Properties props = new Properties();
[/b] [b]props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
[/b] [b]props.setProperty("java.naming.provider.url", "localhost:1099");
[/b] [b]InitialContext ctx = new InitialContext(props);
[/b] [b]setHelloEjb((HelloEjb)ctx.lookup("HelloEjbBean/remote"));
[/b] [b]}
[/b] @Test
[b]public final void testSay() {
[/b] [b]assertEquals("HiEjb", getHelloEjb().say("HiEjb"))
[/b] [b]}
[/b] [b]}
[/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: