2012-04-24 5 views
6

Estoy utilizando JBoss 5.1 con Hibernate 3.6, JPA 2.0 y Spring 3.0.5. utilizo experto para construir el archivo EAR que se parece a:JBoss 5.1: clases de entidad no encontradas (vfszip)

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

si puedo implementar este archivo ear en JBoss 5.1, me sale el error

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] 

Sin embargo, si puedo implementar el archivo de la guerra explotó , funciona bien. Cualquier sugerencia es bienvenida.

Gracias, Adi

UPDATE:

He añadido un ResourceScanner que se extiende 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; 
    } 
} 

y, en primavera-persistence.xml,

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

Th otra vez funciona en el archivo de guerra explotado.

Pero en el caso de un archivo EAR , el protocolo es vfszip no VFS.

Por favor, indique qué hacer ???

+0

Parece que la oreja explotada funciona porque puede encontrar los archivos jar dependientes. Creo que con un EAR debes hacer referencia a aquellos en el classpath del archivo de manifiesto, o quizás en el archivo application.xml. Suena como un problema de classpath, o tal vez es un problema de orden de despliegue. Si la clase busca la entidad que se despliega primero cuando está en un EAR, pero tal vez la versión explotada se despliega en un orden diferente. A veces esto es un problema, así que revise sus dependencias y vea si puede definirlas en un EAR. – Logan

+0

¿Cuál es el diseño de la GUERRA? ¿Tienes un persistence.xml? ¿Ha anotado las clases Manager y Subscription con @Entity (o proporcionó la configuración XML adecuada). Los archivos JAR de terceros deberían ir en un directorio WAR de WAR-WEB/INF o EAR. – kierans

Respuesta

0

¿Intentó utilizar el siguiente parámetro del sistema y ver si ayudó a resolver el problema?

-Dorg.jboss.net.protocol.file.useURI=false 
Cuestiones relacionadas