2012-04-24 7 views
6

Tôi đang sử dụng JBoss 5.1 với Hibernate 3.6, JPA 2.0 và Spring 3.0.5. tôi sử dụng maven để xây dựng các tập tin EAR trông giống như:JBoss 5.1: Không tìm thấy lớp thực thể (vfszip)

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

nếu tôi triển khai hồ sơ tai này trong JBoss 5.1, tôi nhận được lỗi

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] 

Tuy nhiên, nếu tôi triển khai hồ sơ chiến tranh bùng nổ , nó hoạt động tốt. Mọi đề xuất đều được hoan nghênh.

Cảm ơn, Adi

UPDATE:

Tôi đã thêm một ResourceScanner kéo dài 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; 
    } 
} 

và, vào mùa xuân-persistence.xml,

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

Th một lần nữa hoạt động trong tập tin chiến tranh bùng nổ.

Nhưng trong trường hợp của một EAR tập tin , giao thức là vfszip không vfs.

Vui lòng cho biết phải làm gì ???

+0

Có vẻ như tai đã phát nổ hoạt động vì có thể tìm thấy tệp jar phụ thuộc. Tôi nghĩ rằng với một EAR, bạn phải tham khảo những người trong classpath của tập tin manifest, hoặc có thể là file application.xml. Nghe có vẻ giống như một vấn đề classpath, hoặc có thể đó là một vấn đề đặt hàng triển khai. Nếu lớp tìm kiếm thực thể triển khai đầu tiên khi trong một EAR, nhưng có thể phiên bản đã phát triển triển khai theo một thứ tự khác. Đó là một vấn đề đôi khi, vì vậy hãy kiểm tra các phụ thuộc của bạn và xem liệu bạn có thể xác định chúng trong một EAR hay không. – Logan

+0

Bố cục của WAR là gì? Bạn có một persistence.xml? Bạn đã chú thích các lớp Manager và Subscription với @Entity (hay cung cấp cấu hình XML thích hợp). Các JAR của bên thứ ba nên đi vào thư mục lib của WARs WEB-INF/lib hoặc EARs. – kierans

Trả lời

0

bạn đã cố gắng sử dụng thông số hệ thống sau đây và xem liệu thông số đó có giúp giải quyết sự cố không?

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