开发Seam应用,需要了解JSF生命周期、Seam生命周期和它(Seam)通过phase listener在JSF生命周期上扩展了哪些东西。
(这里省略一些无关紧要的...)
“web应用,启动代码可以写在ServletContextListener里。这些代码、是一系列的事件监听器,在应用初始化之后(在处理请求之前)和销毁之前被调用”
Seam 2.1.2的org.jboss.seam.servlet.SeamListener代码如下:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.jboss.seam.Seam;
import org.jboss.seam.contexts.ServletLifecycle;
import org.jboss.seam.init.Initialization;
import org.jboss.seam.jmx.JBossClusterMonitor;
import org.jboss.seam.log.LogProvider;
import org.jboss.seam.log.Logging;
/**
* Drives certain Seam functionality such as initialization and cleanup
* of application and session contexts from the web application lifecycle.
*
* @author Gavin King
*/
public class SeamListener implements ServletContextListener, HttpSessionListener
{
private static final LogProvider log = Logging.getLogProvider(ServletContextListener.class);
public void contextInitialized(ServletContextEvent event)
{
log.info( "Welcome to Seam " + Seam.getVersion() );
event.getServletContext().setAttribute( Seam.VERSION, Seam.getVersion() );
ServletLifecycle.beginApplication( event.getServletContext() );
new Initialization( event.getServletContext() ).create().init();
}
public void contextDestroyed(ServletContextEvent event)
{
ServletLifecycle.endApplication();
}
public void sessionCreated(HttpSessionEvent event)
{
ServletLifecycle.beginSession( event.getSession() );
}
public void sessionDestroyed(HttpSessionEvent event)
{
JBossClusterMonitor monitor = JBossClusterMonitor.getInstance(event.getSession().getServletContext());
if (monitor != null && monitor.failover())
{
// If application is unfarmed or all nodes shutdown simultaneously, cluster cache may still fail to retrieve SFSBs to destroy
log.debug("Detected fail-over, not destroying session context");
}
else
{
ServletLifecycle.endSession( event.getSession() );
}
}
}
SeamListener实现了ServletContextListener接口.
ServletContextListener参考:
http://java.sun.com/javaee/5/docs/api/javax/servlet/ServletContextListener.html
所以你只需要实现ServletContextListener并把作如下配置:
<listener>
<listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
</listener>
当应用程序初始化时,contextInitialized()方法会被servlet容器调用,这就是seam如何做到,每次当你部署seam应用到servlet或JEE服务器的时候启动。
下面是一篇相关的关于JSF生命周期和phase listener的实现的文章(高度推荐)。
http://balusc.blogspot.com/2006/09/debug-jsf-lifecycle.html
分享到:
相关推荐
#### 三、使用Seam-gen快速启动 - **准备活动**:设置开发环境。 - **建立一个新的Eclipse项目**:通过 Eclipse 创建 SEAM 项目。 - **创建新动作**:添加新的业务逻辑。 - **创建有动作的表单**:实现表单验证和...
然后,启动 JBoss 服务器,通过 http://localhost:8080/seam-booking 访问示例应用。 创建 Seam 工程时,确保 Eclipse 已切换到 Seam 视图模式。在工程视图中右键点击,选择 New -> Project,然后在列表中找到 Seam...
这包括设置`filter-class`为`org.jboss.seam.servlet.SeamFilter`,并配置`<listener>`来启动Seam的生命周期管理。 3. **数据库连接**:由于没有内置的EJB容器,你需要自己处理JNDI查找和数据库连接。这可能意味着...
命令行版本基于 Ant,生成的项目在任何环境下都可以启动。在开始使用之前,确保已经安装了 Seam 工具包,其中包含了 seam 和 seam.bat 脚本,分别适用于 Linux/Unix 和 Windows 系统。要查看 Seam-gen 的帮助信息,...
在Seam中启动Hibernate,通常需要在seam.properties或相关的配置文件中设置Hibernate连接参数,以及配置Hibernate SessionFactory。 #### 1.4.2. Bootstrap JPA in Seam 配置JPA时,需在persistence.xml文件中定义...
### JBoss Seam 2.01GA REF DOC #### 引言:JBoss Seam概览与功能介绍 JBoss Seam 是一个为简化企业级 Java 应用开发而设计的框架。它结合了 JavaServer Faces (JSF)、Java Persistence API (JPA) 和 Java ...
这是Seam启动的基础,监听器会在JSF的生命周期中插入Seam特有的行为,比如对话管理。Seam通过这个监听器能够增强JSF的各个阶段,并引入CONVERSATION生命周期,这是Seam的一个核心特性。 ```xml ...
源码可能展示了如何启动、管理和结束对话,以及如何在对话中保存和管理状态。 10. **component-fundamentals**:组件基础部分可能涵盖了Seam组件的创建、生命周期管理、依赖注入等核心概念。Seam组件可以是简单的...
1. **安装与配置**:了解如何下载、安装和配置JBoss服务器,包括设置环境变量,启动和停止服务器等基本操作。 2. **部署应用**:学习如何将Java EE应用部署到JBoss服务器上,包括WAR和EAR文件的部署方式。 3. **...
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
### 如何部署Seam的例子程序 #### 一、前言 Seam是一个强大的JavaEE框架,它简化了企业级应用的开发过程。Seam自带了一系列示例程序来帮助开发者更好地理解其特性和功能。通常情况下,这些示例是通过集成开发环境...
这段代码表示此组件在应用启动时需要依赖`org.jboss.seam.bpm.jbpm`。 #### @Install `@Install`注解用于控制组件是否自动安装以及安装顺序。例如: ```java @Install(false) public class NonInstalledComponent...
7. **测试和调试**:确保所有组件都能正常启动并协同工作,进行单元测试和功能测试。 这个配置过程可能因具体需求和项目结构有所不同,但以上步骤提供了一个基本的指导。在实际开发中,还可能需要考虑其他因素,如...
##### 3.1 使用Scaffolding快速启动 - **Scaffolding**是Seam3提供的一个快速开发工具,可以帮助开发者快速生成基本的Web应用骨架代码。 #### 四、插件开发 ##### 4.1 引用Forge API - **Forge**是一个用于Java EE...
”级别的示例,通常用于展示如何在Seam环境中启动一个简单的交互。Seam通过其事件模型和组件注入机制使得在应用中添加新的功能变得简单。`sayHello`可能是通过一个Seam组件实现,当触发某个事件(例如页面加载或按钮...
- **部署**:将生成的`.ear`文件放置在JBoss AS实例的`server/default/deploy`目录下,启动服务器即可访问应用。 - **访问URL**:通过`http://localhost:8080/helloworld/`访问应用。 #### 九、总结 通过这个简单...
8. **启动和测试**:启动JBoss AS,访问应用,进行功能测试和性能测试,确保所有功能正常运行。 通过深入理解并实践JBoss Seam,开发者可以创建出高效、灵活且易于维护的企业级应用程序。其丰富的特性和强大的集成...
- 定时器可以在应用程序启动时运行,或者在满足特定条件时触发,例如在用户会话结束时清理资源。 2. **配置定时器**: - 在Seam配置文件(如`seam.properties`)中,你可以配置全局定时器,设置调度频率和目标...