2012-04-24 10 views
6

私は、JBoss 5.1とHibernate 3.6、JPA 2.0とSpring 3.0.5を使用しています。 私はのように見えるEARファイル構築するためにMavenを使用します。私は、JBoss 5.1で、このEARファイルをデプロイする場合、私はwarファイルをデプロイする場合、私は、しかし、エラーJBoss 5.1:エンティティクラスが見つかりません(vfszip)

org.springframework.dao.InvalidDataAccessApiUsageException: Not an entity: class uk.co.aol.shipmanager.domain.Manager; nested exception is ja 
va.lang.IllegalArgumentException: Not an entity: class uk.co.aol.shipmanager.domain.Subscription 
     at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:286) ~[at_war-1.0.war:3 
.0.5.RELEASE] 
     at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPossible(HibernateJpaDialect.java:104) ~[at_war-1.0.war:3.0.5.RELEASE 
] 
     at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:368) ~[at_war-1. 
0.war:3.0.5.RELEASE] 
     at org.springframework.dao.support.ChainedPersistenceExceptionTranslator.translateExceptionIfPossible(ChainedPersistenceExceptionTranslator.java:58 
) ~[at_war-1.0.war:3.0.5.RELEASE] 

を取得

AutoTrader.ear 
-------> META-INF 
--------------> application.xml 
--------------> jboss-app.xml 
--------------> MANIFEST.MF 
-------> AutoTrader.war 

分解、それは正常に動作します。 ご提案は大歓迎です。

public class ResourceScanner extends NativeScanner { 

    @Override 
    public Set<Class<?>> getClassesInJar(final URL jarToScan, 
      final Set<Class<? extends Annotation>> annotationsToLookFor) { 
     return super.getClassesInJar(patchUrl(jarToScan), annotationsToLookFor); 
    } 

    @Override 
    public Set<NamedInputStream> getFilesInJar(final URL jarToScan, final Set<String> filePatterns) { 
     return super.getFilesInJar(patchUrl(jarToScan), filePatterns); 
    } 

    @Override 
    public Set<Package> getPackagesInJar(final URL jarToScan, 
      final Set<Class<? extends Annotation>> annotationsToLookFor) { 
     return super.getPackagesInJar(patchUrl(jarToScan), annotationsToLookFor); 
    } 

    @Override 
    public String getUnqualifiedJarName(final URL jarToScan) { 
     return super.getUnqualifiedJarName(patchUrl(jarToScan)); 
    } 

    /** 
    * Patch the VFS URL to a FILE protocol URL. 
    * 
    * @param url 
    *   original URL. 
    * @return either the original, either the corresponding FILE protocol of given VFS URL. 
    */ 
    protected URL patchUrl(final URL url) { 
     String protocol = url.getProtocol(); 

     if (protocol.equals("vfs")) { 
      try { 
       File file = new File(url.getFile()); 
       return file.toURI().toURL(); 
      } catch (final MalformedURLException e) { 
       return url; 
      } catch (IOException e) { 
       e.printStackTrace(); 
       return url; 
      } 

     } 
     return url; 
    } 
} 

と、バネpersistence.xmlで、

<property name="hibernate.ejb.resource_scanner" value="uk.co.aol.shipmanager.ResourceScanner"/> 
:私はNativeScannerを拡張ResourceScannerを追加した

おかげで、 アディ

UPDATE

Th爆発した戦争ファイルで再び動作します。

しかしEARファイルの場合には、プロトコルがvfszipないVFSです。

どうすればいいですか?

+0

依存jarファイルが見つかる可能性があるため、爆発した耳のように聞こえます。 EARでは、マニフェストファイルのクラスパスにあるもの、あるいはapplication.xmlファイルを参照する必要があります。クラスパスの問題のように聞こえるかもしれません。あるいは、配備の問題であるかもしれません。クラスがエンティティをEARの中で最初に展開することを探しているが、おそらく展開されたバージョンが別の順序で展開する場合。これは時には問題であるため、依存関係を調べて、EARで定義できるかどうかを確認してください。 – Logan

+0

WARのレイアウトは何ですか? persistence.xmlはありますか?マネージャとサブスクリプションクラスに@Entity(または適切なXML設定が提供されています)という注釈を付けましたか?サードパーティのJARは、WARs WEB-INF/libおよびEARs libディレクトリに置かなければなりません。 – kierans

答えて

0

次のシステムパラメータを使用して問題を解決できたかどうか確認しましたか?

-Dorg.jboss.net.protocol.file.useURI=false 
関連する問題