Java 让JPA在JBoss服务器上与Spring框架一起工作
基础Java 让JPA在JBoss服务器上与Spring框架一起工作,java,spring,hibernate,jpa,Java,Spring,Hibernate,Jpa,基础 我使用的是Spring 2.5.6和Hibernate 3.2.1,因为我必须部署到jboss 4.2.3,它的设置是不允许被干扰的(因为jboss服务器是由一个脚本构建的,脚本很旧,但没有授权花时间修改它)。因此,不能在JBoss上为应用程序设置私有库 我是JPA注释人员,而不是HibernateXML人员。因此,我不会将DTO和映射更改为使用HibernateXML。必须从Hibernate3.6回归到Hibernate3.2.1对我来说已经太难了。我有hibernate自动检测我的实
我使用的是Spring 2.5.6和Hibernate 3.2.1,因为我必须部署到jboss 4.2.3,它的设置是不允许被干扰的(因为jboss服务器是由一个脚本构建的,脚本很旧,但没有授权花时间修改它)。因此,不能在JBoss上为应用程序设置私有库 我是JPA注释人员,而不是HibernateXML人员。因此,我不会将DTO和映射更改为使用HibernateXML。必须从Hibernate3.6回归到Hibernate3.2.1对我来说已经太难了。我有hibernate自动检测我的实体类,我不会改变它 问题 我在JBoss4.2.3 dev env中编写了一个webapp,它与JPA和JAX-RS一起出色地运行。现在我必须将它安装到Spring2.5.6框架中 因此,我创建了以下ApplicationContext.xml
<bean id="propertyPlaceHolder" class="zzz.common.spring.config.ConfigPlaceholderConfigurer" >
<property name="location" value="file:C:/config/bootstrap.properties"/>
</bean>
<tx:annotation-driven />
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="jpaTemplate" class="org.springframework.orm.jpa.JpaTemplate">
<property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" >
<property name="persistenceUnitName" value="obamacare"/>
</bean>
问题:
Q1.
我需要做什么才能将spring${references}注入到persistence.xml属性中
Q2.
我尝试将perssitence.xml属性传输到ApplicationContext.xml中的数据源中
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" >
<property name="persistenceUnitName" value="unit1"/>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${zzz.common.sql.ConnectionPool.driverClass}"/>
<property name="url" value="${zzz.common.sql.ConnectionPool.url}"/>
<property name="username" value="${zzz.common.sql.ConnectionPool.user}"/>
<property name="password" value="${zzz.common.sql.ConnectionPool.password}"/>
</bean>
但是JBoss启动失败,因为。。。DriverManager数据源不可写,没有setDatasource方法或setDatasource方法不可访问,等等
为什么数据源不能在DriverManager数据源中设置?在扩展类中创建setDatasource方法需要做什么。在该方法中我需要做什么
您能推荐一个允许setDatasource的替代jdbc数据源吗
Q3.
我还需要做什么,或者spring framework会自动在entitymanager中找到PersistenceContext注释,然后尝试实例化它吗
Q4.
bean jpaTemplate做什么?为什么我需要它
Q5.
如果我将所有内容都转移到ApplicationContext.xml,我还需要保留一个虚拟的位置来存放persistence.xml吗
我需要帮助。通过使DriverManager数据源在ApplicationContext.xml中工作或使${references}在persistence.xml中工作
谢谢大家
这是我上周问的问题的后续内容:。Q1
您不能相信,Spring只会将占位符配置加载到它自己的管理xml文件中
Q2、Q3、Q5
本文讨论了如何使用来消除persistence.xml
Q4
这篇文章讨论了但仍然得到了春季例外翻译的好处,等等。Q4
JpaTemplate不再是真正必要的了。它是不相关的
Q5
如果您只有一个持久性单元,那么就不需要在Spring中使用persistence.xml。您可以使用LCEMFB属性“packagesToScan”并引用实体包目录
注意:不要使用“PersistenceUnit”属性,它将覆盖“PackagesToScan”
“没有特许权来投资时间改变它”-这是你的问题。找一份章程。章程必须从世界各地250家机构收集。不仅仅是我的老板或他的老板。好吧,这家伙说我们不应该在webapps中使用PersistenceContext,因为它不是线程安全的:@BlessedGeek你可以对几乎任何其他对象说同样的话-servlet应该是无状态的,向它添加一个实例,违反了这条法律,除非你保护了那个对象,否则会破坏线程安全。所以persistence.xml中的persistenceUnit就是我的包没有在JBoss上被扫描的原因?但是,为什么它无论如何都能在Tomcat上工作呢?
@PersistenceContext
private EntityManager entityManager;
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean" >
<property name="persistenceUnitName" value="unit1"/>
</bean>
<bean id="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="${zzz.common.sql.ConnectionPool.driverClass}"/>
<property name="url" value="${zzz.common.sql.ConnectionPool.url}"/>
<property name="username" value="${zzz.common.sql.ConnectionPool.user}"/>
<property name="password" value="${zzz.common.sql.ConnectionPool.password}"/>
</bean>