【问题标题】:Spring Entity Manager Factory using JNDI使用 JNDI 的 Spring 实体管理器工厂
【发布时间】:2014-03-19 00:11:46
【问题描述】:

我对如何在 spring-datasource.xml 中使用
获取实体管理器工厂感到困惑 我做了以下事情:

spring-datasource.xml 文件:

<tx:jta-transaction-manager id="transactionManager" />
<tx:annotation-driven mode="proxy"
transaction-manager="transactionManager" />

<jee:jndi-lookup id="entityManagerFactory" jndi-name="jdbc/mysqldatasource" />

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence"      
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
           http://java.sun.com/xml/ns/persistence 
           http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="ebankingUnit"
    transaction-type="JTA">
    <jta-data-source>jdbc/mysqldatasource</jta-data-source>
    <class>com.datamodel.Product</class>

    <properties>
        <property name="eclipselink.logging.level" value="INFO" />
        <property name="eclipselink.query-results-cache.expiry"
            value="5000" />
        <property name="eclipselink.ddl-generation" value="create-tables" />
        <property name="hibernate.hbm2ddl.auto" value="none" />
    </properties>
</persistence-unit>

但我越来越讨厌了

【问题讨论】:

    标签: spring jndi entitymanager jta


    【解决方案1】:

    您使用的是哪个版本的 Spring?在最新版本中,您甚至不需要 persistence.xml。

    这里是使用 Spring 3.x 的配置,用于 oracle。

        <tx:annotation-driven/>
    
    <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
    </bean>
    
    <!-- FactoryBean that creates the EntityManagerFactory -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                <property name="database" value="ORACLE" />
                <property name="showSql" value="false" />
            </bean>
        </property>
        <property name="packagesToScan" value="blah.com..domain" />
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
            </props>
        </property>
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    
    <bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/myoracledb}" />
    </bean>
    

    现在在你的 web.xml 中定义 myoracledb jndi 资源

          <Resource name="myoracledb" auth="Container"
             type="javax.sql.DataSource"
             driverClassName="oracle.jdbc.OracleDriver"
             maxActive="50" 
              url="your db url"
              username="dbuser" password="dbpwd" />
    

    问候

    【讨论】:

    • 您好,感谢您的帮助,但我想使用来自 weblogic 数据源和 JTA 的 jndi
    • 我认为这没什么区别,在 weblogic 中创建一个 Jndi 资源并在数据源中使用 jndi 名称引用。
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2021-07-12
    • 2018-05-27
    • 2019-05-25
    • 2015-06-18
    • 2013-11-07
    • 2010-11-21
    • 2012-03-14
    相关资源
    最近更新 更多