目前我正在使用Spring设置。我的目标是使用JPA使用它的JNDI名称访问Websphere数据源。我正在使用Spring Data JPA让我的生活更轻松,并通过一些教程来获得基本的想法。
坏事:没有人在谈论我的JPA szenario的Spring配置+之前从未使用过JPA / JDBC。 所以我希望你能在这里帮助我。我有2个配置文件:
applicationContext.xml中
<bean id="txManager"
class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<bean id="eManager" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean"></bean>
由于我在我的代码中使用@Transactual注释,我正在使用txManager的注释驱动标记。我只是不确定我应该为txManager配置什么以及sessionFactory标签正在做什么。是否有任何支持XML标签的文档?我错过了szenario的重要标签吗?
eManager相同 - 不确定这是否正确。
的persistence.xml
<persistence version="1.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_1_0.xsd">
<persistence-unit name="spring-jpa">
<jta-data-source>jdbc/myJNDI</jta-data-source>
</persistence-unit>
</persistence>
这里也是一样:不知道我在做什么。我知道我需要一个持久性单元/提供者。我知道有很多人正在使用hibernate,但是如果可能的话,我希望保持原生并使用纯JavaEE / Spring。 我只是不确定如何配置。 目前我的项目正在崩溃,告诉我:“JPA PersistenceProvider返回null”
答案 0 :(得分:4)
最好的方法是通过Spring的JNDI支持从JNDI获取EntityManagerFactory
:
<jee:jndi-lookup id="entityManagerFactory" jndi-name="persistence/myPersistenceUnit" />
<jpa:repositories base-package="com.acme.repositories" />
<tx:jta-transactionManager />
这将导致从应用程序服务器使用事务管理器。您还可以尝试设置JpaTransactionManager
并将从JNDI获得的EntityManagerFactory
连接到其中。如果只通过<jee:jndi-lookup />
命名空间元素查找数据源并按照Spring Data JPA参考文档中的其他配置说明进行操作,则可以将更多配置提取到Spring配置文件中。然而,如果您决定使用容器资源,通常最好使用您实际可以获得的容器资源。
答案 1 :(得分:3)
我刚刚开始使用Spring,jpa mysql等...我可以帮助你。 我将向您展示我对配置的了解方式。
我正在使用hibernate作为我的数据库连接,我从来没有这样做,没有那么没有我的帮助:)
我的配置:
弹簧config.xml中:
<context:component-scan base-package="com.MYPACKAGE"/>
<!-- To find all your controllers -->
<tx:annotation-driven/>
<!-- This will pickup all your @Transactional annotations-->
<import resource="../database/DataSource.xml"/>
<import resource="../database/Hibernate.xml"/>
<!-- These are my database config files-->
Datasource.xml:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/DATABASENAME"/>
<property name="username" value="USERNAME"/>
<property name="password" value="PASSWORD"/>
</bean>
Hibernate.xml:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="false"/>
<property name="generateDdl" value="true"/>
<property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect"/>
</bean>
</property>
</bean>
我遗漏了您需要包含在.xml文件顶部的标准xml文本,但我相信您可以自己解决这个问题;)
此设置适用于我,我希望它可以帮助你! 如果您对此帖有任何疑问,请告诉我们!
祝你好运!答案 2 :(得分:2)
对于那些使用JBoss的人来说,可以在persistence.xml属性中设置jndi名称,如下所示:
<persistence-unit name="punit" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:/myDS/jta-data-source>
<class>com.company.model.Document</class>
<class>com.company.model.DocumentIndividual</class>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create" />
<!-- <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/> -->
<property name="javax.persistence.logging.level" value="INFO" />
<property name="hibernate.show_sql" value="true" />
<property name="jboss.entity.manager.jndi.name" value="java:/my_em"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/my_emf"/>
</properties>
</persistence-unit>
如here第4.4.2节
中所述