2012-09-04 30 views
7

Tôi cố gắng triển khai một cuộc chiến vào Tomcat 7.0.29. Tôi đang gặp các bản ghi ngăn xếp như sau:Vòng lặp vô hạn khi triển khai một cuộc chiến trên tomcat 7

GRAVE: Error waiting for multi-thread deployment of context descriptors to complete 
java.util.concurrent.ExecutionException: java.lang.StackOverflowError 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:222) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:83) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:574) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1413) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401) 
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:785) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
    at java.lang.Thread.run(Thread.java:662) 
Caused by: java.lang.StackOverflowError 
    at java.util.HashSet.<init>(HashSet.java:86) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2208) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2227) 

(Nhiều khung stack Bỏ qua phần ...)

Có ai phải đối mặt với cùng một vấn đề?

+0

bạn có thể đăng nội dung web.xml không? – Dan

+2

Xem https://issues.apache.org/bugzilla/show_bug.cgi?id=53871 –

Trả lời

2

Tôi cũng gặp sự cố này trong Tomcat 7.0. và Tomcat 7.0. . Tuy nhiên với Tomcat 7.0. mọi thứ hoạt động tốt, vì vậy tôi nghi ngờ đó là vấn đề Tomcat, đã được giới thiệu gần đây.

Đã xảy ra lỗi trong 7.0. và 7.0. , khi bắt đầu Tomcat và triển khai một tập tin chiến tranh:

14:01:06,380 ERROR [HostConfig:576] Error waiting for multi-thread deployment of context descriptors to complete java.util.concurrent.ExecutionException: java.lang.StackOverflowError 
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252) 
    at java.util.concurrent.FutureTask.get(FutureTask.java:111) 
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:574) 
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:470) 
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1413) 
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:313) 
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) 
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) 
    at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:401) 
    at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:346) 
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1140) 
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:785) 
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559) 
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549) 
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:166) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 
Caused by: java.lang.StackOverflowError 
    at java.util.HashSet.<init>(HashSet.java:103) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2243) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2260) 
    at org.apache.catalina.startup.ContextConfig.populateSCIsForCacheEntry(ContextConfig.java:2260) 
1

Một cách giải quyết: Tôi đã thay đổi tên của WAR (không finalName trong pom.xml và thay đổi phiên bản artifact) và nó làm việc .. .. tại sao? Tôi không biết cho đến bây giờ!

Giải pháp thực sự và chính hãng? Chắc chắn mới Tomcat Phát hành. . .

1

Đối với tôi hành vi này được sao chép trong IntelliJ Idea khi tôi đặt bối cảnh ứng dụng có cùng tên với tên maven atrifactId trong tệp .pom. Ví dụ: artifactId của tôi là 'test', sau đó tôi thiết lập bối cảnh ứng dụng (Edit configuration -> Tomcat Server -> Deployment, chọn artifact đã phát nổ) thành '/ test'. Ngay khi tôi thay đổi bối cảnh ứng dụng, mọi thứ đã hoạt động.

4

Điều này được báo cáo ngược dòng là số #53871 trong Tomcat. Sự cố có vẻ như với tính năng quét chú thích và Tomcat 7.0.38 bao gồm thông báo lỗi rõ ràng hơn.

Từ báo cáo lỗi:

Do vấn đề quản lý phụ thuộc tôi đã triển khai một tập tin WAR chứa hai tập tin JAR chứa các phiên bản khác nhau của một thư viện, nơi mà phiên bản 1 chứa một lớp Một mà kế thừa từ B và một phiên bản khác 2 chứa một lớp B kế thừa từ A. Các lớp được nạp theo thứ tự như vậy mà A và B tuần hoàn kế thừa từ nhau dẫn đến tràn ngăn xếp trong việc cư trúSCIsForCacheEntry vì nó không phát hiện các chu kỳ trong cây thừa kế.

Đây chính xác là vấn đề trong trường hợp của tôi: phiên bản cũ của dom4j kèm theo phiên bản không tương thích của jaxen. Chẩn đoán lỗi mới trong 7.0.38 cho thấy chính xác các lớp nào đã hình thành một vòng lặp và tôi đã sửa nó bằng cách nâng cấp các phụ thuộc đó.

1

Sử dụng phiên bản thấp hơn Tomcat. Đã xảy ra sự cố với phiên bản Tomcat bạn đang sử dụng.

1

Tôi đã gặp vấn đề tương tự. Tôi nghĩ rằng nó được gây ra bởi Tomcat 7, vì vậy khi tôi đổi thành Tomcat 6.0.35, sự cố đã được giải quyết giống như một sự quyến rũ.

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