- 浏览: 702561 次
- 性别:
- 来自: 北京
博客专栏
-
读金庸故事,品程序人生
浏览量:47708
文章分类
最新评论
-
hty881008:
LZ,你的json返回是怎么出来的,我的怎么是No messa ...
使用CXF暴露您的REST服务 -
jxFY:
赞
Apache的对象池化工具commons-pool -
wangyudong:
新版本的Wisdom RESTClient地址https:// ...
使用CXF暴露您的REST服务 -
wangyudong:
由CXF实现的微服务需要有比较好的工具去测试RESTful A ...
使用CXF暴露您的REST服务 -
spring_springdata:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
Maven3实战笔记01环境配置与使用入门
1. EJB的自我反省精神
只要是学Java的人,肯定都听过EJB。是的,在笔者看来,Java从初出茅庐到武林至尊,到被万人唾骂,直到虎落平阳,再到今天sun被Oracle收购。不得不说Java经历了它人生的大起大落,我们这些开发人员也随着他经历着各自的大起大落。对于现在的手机使用者来说Java对于他们来说就是手机游戏(JavaME),对开发人员来说最望而生畏的、最出名的、最受争议的、对哀其不幸也就是EJB了。笔者在学生时代就总听小飞侠(笔者的导师的外号)说着EJB的种种复杂、麻烦和他的种种抱怨。之后极力劝我们学习Spring和Hibernate。从那时起笔者就一直很好奇,为什么那么出名的技术让那么多人都嗤之以鼻?李刚的书里面阐述了中国软件开发人员对于EJB2的心态,其最关键的就是提升了每个人的学习成本、提升了企业实施人员的水平(本质就是会的人工资都超高,企业养不起)、提升了软件的运营成本(一套Weblogic一年好几万美元)、开发时候需要配置的文件相当的多,使得开发人员不胜其烦、很多企业用不到那么严谨的并发、多线程、事务控制等等,仅仅是一个小小的,在线使用人数不是很多的MIS系统而已(不用一把屠龙刀去杀一只小蚊子吧?)。最后.NET框架出现了,配合微软的、超级优秀的VSS,那几乎把很多开发人员都转向了.NET平台。以前笔者刚毕业的时候还总参与3个阵营(有时候还有PHP)的互相指责、诟骂、诋毁、抵触、挑衅………………现在想想真是:“很傻很天真。”
其实技术是为了解决实际需求应用的,哪种技术适合哪种需求,其实是实际情况决定的。比如Java组件虽然是跨越平台,但是搭建应用的时候确实显得比较重量级,不够敏捷。比如.NET组件虽然是很多,但是要做出一个比较商业级应用的,还是要自己手工开发、或者是包装现有组件,而且只能在Windows下面跑,至于全球有多少黑客觊觎windows平台,咱们就不用说了吧……。只能说各有各的优势、各有各的适用方向,不能绝对的同而化一,一概而论。呵呵~~~说多了,有点哲学的辩证法了。
之后EJB2看到了Spring+ORM(尤其是Hibernate)的优点,sun吸收了它的核心思想,再加上JDK1.5之后的注解特性,到今天就是我们看到的EJB3.0标准。可惜,笔者有点可惜的就是sun公司之前确实损失了一大批的开发用户,而且坚持开源的路线,直到今天被Oracle收购,确实有点可惜。但是EJB3的这种自我检讨的精神、兼收并蓄的气度(用李刚老师的话)着实值得作为我们做人的学习典范。希望它在Oracle的带领下能再创辉煌吧。
EJB3.0有以下一些规范
1:使用注解Annotation来设置部署描述信息
2:只需要提供远程Remote或者本地Local接口就可以
3:用JPA,也就是ORM思想取代了原有的实体Bean
它和全世界的JavaEE开发者说,它几乎抛弃了以前的标准,这确实需要莫大的勇气。
以下基本就是JavaEE5标准最基本的框架
1. EJB的分类
会话Bean(SessionBean):代表一个客户端调用的接口门面,客户端从获取会话Bean,到调用结束,叫做一次会话。它就好比Spring中的ServiceBean或者DAO。不过它和客户端耦合的仅仅只是一个接口。
消息驱动Bean(MessageDrivenBean):实际上就是一个JMS的异步消费者,他也可以向消息目的发消息。这次咱们暂且不讨论消息驱动Bean。
会话Bean比Spring中管理的POJO Bean功能更强,毕竟是依赖于商业的应用服务器啊。
1):大并发的线程安全
2):容器式、声明式事务管理
3):JAAS安全权限管理
4):SessionBean支持基于SOAP的Web Service,只需要极少的配置即可
2. 无状态的会话Bean和helloworld程序
无状态的会话Bean,顾名思义,无需维护与客户端之间的会话状态。所以通常该类没有实例变量,就算有也只能保证再一次会话中调用时才有效,调用结束了也就over了。
一般开发SessionBean需要遵循以下规范:
1):需要一个接口和一个实现类,这个和Spring的思想是一样的。
2):接口实现类不能是抽象类,可以是一个类的子类,当然可以在父类中就实现了接口定义的方法。
3):建议自己实现无参数构造函数,这样执行效率更好,当然就算没有提供,应用容器会为其自动提供一个无餐构造器。
4):方法名不要以ejb开头,有特殊含义
5):业务与方法无需再抛出RemoteException
下面看代码:
Hello接口
package ejb.sessionBean; import javax.ejb.Remote;
@Remote public interface Hello { public String hello(String name); } |
HelloEAOImpl实现类
package ejb.sessionBean.impl;
import javax.ejb.Stateless; import ejb.sessionBean.Hello;
@Stateless public class HelloEAOImpl implements Hello {
@Override public String hello(String name) { return "欢迎你:" + name; } } |
之后打包发布到JBoss中,打包细节稍后会说的。启动JBoss看到它的控制台信息如下:
21:45:55,296 INFO [SessionSpecContainer] Starting jboss.j2ee:jar=helloSessionBean.jar,name=HelloEAOImpl,service=EJB3 21:45:55,296 INFO [EJBContainer] STARTED EJB: ejb.sessionBean.impl.HelloEAOImpl ejbName: HelloEAOImpl 21:45:55,311 INFO [JndiSessionRegistrarBase] Binding the following Entries in Global JNDI:
HelloEAOImpl/remote - EJB3.x Default Remote Business Interface HelloEAOImpl/remote-ejb.sessionBean.Hello - EJB3.x Remote Business Interface |
就证明EJB发布成功了
之后还可以登录JBoss控制台界面查看EJB部署情况
注:helloSessionBean.jar是打包的名字。
下面在客户端建立一个测试代码如下:
import java.util.Properties; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import junit.framework.TestCase; import ejb.sessionBean.Hello;
public class TestSessionHelloWorld extends TestCase {
public Context init() { String init_factory = "org.jnp.interfaces.NamingContextFactory"; String serverURL = "jnp://127.0.0.1:1099"; Context context = null;
Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, init_factory);
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, serverURL); try { context = new InitialContext(properties); } catch (NamingException e) { // TODO Auto-generated catch block e.printStackTrace(); } return context; }
public void test01() throws NamingException { Context context = init(); Hello hello = (Hello) context .lookup("HelloEAOImpl/remote"); System.out.println(hello.hello("剑君十二恨")); } } |
运行junit单元测试,结果如下
欢迎你:剑君十二恨 |
证明客户端调到了远程服务器的Bean(原理是RMI)。导致现在客户端的调用好像就在本地调用似的。
发表评论
-
JavaEE5实战笔记05RedHat搭建JBoss、Oracle10g环境
2011-06-01 10:50 1584JavaEE5实战笔记在RedHat上搭建JBoss、Orac ... -
JavaEE5实战笔记02JPA持久层的一些问题
2011-05-30 14:48 16201. JPA关联实体的级联操作问题 在此次联系中 ... -
JavaEE5实战笔记01EJB环境搭建及异常解决
2011-05-30 14:43 50331. 说明 此实战笔记是为了之前的学习笔记做一个 ... -
Spring集成ActiveMQ配置
2011-03-21 20:58 279501. 集成环境 Spring采用2.5.6版本, ... -
JAVA的Mina框架传递对象——一劳永逸(转载)
2011-03-09 11:31 2699接触java的Mina框架已经有很多时间了,在网上也读过了很多 ... -
JavaEE5学习笔记12-JSF验证器使用总结
2011-03-09 00:01 19681. JSF验证器 说完转换器就该说说验证器了, ... -
JavaEE5学习笔记11-JSF转换器使用总结
2011-03-08 23:53 27211. JSF的转换器是在JSF生命周期的第2个阶段 ... -
JSF组件生命周期的讨论
2011-03-08 23:38 17331. JSF生命周期 下面我们来看看JSF组件的 ... -
JavaEE5学习笔记10-JSF基本UI控件使用
2011-03-08 23:34 36641. JSF也是JavaEE5的标准,感觉上sun ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(2)
2011-02-28 09:21 1549以上例子只是简单调用了WebService,参数是简单的Str ... -
JavaEE5学习笔记09-将EJB发布成WebService总结(1)
2011-02-28 09:19 41121. 将EJB发布成,或者说暴露成Web服务(也许 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(4)
2011-02-24 09:36 14931. 在JavaEE容器 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(3)
2011-02-24 09:35 12021. 测试代码 部署成功后,在另一个项目中建立测 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(2)
2011-02-24 09:33 1528下面来看针对此实体操作的sessionBean代码。 接口 ... -
JavaEE5学习笔记08-JPA与EJB集成总结(1)
2011-02-24 09:28 1752JPA是JavaEE5提出的一套标准接口,不同的应用服务器对其 ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----2
2011-02-21 15:56 1424除了activationConfig之外,如果使用其他Java ... -
JavaEE5学习笔记06-EJB之消息驱动Bean(MDB)总结----1
2011-02-21 15:55 19621. 功能介绍 在EJB的分类中还有一个就是消息驱 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----7
2011-02-21 09:49 13401. EJB的容器式依 ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----6
2011-02-21 09:48 1550BMT就是Bean自己管理事务,这种方式就是以硬编码的方式在B ... -
JavaEE5学习笔记05-EJB之会话Bean(sessionBean)总结-----5
2011-02-21 09:46 19031. 有状态的会话Bean的本地、远程调用 其实这 ...
相关推荐
### JavaEE5学习笔记07-Web层与EJB集成总结 #### 一、JavaEE5框架中的Web层与EJB集成概述 在JavaEE5(即Java Platform, Enterprise Edition 5)中,Web层与EJB(Enterprise JavaBeans)的集成是构建企业级应用的...
在JavaEE环境中,RMI经常与EJB结合使用,尤其是无状态SessionBean,因为它们不需要维持客户端的会话状态,适合RMI的轻量级通信模式。 当一个EJB被标记为远程接口时,它可以通过RMI在不同 JVM(Java Virtual ...
"javaee思维导图版笔记-吉林大学" 本笔记主要涵盖了Java EE的基础知识,包括Servlet、JSP、JNDI、JPA等方面的内容。 一、Servlet概述 Servlet是Java EE中的一种服务器端组件,用于处理HTTP请求并返回响应。...
- **会话Bean**:在整个用户会话期间保持,用于跟踪用户状态。 - **应用Bean**:在整个应用程序范围内共享,用于全局数据。 **自定义标签(Custom Tags)**提供了一种扩展JSP语法的方式,通过定义标记库描述符(TLD...
包括会话Bean(Session Beans)负责业务逻辑,实体Bean(Entity Beans)作为持久化对象,以及消息驱动Bean(Message-Driven Beans)处理JMS消息。 6. **JMS (Java Message Service)**:JMS允许应用程序之间异步通信...
Java/JavaEE 学习笔记 作者在杰普学习时的学习笔记,是J2ee初学者必备手册,是大家学习J2EE开发的很好的参考笔记。 Java/JavaEE 学习笔记 内容目录: Unix 学习笔记..........7 一、Unix前言............7 二、...
EJB是JavaEE的核心,提供了三种类型的Bean:会话Bean(Session Beans)处理业务逻辑,实体Bean(Entity Beans)代表持久化数据,消息驱动Bean(Message-Driven Beans)处理消息队列。Spring框架则以其依赖注入和面向...
分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),分别处理业务逻辑、持久化数据和消息通信。 5. **JMS(Java Message Service)**:JMS是JavaEE的消息中间件接口...
第四章 Session Bean(会话Bean).....322 第五章 消息驱动Bean(MDB).........327 EJB3.0.....329 第一章 EJB3.0 Foundation...............329 第二章 Session Bean........................330 第三章 消息驱动Bean...
- **EJB(Enterprise JavaBeans)**:分为会话Bean(Session Beans)、实体Bean(Entity Beans)和消息驱动Bean(Message-driven Beans),用于实现业务逻辑和持久化数据。 - **JPA(Java Persistence API)与ORM*...
EJB是Java企业级应用的组件模型,分为会话bean、实体bean和消息驱动bean。它们提供了一种在分布式环境中构建可复用的、事务处理的服务器端组件的方法。虽然现代JavaEE应用更多采用轻量级框架如Spring,但了解EJB的...
EJB分为三种类型:会话bean(Session Beans)处理客户端请求,实体bean(Entity Beans)代表持久化的业务对象,消息驱动bean(Message-Driven Beans)用于处理JMS消息。 4. **JMS**:Java Message Service允许在...