我正在使用 Glassfish 应用程序服务器并尝试将我的 spring-hibernate Web 应用程序连接到我的数据库,我有以下配置:
在 Glassfish 中,我添加了一个 jdbc 连接并向数据库发送成功的 ping。
我还添加了一个带有 jndi 名称的 JDBC 资源(在 glassfish 中):jdbc/myResource。此资源位于我创建和测试的连接池下(在步骤 1 中)。
我的 EntityManaget 用 @PersistenceContext 注释:
@PersistenceContext(unitName = "myPU")
protected EntityManager entityManager;
在 \src\main\resources\META-INF\ 我创建了我的 persistence.xml 文件:
<persistence-unit name="myPU">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>jdbc/myResource</jta-data-source>
<properties>
<!-- Glassfish transaction manager lookup -->
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.SunONETransactionManagerLookup" />
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect"></property>
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.default_schema" value="PUBLIC" />
<property name="hibernate.format_sql" value="true" />
<!-- Validates the existing schema with the current entities configuration -->
<property name="hibernate.hbm2ddl.auto" value="validate" />
</properties>
</persistence-unit>
这就是我的 applicationContext 的样子:
bean id="txManager"
class="org.springframework.orm.hibernate4.HibernateTransactionManager">
</bean>
<tx:annotation-driven transaction-manager="txManager" />
<jee:jndi-lookup id="emf" jndi-name="persistence/myPU" />
<!-- In order to enable EntityManager injection -->
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor">
<property name="persistenceUnits">
<map>
<entry key="myPU" value="persistence/myPU" />
</map>
</property>
</bean>
在我的 web.xml 中,我有:
<persistence-unit-ref>
<persistence-unit-ref-name>persistence/myPU</persistence-unit-ref-name>
<persistence-unit-name>myPU</persistence-unit-name>
当我发布时,我不断收到:
没有定义名为“myPU”的 bean。有关详细信息,请参阅 server.log。
为什么要寻找作为 bean 的持久性单元?
任何想法我做错了什么?
提前致谢