基礎
Spring2.5.6とHibernate3.2.1を使用しています-セットアップを妨害することが許可されていないjboss4.2.3にデプロイする必要があるためです(jbossサーバーはスクリプトによって構築されており、スクリプトは古いがスクリプトが古いため)それを変更するために時間を投資するために与えられたチャーター)。したがって、いいえ、JBoss上のアプリのプライベートライブラリを持つことはできません。
私は、休止状態のXML担当者ではなく、注釈担当者によるJPAです。したがって、DTOとマッピングを休止状態のXMLを使用するように変更するつもりはありません。Hibernate3.6からHibernate3.2.1に回帰しなければならないことは、私にとってすでに多すぎました。エンティティクラスを休止状態で自動検出しましたが、これを変更することはありません。
問題
JBoss 4.2.3devenvでJPAとJAX-RSでうまく動作するWebアプリを作成しました。次に、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>
〜
そしてこれはpersistence.xmlです。元々、プロパティ値は開発中にハードコーディングされていました。しかし、それらを本番環境に変換するには、それらの値を春の${references}にする必要があります。$ {references}はfile:C:/config/bootstrap.propertiesから読み取られ、zzz.common.spring.config.ConfigPlaceholderConfigurerは認証サービスを介してユーザーとパスワードを設定する必要があります。
<persistence-unit name="obamacare" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<!-- Scan for annotated classes and Hibernate mapping XML files -->
<properties>
<property name="hibernate.archive.autodetection" value="class, hbm" />
<property name="hibernate.connection.driver_class"
value="${zzz.common.sql.ConnectionPool.driverClass}" />
<property name="hibernate.connection.url"
value="${zzz.common.sql.ConnectionPool.url}" />
<property name="hibernate.connection.username" value="${zzz.common.sql.ConnectionPool.user}"/>
<property name="hibernate.connection.password" value="${zzz.common.sql.ConnectionPool.password}"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
明らかに、永続XMLのスプリング$ {references}は機能していません。これは、エンティティマネージャーがNullであり、jdbcドライバークラスがnullであるためです。URL、ユーザー、パスワードも同様です。
次の行をJAX-RS応答コードに配置しました。ここで、デバッガーはentityManagerがnullであることを示しています。
@PersistenceContext
private EntityManager entityManager;
質問:
Q1。
春の${references}をpersistence.xmlプロパティに挿入するにはどうすればよいですか?
Q2。
persisitence.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の起動が失敗したのは... DriverManagerDataSourceが書き込み可能ではなく、setDatasourceメソッドまたはsetDatasourceメソッドにアクセスできないためです。
DriverManagerDataSourceでデータソースを設定できないのはなぜですか?setDatasourceメソッドを作成するには、拡張クラスで何をする必要がありますか。そのメソッド内で何をする必要がありますか?
setDatasourceを許可する代替のjdbcデータソースを提案できますか?
Q3。
他にやらなければならないことはありますか、それともSpring FrameworkがentitymanagerでPersistenceContextアノテーションを自動的に見つけて、それをインスタンス化しようとしますか?
Q4。
Bean jpaTemplateは何をしますか?なぜ必要なのですか?
Q5。
すべてをApplicationContext.xmlに転送した場合でも、ダミーのプレースホールディングpersistence.xmlを保持する必要がありますか?
私は助けが必要です。DriverManagerDataSourceをApplicationContext.xmlで機能させるか、${references}をpersistence.xmlで機能させることによって。
皆さん、ありがとうございました。
これは、先週私が尋ねた質問のフォローアップです:JPA永続性プロパティを動的に設定します。