EJB3.0介绍系列——session bean
在前面的文章——《J2EE整个结构分析》中,我已经和大家简单的说了一下一个项目开发时的整体结构,不知道朋友们是怎么看待这个问题的,有兴趣的朋友可以和我交流。接下来我要说的是在页面逻辑层面上的EJB3.0,现在的EJB3.0和过去EJB2.0比有了一些不同,使用起来更加简单方面了,上手也没有EJB2.0那么麻烦。使用过EJB2.0的朋友都知道,在EJB2.0中,相关配置文件就是一个很麻烦的事情,各种各样的xml文件,配置起来复杂也容器出错,这样是EJB2.0的使用者不多的原因之一,不是不想用,而是不好学。现在的EJB3.0技术已经相当成功的客服了这个问题,我们在部署的时候已经无需管理那些要我们烦心的xml配置文件,这在很大程度上也让开开发人员减轻了负担,同时降低了学习的难度。我们后面都是在EJB3.0的基础上进行介绍说明的。
在前文中,我们说到了EJB中三种的由来,他们的使用环境和使用目的(要是没看前面文章的朋友可以去看看)。看标题就知道了,这次我主要说的是其中的session beanSession bean是一种同步的服务机制,我举一个简单的例子来说明什么同步以及他和异步的区别。就拿我在51CTO发表的这篇文章来说,这篇文章存储在51CTO的数据库里面,您看到我的首页里有这个文章链接,那么您点击这个链接,您可能会等几秒中,等页面加载完毕后看到文章,那么这几秒钟是个延时,这几秒钟的操作是什么呢?网站的这个页面会告诉后台服务端,我要找“EJB3.0介绍系列——session bean”这个文章,然后在数据库检索,再将结果显示给您。这样,整个过程是一个及时的,您会坐在电脑前等待文章的加载,您马上就看到这个文章。那么这个后台服务就是同步服务,因为当我们调用这个服务的时候,这个服务及时给我们反映了这个查询结构,是检索到?还是没检索到?还是别的结果等等,总之,您会获得您点击这个操作的结果。异步服务我会在后面介绍driver manage bean的时候详细解释。
至于用session bean还是driver manage bean取决具体项目的服务设计。Session bean包含两种类型:stateless session beanstateful session bean。这两种类型的session bean有着各自的使用环境,我们举一个简单的示例来说明一下。
我在百度里面想查询有关十一国庆的消息,那么我查询就可以了,关键字是“十一国庆”,在这个场景中,服务器中发布的这个服务是处理这个操作的,他不知道谁要查,也不知道别的其他事情,他就知道查询。那么这个就是一个stateless session bean,因为这个服务不记录任何信息,只进行查询服务。
stateful session bean用在什么时候呢?比如说我们去ATM取钱,不可能说我们拿个卡,要多少取多少吧。要是也用stateless session bean的话,取钱服务不记录任何状态,也不知道谁的开,就知道出钱出钱,那么银行不就哭死了吗?所以说这个时候需要stateful session bean,他会在提供服务的时候进行一下记录,比如说我取钱时用的卡的一下基本信息等等。那么这些基本信息不是我每次需要提交的,而是stateful session bean记录的。
上面介绍了那么多,大家应该对session bean在为何使用上开始有一定的了解了。那么下面我就会针对一个session bean还给大家一个具体的实例,我们拿stateless session bean来做个实例。
首先我们看session bean所处位置图:
我看到,我们要做的这个session bean的实例位置位于是在entity bean层和service-side层之间。
再看下面的session bean组件里面的具体结构图:
我们看到我们的session bean结构是多么的简单,一个接口和一个实现类即可。后面Entity Bean使用Hibernate来实现的,不是这次的重点,现在我们只是知道这个实体类就可以了。
下面我来看下stateless session bean的实例代码:
HelloWorld对象代码:
package com.SessionBean;
public interface HelloWorld {
       public HelloEntityBean SayHello(String name);
}
HelloWorldBean对象代码:
package com. SessionBean;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import org.jboss.annotation.ejb.RemoteBinding;
@Stateless
@Remote ({HelloWorld.class})
@RemoteBinding (jndiBinding="HelloWorldBean/remote")
public class HelloWorldBean implements HelloWorld {
        public HelloEntityBean SayHello(String name){ 
// HelloEntityBeanHelloWorldEntity Bean他其中包括idnamedescription
              HelloEntityBean hebean = new HelloEntityBean();
              HelloEntityBean heb = hebean.Select(name);
              return “hello ”+ heb.getName() +” welcome to Stateless Session Bean!”;
        }
}
到此为止,一个和用户对话的Stateless Session Bean就算完成了,代码很简单。喜欢的朋友可以试试,不过要修改一下代码让实现的方法返回一个字符串就可以了。
后面我会接着说EJB3.0中带有HibernateEntity Bean、解释什么是异步以及介绍两种driver manage bean和他们的实例等内容。有兴趣的朋友联系我一起研究。

0

收藏

realzjy

79篇文章,57W+人气,1粉丝