Tôi đang sử dụng Spring 3.2.9, Tomcat 6.0.44làm thế nào để thiết lập thời gian nạp dệt với mùa xuân và Tomcat KHÔNG sử dụng -javaagent trên dòng lệnh
Tôi cố gắng để cấu hình nhà cung cấp thiết bị đo đạc mùa xuân ứng dụng của tôi (ví dụ: spring-instrumentation.jar) để tải thời gian dệt, khi nó được triển khai trên Tomcat.
Tôi có yêu cầu KHÔNG sử dụng: "-javaagent: /path/path/spring-instrument.jar" trên dòng lệnh để thực hiện cấu hình.
Tôi đã đọc rằng tôi có thể định cấu hình thiết bị lò xo bằng cách sửa đổi phần tử < Ngữ cảnh > của cấu hình Tomcat của ứng dụng của tôi (trong tệp server.xml của Tomcat hoặc tệp context.xml của ứng dụng web của tôi). Thêm phần tử < ngữ cảnh > ngữ cảnh vào kết quả server.xml trong ứng dụng của tôi được cấu hình đúng để chạy với nhà cung cấp thiết bị đo đạc của Spring. Thêm nó vào context.xml (xem bên dưới) KHÔNG dẫn đến thiết lập làm việc.
Tôi có một tập tin/aop.xml META-INF, trông như thế này:
<aspectj>
<weaver options="-verbose -showWeaveInfo -debug">
<include within="com.mv.xx.services..*"/>
<exclude within="com.mv.xx.aop..*"/>
</weaver>
<aspects>
<aspect name="com.mv.xx.aop.MyAspect"/>
</aspects>
</aspectj>
tôi cũng xác định rằng tôi muốn sử dụng thời gian nạp dệt bằng cách thêm này để bối cảnh cấu hình mùa xuân của tôi:
<context:load-time-weaver />
Và tôi thêm jar này để classpath ứng dụng của tôi: mùa xuân-instrument-tomcat.jar
GÌ tôi đã thử:
Khi bắt đầu Tomcat, Nếu tôi xác định vị trí của lò xo-instrument.jar trên dòng lệnh bằng cách sử dụng tham số -javaagent như thế này:
-javaagent:/path/path2/spring-instrument-3.2.9.RELEASE.jar
Tất cả mọi thứ hoạt động tốt.
Tiếp theo, tôi đã xóa "-javaagent: /path/path2/spring-instrument-3.2.9.RELEASE.jar" khỏi dòng lệnh. Trong file server.xml Tomcat (nằm trong $ CATALINE_HOME/conf), tôi đã thêm một một > yếu tố < Bối cảnh tới phần tử < chủ >, như thế này:
<Context path="/myApp" docBase="myApp">
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
Với cấu hình này mọi cư xử đúng cách. Tuy nhiên tôi có một yêu cầu không sửa đổi server.xml của Tomcat, vì tôi không có quyền kiểm soát đối với server.xml (DevOps làm, và không muốn sửa đổi nó).
Tiếp theo tôi loại bỏ các <Context> phần tử từ server.xml Tomcat. Theo số Spring docs, tôi có thể thêm /META-INF/context.xml vào ứng dụng web của mình và đặt thành phần < Ngữ cảnh > được sử dụng trong tệp server.xml của Tomcat vào ngữ cảnh.xml, như vậy:
<Context>
<Context path="/myApp" docBase="myApp">
<Loader loaderClass="org.springframework.instrument.classloading.tomcat.TomcatInstrumentableClassLoader"/>
</Context>
</Context>
Tuy nhiên khi tôi khởi động lại Tomcat, tôi nhận được một thông báo lỗi trong các bản ghi nói:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.context.weaving.AspectJWeavingEnabler#0': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadTimeWeaver': Initialization of bean failed; nested exception is java.lang.IllegalStateException: ClassLoader [org.apache.catalina.loader.WebappClassLoader] does NOT provide an 'addTransformer(ClassFileTransformer)' method. Specify a custom LoadTimeWeaver or start your Java virtual machine with Spring's agent: -javaagent:org.springframework.instrument.jar
Sau khi đào bới xung quanh, tôi đọc một cái gì đó gợi ý rằng tôi sửa đổi các yếu tố <context:load-time-weaver/>
trong cấu hình Spring của tôi, như sau:
<context:load-time-weaver weaver-class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
Và thêm jar chứa InstrumentationLoadTimeWeaver.class vào classpath của tôi.
Tuy nhiên khi tôi làm điều đó, tôi nhận được thông báo lỗi này trong các bản ghi:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.IllegalStateException: Must start with Java agent to use InstrumentationLoadTimeWeaver. See Spring documentation.
etc....
bất cứ ai có thể giải thích làm thế nào để thiết lập thời gian nạp dệt với mùa xuân và Tomcat KHÔNG sử dụng -javaagent trên dòng lệnh, và KHÔNG sửa đổi tệp server.xml?
Cùng một vấn đề! Bất kì giải pháp nào? – HVT7