0

jarOracle アプリケーション サーバーのファイル内にデプロイされている場合、Hibernate リソースが見つからないという問題があります。

LocalSessionFactoryBean次のように定義された休止状態のマッピングファイルがいくつかあります。

<bean id="sessionFactory" 
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mappingLocations">
    <list>
       <value>classpath:/mapping/*.hbm.xml</value>
    </list>
  </property>
  ...
</bean>

この Bean 定義はファイルにありますapplicationContext.xml

hibernate マッピング、これらのマッピングによって参照されるクラス、およびファイルは、 artifact を生成するapplicationContext.xmlmoduleにあります。foofoo.jar

同じファイル.earを参照して使用するを作成しました。これを Oracle アプリケーション サーバーにデプロイすると、次のエラーが表示されます。foo.jarapplicationContext.xml.ear

java.io.FileNotFoundException: class path resource [mapping/] cannot be resolved to absolute file path because it does not reside in the file system: code-source:/.../oas10.1.3/j2ee/.../applications/.../WEB-INF/lib/foo.jar!mapping/

調べてみると、期待どおりに Hibernate マッピング ファイルを含むディレクトリ/WEB-INF/lib/foo.jarが表示されます。mappings

foo健全性チェックとして、次のテストを実行する と に依存する単純なプロジェクトを作成しました。

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
public class AppTest {

  @Autowired SessionFactory sessionFactory;

  @Test
  public void loadObjects() {
    Session session = sessionFactory.openSession();
    List<Foo> results = session.createQuery("from Foo").list();
    System.out.println("found " + results.size() + " results");
  }
}

これは期待どおりに機能します。HQL クエリが実行され、データベースから正しい数の Foo オブジェクトが返されます。

では、なぜその単純なアプリケーションは機能するマッピング リソースを参照するfoo.jarのに、Oracle アプリ サーバーで同じことを行うとリソースが見つからないのでしょうか?

編集:mappingJarLocations代わりに使用してみましたmappingLocations:

<bean id="sessionFactory" 
  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
  <property name="dataSource" ref="dataSource"/>
  <property name="mappingJarLocations">
    <list>
       <value>WEB-INF/lib/foo.jar</value>
    </list>
  </property>
  ...
</bean>

を取得しましたFileNotFoundException

編集:mappingLocations (最初の例のように)の代わりに使用に戻りましmappingJarLocationsたが、今回はファイルをファイルのディレクトリ*.hbm.xmlに直接コピーしました。.warWEB-INF/classes

当然のことながら、これはうまくいきました:

setMappingLocations() - file:/.../oas10.1.3/j2ee/.../applications/.../raps-site-9.0/WEB-INF/classes/mapping/Address.hbm.xml

提案されているようにユーティリティ jar を試してみますが、一時的な手段としてpom.xml、マッピングを に直接コピーするように変更しますWEB-INF/classes

4

1 に答える 1

0

耳自体の中に瓶を詰める必要があります。このような jar は、ユーティリティ jar と呼ばれます。

これを行うにはいくつかの方法があります。http://www.ibm.com/developerworks/rational/library/07/1211_schrag/を参照してください。

于 2013-04-11T11:39:48.177 に答える