EJB简介
作者:曹祺
Blog: http://blogs.sun.com/greysh
Web: http://www.greysh.com
Email: Qi.Cao@Sun.com
本文链接:
http://developers.sun.com.cn/blog/functionalca/entry/ejb%E7%AE%80%E4%BB%8B
源代码下载:
http://developers.sun.com.cn/blog/functionalca/resource/Greysh/FCA_Greysh_Ejb.zip
难度:入门
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简介
EJB Session Bean HelloWorld
EJB简介
Ejb作为一种规范,而不是一种产品。包含很多内容,有很多产品去实现,比如Sun的glassfish,jboss的jboss as,bea(已经被Oracle收购)的weblogic和IBM的WebSphere.
Ejb 3和hibernate很多相似的地方,当然EJB 3.0的Entity bean specification的实际领导人是Hibenate创始人Gavin King.比如EJB 3的EJB QL和Hibernate的HQL很类似.Ejb也支持类似Spring的依赖注入(DI),然而和传统的技术相比,Ejb有一些明显特性 (当然,传统技术也在不断提升和相互整合新的开发思想).
分布式负载均衡
Ejb作为企业级Javabean,考虑到企业信息的复杂性,开始便考虑到分布式,比如Ejb 有Remote和Local接口分别用来为远程JVM和本地JVM的客户端设计的。使用的时候只要在实现Bean中加上@Remote或者@Local即可。远程接口是为了分布式,但是本地接口资源开销要好一些.
当然,和web service相比,ejb使用的时候需要占用服务器的特定端口,比如Jboss使用的1099,Sun应用服务器使用的3700.而web service只要告诉客户端wsdl的地址既可,传的SOAP都是用HTTP协议和80端口。而web service传输的是XML的文本流。Ejb传输的是二进制。EJB可以整合Web Service
Enterprise Java Beans
Ejb有三种Bean,分别是Session Bean,Entity Bean,MessageDriven Bean。
Session Bean分为Stateless和Stateful,两者的区别在于前者由EJB容器 管理时候的声明周期无状态,取决于容器。而后者是有状态的,当与用户的交互结束后也销毁了。
Entity Bean是实体bean,是一个POJO
MessageDriven Bean是JMS中用于消息驱动的,因为异步消息很节省资源,因此也使用很多.
ORM与EJB QL
EJB的JPQL和Hibernate的HQL很类似,是一种面向对象的查询语句,但是EJB本身也支持Native SQL语句。对于JavaEE的事务处理是JTA,JavaSE的事务处理RESOURCE_LOCAL.
这一模块详情可以查阅JPA(Java持久化API)
安全
EJB提供了Java Authentication and Authorization Service(JAAS),只需要简单的修改下配置即可。当然JAAS也可以的权限和用户也可以整合到数据库
EJB Session Bean HelloWorld
以下代码运行环境为
JDK 1.6 Update 14
JbossAS 4.2社区版
测试用Junit 4
本例为无状态session bean,仅仅其抛砖引玉作用,是一个helloworld程序
采用remote接口
package com.greysh.ejb;
import javax.ejb.Remote;
@Remote
public interface HelloEjb {
public String say(String msg);
}
实现代码
package com.greysh.ejb;
import javax.ejb.Stateless;
import com.greysh.ejb.HelloEjb;
public @Stateless class HelloEjbBean implements HelloEjb {
public String say(String msg) {
return msg;
}
}
用jar命令打包后放在jbossAS的jboss\server\default\deploy即可,jboss会自动部署
21:56:20,656 INFO
[EJB3Deployer] Deployed: file:/D:/jboss/server/default/deploy/FCA_Greysh_Ejb.jar
如果部署成功,则可以在Global JNDI Namespace中查到
+- HelloEjbBean (class: org.jnp.interfaces.NamingContext)
| +- remote (proxy: $Proxy323 implements interface com.greysh.ejb.HelloEjb,interface org.jboss.ejb3.JBossProxy)
然后编写客户端,编写的时候需要将jboss的client目录的jar加到build path
@BeforeClass
public static void setUpBeforeClass() throws Exception {
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
InitialContext ctx = new InitialContext(props);
setHelloEjb((HelloEjb)ctx.lookup("HelloEjbBean/remote"));
}
@Test
public final void testSay() {
assertEquals("HiEjb", getHelloEjb().say("HiEjb"))
}
}
发表于 Sun Functional 校园大使 [JavaEE] ( 六月 21, 2009 10:53 下午 ) Permalink | 评论[0]
