2012-04-24 19 views
6

Używam JBoss 5.1 z Hibernate 3.6, JPA 2.0 i Spring 3.0.5. używam maven zbudować plik EAR, który wygląda tak:JBoss 5.1: Nie znaleziono klas jednostek (vfszip)

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

jeśli wdrożyć ten plik EAR w JBoss 5.1, pojawia się błąd

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] 

Jeśli jednak wdrożyć plik wojna wybuchła , to działa dobrze. Wszelkie sugestie są mile widziane.

dzięki, Adi

UPDATE:

I dodano ResourceScanner która rozciąga 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; 
    } 
} 

i wiosną-persistence.xml,

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

Th znów działa w pliku wojny po rozerwaniu.

Ale w przypadku EAR pliku, protokół jest vfszip nie VFS.

Proszę powiedzieć co robić ???

+0

Wygląda na to, że eksplodowane ucho działa, ponieważ może znaleźć zależne pliki jar. Myślę, że z EAR trzeba albo odwołać się do tych w ścieżce klasy pliku manifestu, albo może pliku application.xml. Wygląda to na problem z klasą classpath, a może jest to kolejność wdrażania. Jeśli klasa szuka jednostki wdrażającej się jako pierwsza w pliku EAR, ale może wersja rozłożona jest wdrażana w innej kolejności. To jest czasami problem, więc sprawdź zależności i zobacz, czy możesz je zdefiniować w pliku EAR. – Logan

+0

Jaki jest układ WAR? Czy masz plik persistence.xml? Czy opisałeś klasy Menedżera i subskrypcji za pomocą @Entity (lub pod warunkiem, że posiadasz odpowiednią konfigurację XML). Pliki JAR stron trzecich powinny być w katalogu WARS WEB-INF/lib lub EARs lib dir. – kierans

Odpowiedz

0

Czy próbowałeś użyć następującego parametru systemowego i zobaczyć, czy pomógł rozwiązać problem?

-Dorg.jboss.net.protocol.file.useURI=false 
Powiązane problemy