实际需求:在项目启动时需要初始化一些数据库数据(非import.sql),或执行其他数据库操作(要执行import.sql需设置<property name="hibernate.hbm2ddl.auto" value="create-drop"/>或create)
思路1:Seam提供了@Startup注解,可以指定某个Application Scope(或Session Scope)的组件在初始化时立即启动:
@Name("intiDate")
@Scope(ScopeType.APPLICATION)
public class InitDate {
public InitDate(){
}
@Create
public void init(){
// Do your initialization here
...
}
}
上述方法中的问题:数据库事务不提交,手动控制事务,报错:(未解决)
java.lang.IllegalStateException: JTA EntityManager cannot access a transactions
(类似问题的贴子http://forum.hibernate.org/viewtopic.php?p=2339865&sid=d981bb47fc5e1c82fdd735b4cb863e76)
思路2:Seam定义了许多内置事件,应用程序可以用它们来进行特殊类型的框架集成,其中
org.jboss.seam.postInitialization — 当Seam被初始化并启动所有组件时被调用:
@Name("observeInitialization")
public class ObserveInitialization {
@In EntityManager entityManager;
@Observer("org.jboss.seam.postInitialization")
public void observe() {
// Do your initialization here
entityManager.persist(xxx);
}
}
问题:同思路1,事务不提交
解决方法:用EJB
@Stateless
@Name("intiDate")
public class InitDate implements InitDateLocal{
@In
private EntityManager entityManager;
public InitDate(){
}
@Observer("org.jboss.seam.postInitialization")
public void init(){
Role role = new Role();
role.setId(1l);
role.setName("Test");
role.setDescription("Test");
entityManager.persist(role);
}
}
@Local
public interface InitDateLocal {
public void init();
}
分享到:
相关推荐
Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................
"test.sql" 文件很可能是一个数据库脚本,通常用于创建测试数据或初始化数据库结构,与Seam级联菜单的实现有关。"f" 文件名不完整,可能是由于误操作或者输入错误,通常在压缩包中应该有更详细的文件名,可能是某个...
这个文件的作用是引导Seam在初始化时扫描并加载所有标记为Seam组件的对象,这些对象通常使用`@Name`注解进行标识。 3. **Seam监听器**:在`web.xml`中添加`SeamListener`。这个监听器会在容器加载应用程序时初始化...
Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...
在Seam项目中,我们可能还需要配置Maven插件,以便于处理Seam特有的任务,比如生成JPA实体的元数据、处理JSF资源等。例如,我们可以使用`seam-gen`插件来快速创建Seam组件和JPA实体: ```xml <groupId>org....
2. **配置文件**:如`pom.xml`(Maven项目配置)、`jboss-seam.properties`(Seam配置)、`faces-config.xml`(JSF配置)和`ejb-jar.xml`(EJB配置)等。 3. **测试代码**:可能包含单元测试和集成测试,帮助验证...
其中,测试相关的配置(如import-test.sql)会在单元测试时导入HSQLDB数据库。开发环境的配置(myproject-dev-ds.xml、persistence-dev.xml、import-dev.sql)用于本地开发数据库,而生产环境的配置(myproject-prod...
3. **生命周期**:JSF有明确的请求处理生命周期,包括初始化、应用请求值、处理验证、更新模型值和应用视图等阶段。 4. **Facelets**:JSF 2.x引入Facelets作为默认的视图描述语言,提供更灵活的视图构造和模板重用...
#Generated by seam setup #Mon Jun 08 21:07:28 CST 2009 #数据库密码 hibernate.connection.password=testSeamGen #工作目录 workspace.home=E\:/workspace_seam #实体存放路径 model.package=...
7. **最佳实践**:在实现基于数据库的权限验证时,应遵循一些最佳实践,如分离用户数据和权限数据,使用预定义的角色而不是为每个用户分配单独的权限,以及定期审查和更新权限设置以适应业务变化。 综上所述,Seam...
这包括设置`filter-class`为`org.jboss.seam.servlet.SeamFilter`,并配置`<listener>`来启动Seam的生命周期管理。 3. **数据库连接**:由于没有内置的EJB容器,你需要自己处理JNDI查找和数据库连接。这可能意味着...
2. **开始使用Seam**:这部分介绍了如何通过seam-gen工具和JBoss Tools快速初始化Seam项目。seam-gen提供了一套命令行工具,用于生成基本的Seam项目结构,而JBoss Tools是Eclipse的插件,为Seam开发提供了图形化的...
Hibernate是Java领域广泛使用的对象关系映射(ORM)工具,它允许开发者用Java对象来操作数据库,消除了传统SQL代码与Java代码之间的耦合。Seam通过提供对Hibernate的无缝集成,使得开发者可以在不脱离Seam上下文的...
Seam自动管理组件的生命周期,包括创建、初始化、销毁等过程。 2. **事件(Events)**: 事件模型是Seam的一大特色,允许组件之间通过发布和监听事件进行通信,增强了组件间的解耦合。 3. **注入(Injection)**: ...
Entity Bean对应数据库表,负责数据持久化,而Session Bean则处理业务逻辑、事务管理、页面交互及页面流程控制。这种设计大大减少了配置文件的数量,简化了项目的架构,使开发者能够专注于业务逻辑的实现,而不是...
每个组件都有其生命周期,Seam通过管理这些组件的创建、初始化、交互和销毁过程,确保了应用的一致性和可维护性。 ### 3. 绝对控制反转(Absolute Inversion of Control) 绝对控制反转是Seam提供的一个强大特性,...
它允许开发者以面向对象的方式操作数据,而无需直接编写SQL语句。在本实例中,JPA将用于定义实体类,管理数据库的CRUD(Create, Read, Update, Delete)操作。 **实例核心流程** 1. **数据模型设计**:使用JPA定义...
这篇博客文章“seam创建工程”很可能是指导读者如何在开发环境中设置和初始化一个Seam项目。 首先,创建Seam工程通常涉及以下步骤: 1. **环境准备**:确保你的开发环境中已经安装了Java JDK、Eclipse IDE(或其他...
在Eclipse中配置和运行Seam项目时,可能会遇到一些常见错误。本文将针对这些问题提供解决方案。 首先,我们讨论的是EditPlus软件中的问题。EditPlus是一款轻量级且功能强大的文本编辑器,深受程序员喜爱。当保存...
- **配置项目功能**:在创建项目时,用户可以选择不同的项目功能(Facets),例如支持JSF(JavaServer Faces)或EJB(Enterprise JavaBeans)。这些功能的选择会影响项目的结构和可用的技术栈。 - **配置Web模块设置...