`
happydouya
  • 浏览: 8769 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类

seam 项目启动时初始化数据库数据(非import.sql)

    博客分类:
  • Seam
阅读更多
实际需求:在项目启动时需要初始化一些数据库数据(非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();
}



分享到:
评论
2 楼 andyhan 2009-04-10  
标注上 @Transactional 注解再试试。
1 楼 cuixiufang 2009-04-03  
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>是有点很不爽,要是数据表数据少的话也没什么,但是项目中数据量大的话,就很不合适了,可以考虑从参照数据库用户下把表导过来,可以向这方面考虑下试试。

相关推荐

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    seam级连菜单20080610.rar

    "test.sql" 文件很可能是一个数据库脚本,通常用于创建测试数据或初始化数据库结构,与Seam级联菜单的实现有关。"f" 文件名不完整,可能是由于误操作或者输入错误,通常在压缩包中应该有更详细的文件名,可能是某个...

    JSF项目中seam的配置

    这个文件的作用是引导Seam在初始化时扫描并加载所有标记为Seam组件的对象,这些对象通常使用`@Name`注解进行标识。 3. **Seam监听器**:在`web.xml`中添加`SeamListener`。这个监听器会在容器加载应用程序时初始化...

    Seam-gen生成基础项目骨架

    Seam-gen 是一款用于快速生成基于 Seam 框架的基础项目结构的工具,它通过简单的命令行交互式过程,帮助开发者构建项目的雏形,并且能够根据数据库信息自动生成管理数据库的 CRUD(Create, Read, Update, Delete)...

    使用 Maven 管理 Seam 项目

    在Seam项目中,我们可能还需要配置Maven插件,以便于处理Seam特有的任务,比如生成JPA实体的元数据、处理JSF资源等。例如,我们可以使用`seam-gen`插件来快速创建Seam组件和JPA实体: ```xml &lt;groupId&gt;org....

    Seam项目源代码(基于JBoss和EJB3,JSF的项目源码)

    2. **配置文件**:如`pom.xml`(Maven项目配置)、`jboss-seam.properties`(Seam配置)、`faces-config.xml`(JSF配置)和`ejb-jar.xml`(EJB配置)等。 3. **测试代码**:可能包含单元测试和集成测试,帮助验证...

    JBoss Seam工程的创建

    其中,测试相关的配置(如import-test.sql)会在单元测试时导入HSQLDB数据库。开发环境的配置(myproject-dev-ds.xml、persistence-dev.xml、import-dev.sql)用于本地开发数据库,而生产环境的配置(myproject-prod...

    jboss-seam-2.1.1.GA.jar.zip

    3. **生命周期**:JSF有明确的请求处理生命周期,包括初始化、应用请求值、处理验证、更新模型值和应用视图等阶段。 4. **Facelets**:JSF 2.x引入Facelets作为默认的视图描述语言,提供更灵活的视图构造和模板重用...

    seam build.properties文件详解

    #Generated by seam setup #Mon Jun 08 21:07:28 CST 2009 #数据库密码 hibernate.connection.password=testSeamGen #工作目录 workspace.home=E\:/workspace_seam #实体存放路径 model.package=...

    接上篇(seam登录时的权限验证)之“seam基于数据库的权限验证”

    7. **最佳实践**:在实现基于数据库的权限验证时,应遵循一些最佳实践,如分离用户数据和权限数据,使用预定义的角色而不是为每个用户分配单独的权限,以及定期审查和更新权限设置以适应业务变化。 综上所述,Seam...

    seam2 in tomcat lib

    这包括设置`filter-class`为`org.jboss.seam.servlet.SeamFilter`,并配置`&lt;listener&gt;`来启动Seam的生命周期管理。 3. **数据库连接**:由于没有内置的EJB容器,你需要自己处理JNDI查找和数据库连接。这可能意味着...

    Jboss-seam reference2.1中文版

    2. **开始使用Seam**:这部分介绍了如何通过seam-gen工具和JBoss Tools快速初始化Seam项目。seam-gen提供了一套命令行工具,用于生成基本的Seam项目结构,而JBoss Tools是Eclipse的插件,为Seam开发提供了图形化的...

    seam 框架整合hibernate+jsf

    Hibernate是Java领域广泛使用的对象关系映射(ORM)工具,它允许开发者用Java对象来操作数据库,消除了传统SQL代码与Java代码之间的耦合。Seam通过提供对Hibernate的无缝集成,使得开发者可以在不脱离Seam上下文的...

    JBOSS SEAM组件中文手册

    Seam自动管理组件的生命周期,包括创建、初始化、销毁等过程。 2. **事件(Events)**: 事件模型是Seam的一大特色,允许组件之间通过发布和监听事件进行通信,增强了组件间的解耦合。 3. **注入(Injection)**: ...

    Seam_Java框架.doc

    Entity Bean对应数据库表,负责数据持久化,而Session Bean则处理业务逻辑、事务管理、页面交互及页面流程控制。这种设计大大减少了配置文件的数量,简化了项目的架构,使开发者能够专注于业务逻辑的实现,而不是...

    Manning.Seam.in.Action.Sep.2008.pdf

    每个组件都有其生命周期,Seam通过管理这些组件的创建、初始化、交互和销毁过程,确保了应用的一致性和可维护性。 ### 3. 绝对控制反转(Absolute Inversion of Control) 绝对控制反转是Seam提供的一个强大特性,...

    jsf+seam+jpa实例

    它允许开发者以面向对象的方式操作数据,而无需直接编写SQL语句。在本实例中,JPA将用于定义实体类,管理数据库的CRUD(Create, Read, Update, Delete)操作。 **实例核心流程** 1. **数据模型设计**:使用JPA定义...

    seam创建工程

    这篇博客文章“seam创建工程”很可能是指导读者如何在开发环境中设置和初始化一个Seam项目。 首先,创建Seam工程通常涉及以下步骤: 1. **环境准备**:确保你的开发环境中已经安装了Java JDK、Eclipse IDE(或其他...

    jboss seam 架设Eclipse 中常见的错误解决.doc

    在Eclipse中配置和运行Seam项目时,可能会遇到一些常见错误。本文将针对这些问题提供解决方案。 首先,我们讨论的是EditPlus软件中的问题。EditPlus是一款轻量级且功能强大的文本编辑器,深受程序员喜爱。当保存...

    Seam_Reference_Guide.pdf

    - **配置项目功能**:在创建项目时,用户可以选择不同的项目功能(Facets),例如支持JSF(JavaServer Faces)或EJB(Enterprise JavaBeans)。这些功能的选择会影响项目的结构和可用的技术栈。 - **配置Web模块设置...

Global site tag (gtag.js) - Google Analytics