2012-04-24 3 views
6

Ich verwende JBoss 5.1 mit Hibernate 3.6, JPA 2.0 und Spring 3.0.5. ich Maven verwenden, um die EAR-Datei zu erstellen, die wie folgt aussieht:JBoss 5.1: Entitätsklassen nicht gefunden (vfszip)

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

, wenn ich diese Ohrakte in JBoss 5.1 einsetzen, erhalte ich die Fehler

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] 

Allerdings, wenn ich die WAR-Datei bereitstellen explodierte , es funktioniert gut. Alle Vorschläge sind willkommen.

Danke, Adi

UPDATE:

I ein Resource hinzugefügt haben, die NativeScanner erstreckt:

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; 
    } 
} 

und im feder persistence.xml,

<property name="hibernate.ejb.resource_scanner" value="uk.co.aol.shipmanager.ResourceScanner"/> 

Th Es funktioniert wieder in der explodierten Kriegsdatei.

Aber im Fall einer EAR Datei, ist das Protokoll vfszip nicht VFS.

Bitte sagen Sie was zu tun ???

+0

Es klingt wie das explodierte Ohr funktioniert, weil es die abhängigen JAR-Dateien finden kann. Ich denke, mit einem EAR müssen Sie entweder auf den Klassenpfad der Manifest-Datei verweisen oder auf die Datei application.xml. Es klingt wie ein Klassenpfadproblem oder möglicherweise ist es ein Problem mit der Reihenfolge der Bereitstellung. Wenn die Klasse nach der Entität sucht, die zuerst in einer EAR bereitgestellt wird, aber möglicherweise die explodierte Version in einer anderen Reihenfolge bereitstellt. Das ist manchmal ein Problem, also überprüfen Sie Ihre Abhängigkeiten und sehen Sie, ob Sie sie in einer EAR definieren können. – Logan

+0

Was ist das Layout des WAR? Hast du eine persistence.xml? Haben Sie die Manager- und Subscription-Klassen mit @Entity kommentiert (oder eine entsprechende XML-Konfiguration bereitgestellt). JARs von Drittanbietern sollten in ein WARs-Verzeichnis WEB-INF/lib oder und EARs lib gehen. – kierans

Antwort

0

haben Sie versucht, den folgenden Systemparameter zu verwenden, um festzustellen, ob das Problem behoben wurde?

-Dorg.jboss.net.protocol.file.useURI=false 
Verwandte Themen