2011-11-01 39 views
6

Tôi đang gặp một số vấn đề với việc cố gắng tải libs từ ứng dụng của tôi thay vì những gì đi kèm với JBoss.Làm thế nào để cấu hình JBOSS 5.1.0 GA ClassLoader

Tôi cố gắng để tận dụng các SLF4J mới nhất và lớn nhất trong ứng dụng của tôi và khi làm như vậy Tôi nhận được thông báo sau:

SLF4J: Class path contains multiple SLF4J bindings. 
SLF4J: Found binding in [vfszip:/C:/devtools/workspace/g2/.metadata/.plugins/org.jboss.ide.eclipse.as.core/JBoss_5.1_Runtime_Server1302541739184/deploy/ecotrakEar.ear/ecotrak.war/WEB-INF/lib/slf4j-log4j12-1.6.1.jar/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: Found binding in [vfszip:/C:/devtools/jboss-5.1.0.GA/common/lib/slf4j-jboss-logging.jar/org/slf4j/impl/StaticLoggerBinder.class] 
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. 

Trong ứng dụng của tôi, tôi đã các lọ sau nằm trong lib WAR của tôi thư mục:

  • Tháng Bảy-to-slf4j-1.6.1.jar
  • slf4j-api-1.6.1.jar
  • slf4j-log4j12-1.6.1.jar
  • 01.235.

Dự án của tôi được triển khai dưới dạng EAR có WAR. Tất cả các thư viện đều nằm trong WAR.

Dựa trên một số nghiên cứu đã được đề xuất rằng đối với JBoss 5.1, tệp jboss-classloading.xml được tạo. Tôi đã tạo một bản cho EAR của mình:

<classloading xmlns="urn:jboss:classloading:1.0" 
    name="ecotrak.ear" 
    domain="ecotrak.ear" 
    export-all="NON_EMPTY" 
    import-all="true" 
    parent-first="false"> 
</classloading> 

Điều này xác định rằng tệp EAR sẽ được tải trước.

Tôi cũng đã tạo ra một cho WAR tôi:

<classloading xmlns="urn:jboss:classloading:1.0" 
    name="ecotrak.war" 
    domain="ecotrak.war" 
    parent-domain="ecotrak.ear" 
    top-level-classloader="true" 
    export-all="NON_EMPTY" 
    import-all="true" 
    parent-first="true"> 
</classloading> 

Với cấu hình này tôi nhận được lỗi sau đây trong các bản ghi khởi động:

11:18:07,949 ERROR [[/ecotrak]] Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
java.lang.NoSuchMethodError: org.slf4j.spi.LocationAwareLogger.log(Lorg/slf4j/Marker;Ljava/lang/String;ILjava/lang/String;[Ljava/lang/Object;Ljava/lang/Throwable;)V 
    at org.apache.commons.logging.impl.SLF4JLocationAwareLog.trace(SLF4JLocationAwareLog.java:107) 

là gì cách chính xác để có lọ từ dự án của tôi được nạp trước khi JBoss?

Trả lời

0

Bạn nên sử dụng một cái gì đó như là:

<jboss-app> 
    <loader-repository> 
    com.example:archive=unique-archive-name 
    </loader-repository> 
</jboss-app> 

trong META-INF/JBoss-app.xml để xác định classloader riêng.

Chúng tôi sử dụng nó để triển khai các lồng Hibernate riêng bên trong ứng dụng.

Xem https://community.jboss.org/wiki/ClassLoadingConfiguration để biết chi tiết

0

Tôi biết chủ đề này là rất cũ, nhưng tôi đã có một vấn đề tương tự hiện nay vì vậy tôi nghĩ rằng vấn đề chính nó có thể xảy ra nhưng với một ai đó.

Tôi cần chạy hai tai tương tự trong các ngữ cảnh khác nhau, với cùng tên gói/lớp bên trong các tiểu dự án của nó (JBoss 5.1.0 GA). Vì vậy, sau một số nghiên cứu và cố gắng sử dụng phiên bản 'jboss-classloading.xml' đầy đủ được cung cấp ở đây và bởi một số blog, tôi đã sử dụng phiên bản đơn giản hơn của tệp 'jboss-classloading.xml' trên EAR của tôi (không có cụ thể 'JBoss-classloading.xml' cho các tiểu dự án JAR của tôi/WAR/etc):.

<classloading xmlns="urn:jboss:classloading:1.0" 
      domain="IsolatedDomain" 
      export-all="NON_EMPTY" 
      import-all="true"> 
</classloading> 

này đã được đưa vào dự án EAR của tôi thư mục META-INF. Hy vọng điều này sẽ giúp những người khác có vấn đề tương tự.

Tôi có phiên bản làm việc kể từ trang web này:

https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/5/html/Microcontainer_User_Guide/sect-JBoss_Microcontainer_User_Guide-The_ClassLoading_Layer-ClassLoading.html

Các vấn đề liên quan