`
nihongye
  • 浏览: 101758 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

使用spring集成ejb3 persistence实现,不需要在persistence.xml指定class的方法

阅读更多
前提:
     1.使用LocalContainerEntityManagerFactoryBean
     2.可能存在多个persistence.xml,比如5个以上,每个persistence.xml定义的class不同
想一下就能切换好实现:

entityManagerFactory的定义放在一个文件就叫ormContext.xml吧,包含下面内容
  配置一:
  
 
    <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="persistenceUnitManager" ref="persistenceUnitManager"/>
        <property name="dataSource" ref="dataSource"/>
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.RedSoftJpaVendorAdapter">
            </bean>
        </property>
    </bean>

    <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager">
        <property name="persistenceXmlLocations">
            <list>
                <value>classpath*:/redsoft_jpa_persistence.xml</value>
            </list>
        </property>
    </bean>


使用ormContext.xml的配置文件如下:

<import resource="classpath*:/ormContext.xml"/>

    <bean id="entityClasses" class="com.abest.util.PersistenceClassesConfigProcessor">
        <property name="entityClassNames">
            <list>
                <value>com.abest.common.dao.TestBean</value>
                <value>com.abest.uwin.baseinfo.domain.Region</value>
                <value>com.abest.uwin.baseinfo.domain.Brand</value>
                <value>com.abest.uwin.baseinfo.domain.MeasureUnit</value>
                <value>com.abest.uwin.baseinfo.domain.ProductionFactory</value>
                <value>com.abest.uwin.baseinfo.domain.MaterialType</value>
            </list>
        </property>
    </bean>


PersistenceClassesConfigProcessor的实现:
public class PersistenceClassesConfigProcessor extends InstantiationAwareBeanPostProcessorAdapter {
    private static final String PERSISTENCE_UNIT_MANAGER = "persistenceUnitManager";
    String beanNameOfpersistenceUnitManager = PERSISTENCE_UNIT_MANAGER;
    private String[] entityClassNames;


    public PersistenceClassesConfigProcessor() {
    }



    public Object postProcessAfterInitialization(Object object, String beanName) throws BeansException {
        if(beanName.equals(beanNameOfpersistenceUnitManager)
                && object instanceof PersistenceUnitManager)
        {
            PersistenceUnitManager unitManager = (PersistenceUnitManager) object;
            PersistenceUnitInfo unitInfo = unitManager.obtainDefaultPersistenceUnitInfo();
            for (String entityClassName : entityClassNames) {
                unitInfo.getManagedClassNames().add(entityClassName);
            }
        }
        return object;
    }


    public void setEntityClassNames(String[] entityClassNames) {
        this.entityClassNames = entityClassNames;
    }


    public void setBeanNameOfpersistenceUnitManager(String beanNameOfpersistenceUnitManager) {
        this.beanNameOfpersistenceUnitManager = beanNameOfpersistenceUnitManager;
    }
}

persistence.xml就不需要再指定class了,而可以只修改配置一一处地方来切换jpa的实现。
朋友问我为什么不在一个persistence.xml定义所有需要持久化的类呢?我想想我的确有点没事找事干了.

分享到:
评论
2 楼 s5kk 2007-04-12  
在把openjpa部署到weblogic10上时,也遇到不同jpa之间的配置切换。
后来找到个简单的方法,就是写个 persistenceUnitPostProcessor.
同楼主的方法一样,只需在applicationContext.xml中指定ManagedClasses,不再需要persistence.xml。

1 楼 zyl 2007-03-02  
跟你一样的想法的人,大有人在,有时候为了减少配置文件的数量,不得已直接使用代码进行配置,或者集中一种地方进行配置。避免有时候遗忘了哪个文件忘了改。

相关推荐

    ajax、spring、ejb试题

    16. EJB3.0 中 Entity Bean 的组成可以包括 Primary key class、Local home interface、Local interface、ejb-jar.xml 和 Bean class。 17. Session Bean 按是否跟踪客户状态分为 Stateless Session Bean 和 ...

    spring 使用 Jpa的笔记

    为了使用JPA,需要在项目的`src/main/resources/META-INF`目录下创建`persistence.xml`文件,该文件定义了持久性单元(Persistence Unit)的基本配置。 ```xml &lt;persistence xmlns=...

    框架 Spring.pdf

    在Spring出现之前,企业级Java应用通常使用EJB框架进行开发。然而,EJB框架存在以下不足: - **EJB过于臃肿**:特别是Entity EJB无法脱离容器运行。 - **企业级服务难以使用**:例如事务管理、安全性等功能不够直观...

    JavaEE 第8次

    * 简单易用,集成方便:JPA 提供了简洁的 API,易于使用和集成。 * 强大的查询能力:JPA 提供了强大的查询能力,支持复杂的查询操作。 * 支持面向对象的高级特征:JPA 支持面向对象的高级特征,例如继承、多态等。 ...

    基于注解的Spring MVC+Hibernate简单入门

    - `ejb3-persistence.jar` - `hibernate-annotations.jar` - `hibernate-commons-annotations.jar` - `hibernate-entitymanager.jar` - `hibernate-validator.jar` - `hibernate3.jar` - `jaas.jar` - `javassist....

    ssh注解整合

    - 引入`hibernate-annotations-3.4.0.GA.zip`中的`hibernate-annotations.jar`、`hibernate-commons-annotations.jar`和`ejb3-persistence.jar`。 3. **实体类开发**:以下是一个简单的实体类User示例代码: ```...

    JAVAJPAJPA学习手册.doc

    由于其良好的兼容性和开放性,JPA得到了Spring、EJB3.0等开发团队的支持,这也预示着在未来几年内,JPA有望成为ORM领域内的主导标准之一。 #### 二、JPA的核心技术 JPA的核心技术主要包括三个方面: 1. **ORM映射...

    SSH配置图解

    1. 添加Spring的相关库:`spring.jar` 和 `struts2-spring-plugin-2.1.6.jar`,以实现Struts2与Spring的集成。 2. 使用IDE(如MyEclipse)创建Spring配置文件`applicationContext.xml`。你可以通过右击项目 -&gt; ...

    EJB注解说明

    在EJB 3中,这些注解主要定义在`javax.persistence.*`包中,与JDK 5.0兼容,因此大多数现代IDE如Eclipse、IntelliJ IDEA和Netbeans都支持注解的自动补全功能。 **实体Bean声明**: 使用`@Entity`注解标记一个类为...

    EJB备忘(整理)

    3. 配置部署描述符ejb-jar.xml(通常是自动完成的,但在某些情况下需要手动配置): ```xml &lt;ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.2"&gt; &lt;ejb-name&gt;MySessionBean&lt;/ejb-name&gt; ...

    spring与jpa结合

    在开始学习如何将Spring与JPA结合使用之前,我们需要做一些准备工作。这些准备主要包括: 1. **环境搭建**:确保安装了Java环境,同时还需要安装IDE(如Eclipse)、数据库系统(如DB2 Express-C)等。 2. **...

    JPA整理文档

    1. **配置`persistence.xml`文件**:该文件通常位于项目的`META-INF`目录下,用于指定持久化单元的信息,如使用的ORM产品、实体类路径等。 2. **创建实体类**:使用JPA注解(如`@Entity`、`@Table`等)来描述实体类...

    struts2.1.8 + spring2.5.6 + hibernate3.3.2整合

    - `ejb3-persistence.jar`: EJB3持久化支持。 - `hibernate-annotations.jar`: Hibernate注解支持。 - `hibernate-commons-annotations.jar`: Hibernate通用注解支持。 - `hibernate-entitymanager.jar`: Hibernate...

    Spring and iBATIS

    本文旨在介绍如何在Spring框架中集成使用iBATIS数据库层。数据库编程涉及到数据库连接、连接池管理、SQL语句执行、输入输出处理以及事务管理等多个方面。Java的JDBC API尽管功能强大,但在实际应用中显得较为底层且...

    xdoclet , lib

    在EJB项目中,XDoclet可以生成ejb-jar.xml、sun-ejb-jar.xml、home接口、remote接口以及实体Bean的ejb-class.java等文件。开发者只需要在源代码中添加适当的注释,XDoclet就会自动处理这些细节。 ### Hibernate ...

    jpa描叙样板

    &lt;provider&gt;org.hibernate.ejb.HibernatePersistence &lt;class&gt;footmark.springdata.jpa.domain.UserInfo&lt;/class&gt; &lt;class&gt;footmark.springdata.jpa.domain.AccountInfo&lt;/class&gt; &lt;property name="hibernate....

    基于annotation 的ssh整合(1)

    为了进行Hibernate注解开发,除了上述jar包,还需要引入hibernate-annotations.jar、hibernate-commons-annotations.jar和ejb3-persistence.jar。现在,我们可以开始编写实体类了。例如,创建一个名为User的实体类,...

    EJB的详细介绍

    【EJB 简介】 EJB,全称 Enterprise JavaBeans,是由Sun...然而,现代框架如Spring的出现,也给开发者提供了更多选择,EJB在某些场景下可能不再是首选,但其设计理念和技术积累仍对Java企业应用的发展产生了深远影响。

Global site tag (gtag.js) - Google Analytics