2012-04-24 9 views
6

Sto utilizzando JBoss 5.1 con Hibernate 3.6, JPA 2.0 e Spring 3.0.5. Io uso Maven per costruire il file EAR che assomiglia a:JBoss 5.1: Classi di entità non trovate (vfszip)

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

se schiero questo file ear in JBoss 5.1, ottengo l'errore

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] 

Tuttavia, se distribuire il file WAR è esplosa , funziona bene. Qualsiasi suggerimento è benvenuto.

Grazie, Adi

UPDATE:

Ho aggiunto un ResourceScanner estendentesi NativeScanner:

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

e, in primavera-persistence.xml,

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

Th è di nuovo funziona nel file di guerra esploso.

Ma nel caso di un EAR file di , il protocollo è vfszip non VFS.

Si prega di dire cosa fare ???

+0

Sembra che l'orecchio esploso funzioni perché è in grado di trovare i file jar dipendenti. Penso che con un EAR sia necessario fare riferimento a quelli nel classpath del file manifest, o magari nel file application.xml. Sembra un problema di classpath, o forse è un problema di ordine di distribuzione. Se la classe cerca l'entità che distribuisce per prima quando si trova in un EAR, ma forse la versione esplosa viene distribuita in un ordine diverso. Qualche volta è un problema, quindi controlla le tue dipendenze e verifica se è possibile definirle in un EAR. – Logan

+0

Qual è il layout di WAR? Hai un persistence.xml? Hai annotato le classi Manager e Subscription con @Entity (o fornito la configurazione XML appropriata). I JAR di terze parti dovrebbero essere contenuti in una directory lib di WARs WEB-INF/lib o ed EARs. – kierans

risposta

0

hai provato a utilizzare il seguente parametro di sistema e vedere se ha aiutato a risolvere il problema?

-Dorg.jboss.net.protocol.file.useURI=false 
Problemi correlati