JBOSS SEAM 2.0.1 CR1 试用

时间:2021-01-16 19:59:35

因为初学,想通过一个例子尽快了解seam的大致开发过程,但是seam自己带的例子,配置麻烦(只想研究booking例子,但是其配置文件涉及了好几个其他配置文件,真是牵一发而动全身) ,后来下载Michael Yuan和Thomas Heute所著的JBoss Seam: Power and Flexibility Beyond Java EE 5.0所带的booking,内容一样,但是配置文件很干净。

   导入开发环境(Eclipse3.3 + JBOSSTools 2.0.0 CR1 + JBoss seam 2.0.1 CR1),通过调试跟踪,了解了下seam的基本工作过程。几点体会:

   1. seam是有状态的。通过SFSB,JSF,Hibernate配合工作。状态好象是保存在facesContext中。

    2. AOP编程?调试中发现很多的interceptor.( org.jboss.seam.ejb.SeamInterceptor)

   3.  表示层使用JSF, faces。 servlet 配置为.seam文件,faces为xhtml文件。jsf的taglib, <h: 表示html, <f:表示jsf/core, <s:表示seam。

             页面控件和EOS非常相似,

如输入框: <h:inputText id="username" value="#{identity.username}"  />  EOS的tag则是:      <html:text property="CUST/PHONE" ></html:text>。    这里的属性value和property可以相对应。

  上面的jsf标签中, jsf 的页面请求由seam进行变量解析,如identity. 请求调用的会话bean动作监听器方法,过程中首先会被seam拦截器截获(类似于Spring),进行out注入后,再执行会话bean动作监听器方法。

4. 导航文件navigation.xml可以可视化方式展示页面的流转。 如 /booking/resources/WEB-INF/navigation.xml

seam部署描述符文件component.xml,告知seam在JNDI中找到EJB组件。

web部署描述符文件web.xml配置seam和MyFaces.

JSF配置,faces-config.xml

5. 持久层使用Hibernate:/booking/resources/META-INF/persistence.xml中,             org.hibernate.ejb.HibernatePersistence。 使用EntityManager管理数据,没看到数据库连接和具体实现,只看到方法调用。

6. identity作为安全配置的角色,传递输入参数. 通过login.login进行认证。

       /booking/resources/WEB-INF/components.xml

       在resources/WEB-INF/pages.xml中做了页面访问配置。

 7. 会话Bean充当动作监听器,SLSB直接访问EntityManager,对传统J2EE的突破。

8. 常用的注解:

           EJB3: @stateless, @PersistenceContext, @Entity, @Table, @Id, @Local;

           Seam: @Name, @Scope, @In;

           Hibernate: @NotNull, @Length;

 总结: 对seam宣传的在“Web应用中集成业务流程”的特性还没有体验到。

补充:

9 关于BPM: component.xml: 过程定义process definition和页面流定义pageflow definition。

    9.1 关于页面流:使用jPDL定义了页面的流向,参数。配合action动作。

 

 10 seam的事件类型

             通过绑定了表达式的JSF EL方法映射到Seam组件去。

10.1 JSF事件:在JSF模板中定义;

<h:commandButton value="Click me!" action="#{helloWorld.sayHello}"/>


10.2 jBPM的转换事件:在jBPM过程定义或页面流定义中指定;

</start-page>


10.3 Seam页面动作:在我们渲染页面之前发生的事件。在 WEB-INF/pages.xml 中声明页面动作。
<pages>
    <page view-id="/hello.jsp" action="#{helloWorld.sayHello}"/>
</pages>


10.4 Seam组件驱动事件:

在 components.xml 里指定了事件监听器(观察者)。
<components>
    <event type="hello">
        <action execute="#{helloListener.sayHelloBack}"/>
        <action execute="#{logger.logHello}"/>
    </event>
</components>


10.5 Seam上下文事件:内置事件

 

       最后给出总体框图: 看看seam的地位和作用:

JBOSS SEAM 2.0.1 CR1 试用