0

java jdk1.6.0_17 と hibernate に問題があります。休止状態のセッション ファクトリを開く必要がありますが、マッピング ファイル (mapper-test.jar) は個人的な classLoader (URLClassLoader) によってロードされます。

         File map = new File("/opt/sigeco/infowebrepository/mapper/mapper-test.jar");
   File map1 = new File("/opt/sigeco/infowebrepository/mapper/hibernate3.jar");       
          URL[] urls = new URL[] { map.toURI().toURL(),map1.toURI().toURL()};   
          URLClassLoader loader = new URLClassLoader(urls);
          //test load is ok
          loader.loadClass("it.sigeco.infoweb.dao.app.IcFabb");          
          Configuration configuration=new Configuration();          
          configuration.configure( loader.getResource("hibernate.cfg.xml"));       
          configuration.buildSessionFactory();

問題は:

org.hibernate.MappingException: Resource: it/sigeco/infoweb/dao/app/IcFabb.hbm.xml not found
at org.hibernate.cfg.Configuration.addResource(Configuration.java:479)
at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1465)
at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1433)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1414)
at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1390)
at org.hibernate.cfg.Configuration.configure(Configuration.java:1325)
at testLoad.main(testLoad.java:32)

hibernate.cfg.xml:

<?xml version="1.0" encoding="UTF-8"?>
  <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
  <hibernate-configuration>
    <session-factory>
       <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
       <property name="show_sql">true</property>
       <property name="hibernate.cache.use_query_cache">false</property>
       <property name="hibernate.cache.use_second_level_cache">false</property>
      <property name="hibernate.jdbc.use_scrollable_resultset">true</property>
      <mapping resource="it/sigeco/infoweb/dao/app/IcFabb.hbm.xml"/>        
    </session-factory>
 </hibernate-configuration>

ビルド パスを使用してマッパー テストをロードすると、マッパー テストは問題ありません。

構成はファイル it/sigeco/infoweb/dao/app/IcFabb.hbm.xml を URLClassLoader ではなくシステム クラスローダーで検索しているようですが、構成をローダーに接続するにはどうすればよいですか?

ありがとうございました

4

1 に答える 1

0

私は1つの解決策を見つけました。UrlClassLoader を拡張する個人的な ClassLoader である MapperClassLoader を作成します。

MapperClassLoader(URL[] urls)
{
        super( urls,MapperClassLoader.class.getClassLoader());
}

ここで、urls には jar の URL が含まれます。そのため、親ローダーをシステム クラス ローダーに設定します。MapperClassLoader を作成したら、MapperClassLoader を使用してシステム ClassLoader を設定します。

Thread.currentThread().setContextClassLoader( MapperClassLoader.getInstance());

したがって、mapper-test.jar は使用可能です。

于 2012-06-12T15:01:45.307 に答える