我在 StackOverflow 中检查了很多以前的问题,但它们都没有解决我的问题。
我有一个部署在 Glassfish 上的 Spring + JSF + JPA (EclipseLink) 应用程序,现在我希望我的应用程序服务器管理与数据库 (PostgreSQL) 的连接。在管理面板中,我设置了 JDBC 连接池以及 JDBC 资源,并且能够从 Glassfish 管理面板中 ping 我的数据库。但是,我不知道如何正确配置我的应用程序以使用此新配置。我的 applicationContext 应该是什么样子?
(在 gerrytan 的回答和我在创建 EntityManagerFactory 时阅读 Exception - Lookup failed for 'persistence/myPU' in SerialContext之后编辑):
我的 persistence.xml 看起来像这样:
<persistence-unit name="persistenceUnit">
<jta-data-source>jdbc/prawalewa</jta-data-source>
<class>com.blogspot.prawalewa.model.AdditionalInfoEntity</class>
<class>com.blogspot.prawalewa.model.ArticleEntity</class>
<class>com.blogspot.prawalewa.model.ArticleFrameEntity</class>
<class>com.blogspot.prawalewa.model.ChangeEntity</class>
<class>com.blogspot.prawalewa.model.CommentEntity</class>
<class>com.blogspot.prawalewa.model.ContentEntity</class>
<class>com.blogspot.prawalewa.model.HeaderEntity</class>
<class>com.blogspot.prawalewa.model.ImageEntity</class>
<class>com.blogspot.prawalewa.model.MessagerEntity</class>
<class>com.blogspot.prawalewa.model.PointsBucketEntity</class>
<class>com.blogspot.prawalewa.model.PointsTypedEntity</class>
<class>com.blogspot.prawalewa.model.PointsTypedPointsBucketEntity</class>
<class>com.blogspot.prawalewa.model.RankEntity</class>
<class>com.blogspot.prawalewa.model.RankTypeEntity</class>
<class>com.blogspot.prawalewa.model.TagEntity</class>
<class>com.blogspot.prawalewa.model.UserEntity</class>
<class>com.blogspot.prawalewa.model.UserCookieEntity</class>
<class>com.blogspot.prawalewa.model.VoteEntity</class>
</persistence-unit>
这是 applicationContext 的骨架(这是最大的问题-不确定如何更改它):
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee.xsd">
<context:component-scan base-package="com.blogspot.prawalewa" />
<jee:jndi-lookup id="prawalewa" jndi-name="jdbc/prawalewa"/>
</beans>
还有我的 web.xml:
<persistence-unit-ref>
<persistence-unit-ref-name>persistence/persistenceUnit</persistence-unit-ref-name>
<persistence-unit-name>persistenceUnit</persistence-unit-name>
</persistence-unit-ref>
我的模范 Dao 实现方式如下所示:
public class UserDaoImpl implements UserDao {
protected EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
@PersistenceContext(unitName = "persistenceUnit")
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
@Override
public void addUser(UserEntity userEntity) {
getEntityManager().persist(userEntity);
}
@Override
public void removeUser(int userId) {
Query query = getEntityManager().createQuery(
"DELETE FROM UserEntity u WHERE u.id = :userid");
query.setParameter("userid", userId);
}
}
仅此而已。现在尝试以多种方式更改 ApplicationContext 但没有成功。有没有人可以告诉我如何正确更改它或至少从哪里开始?或者我现在需要摆脱这个并以不同的方式配置应用程序?预先感谢您的帮助。非常感激。
编辑:在创建 EntityManagerFactory 时阅读 Exception - 在 SerialContext 中查找“persistence/myPU”失败后,我对其进行了一些编辑,就像您在上面看到的那样,但我现在在部署时仍然遇到两个异常:
java.lang.Exception:java.lang.IllegalStateException:ContainerBase.addChild:开始:org.apache.catalina.LifecycleException:org.springframework.beans.factory.BeanCreationException:创建名为“registrationBean”的bean时出错:注入自动装配依赖项失败; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:public com.blogspot.prawalewa.user.bo.RegistrationBo com.blogspot.prawalewa.user.bean.RegistrationBean.registrationBo;嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“registrationBoImpl”的 bean 时出错:注入自动装配的依赖项失败;嵌套异常是 org.springframework.beans.factory.BeanCreationException:无法自动装配字段:com.blogspot.prawalewa.user.dao.UserDao com.blogspot.prawalewa.user。bo.impl.RegistrationBoImpl.registrationDao; 嵌套异常是 org.springframework.beans.factory.BeanCreationException:创建名为“userDaoImpl”的 bean 时出错:注入持久性依赖项失败;嵌套异常是 org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“persistenceUnit”的 bean
我应该把它放在 applicationContext.xml 的什么地方?