2009-12-23 32 views
16

Các lỗ nhánh của máy khách có được tạo ra từ WSDL bởi Axis2 an toàn không?Có phải chuỗi được tạo ra Axis2 an toàn không?

Tất nhiên, "thread-safe" không phải là cần thiết một thuật ngữ được định nghĩa một cách nghiêm ngặt, vì vậy tôi đang ở quan tâm nhất là trong những điều sau đây:

Are khác nhau thể hiện của lớp còn sơ khai cùng truy cập đồng thời bởi khác nhau chủ đề, với cùng một hành vi hiệu quả như thực hiện đơn luồng?

thể hiện cùng một lớp sơ khai có thể truy cập đồng thời bởi các luồng khác nhau, với cùng một hành vi có hiệu quả giống như các cuộc gọi được xen kẽ theo một cách tùy ý trong thực thi một luồng không?

Bạn cũng có thể muốn sử dụng thuật ngữ được mô tả here (và bắt nguồn từ here) để thảo luận chính xác hơn.

+0

Tôi đã theo ấn tượng rằng Apache Axis2 đã bị loại bỏ trong lợi của Apache CXF: http://cxf.apache.org/ – Powerlord

+0

Đó có thể được, nhưng câu hỏi của tôi vẫn đứng như tôi không có quyền tự do thay đổi khuôn khổ cơ bản của chúng tôi tại thời điểm này (một ngày nào đó, có thể:) ... – BeeOnRope

Trả lời

16

Tôi không chắc chắn về axis2, nhưng ít nhất axis1 tạo ra các sơ đồ khách hàng không phải là chủ đề an toàn. Tôi có ấn tượng khá nhiều mỗi khách hàng SOAP khác cũng không phải là chủ đề an toàn. Nếu tôi nhớ chính xác vấn đề là với thư viện phân tích cú pháp XML đang được sử dụng theo cách không an toàn bởi lệnh gốc của máy khách.

Sử dụng apache commons-pooling để nhóm các trường hợp và sử dụng từng từ một luồng tại một thời điểm làm việc tốt.

Cập nhật: Đối với Axis2, xem https://issues.apache.org/jira/browse/AXIS2-4357 (tuyên bố Axis2 không threadsafe, theo thiết kế)

+1

Để rõ ràng, bạn có nghĩa là bạn không thể sử dụng thể hiện * cùng * từ nhiều luồng, nhưng sử dụng nhiều phiên bản (cùng một lớp sơ khai) từ nhiều luồng là OK miễn là không có quyền truy cập đồng thời vào bất kỳ cá thể nào? – BeeOnRope

+0

Có. Và rõ ràng các cá thể sơ khai không nhất thiết phải bị ràng buộc vào một sợi nhất định. –

+0

Nhưng tác giả bên dưới nói rằng các nhánh trục là không trạng thái và do đó có thể truy cập an toàn từ nhiều luồng cùng lúc: http://stackoverflow.com/questions/1950080/are-axis2-generated-stubs-thread-safe/1968188# 1968188 –

2

Những sơ đồ này là không quốc tịch cho phép sử dụng lại các cá thể sơ khai. Bạn có thể vui lòng giải thích về vấn đề bạn đang gặp phải với Axis2 không. Mọi người thường khuyên bạn nên sử dụng Xfire trên Axis.

+0

Tôi nghĩ XFire đã không còn tồn tại và được xếp vào một dự án khác – Jherico

+0

Bạn có thể gọi CXF là XFire2 .0, Tôi hơi thiên vị đối với nó :) –

+1

Cảm ơn câu trả lời - bạn có thể bình luận về mức độ an toàn của luồng được cung cấp không? Bạn có thể gọi bất kỳ phương pháp trên cùng một đối tượng từ bất kỳ số lượng các chủ đề đồng thời và nhận được hành vi mong đợi? Tôi không gặp phải bất kỳ vấn đề cụ thể nào với Axis2 - chỉ là chúng tôi đã tạo các sơ đồ bằng cách sử dụng khung công tác và cần định lượng mức độ an toàn luồng cho các thành phần như vậy. Đây là (tương đối) dễ dàng cho những thứ bạn viết cho mình, nhưng khó khăn hơn cho các công cụ được tạo tự động. – BeeOnRope

1

Tôi đoán tôi sẽ cố gắng trả lời câu hỏi của riêng tôi bằng cách cung cấp một số cập nhật về nghiên cứu thêm tác tôi đã làm. Dường như các phiên bản cũ hơn của các nhánh của Axis2 có thể chỉ "tương thích với luồng" (không thể thực hiện các cuộc gọi trên cùng một cá thể sơ khai đồng thời từ nhiều luồng - nhưng các cuộc gọi đến các cá thể khác nhau là OK).

Xem ví dụ:

http://markmail.org/message/3lu7x7pfo47vgnck http://markmail.org/message/sljyf6lpecxqllgx

Bạn có thể gặp một số rò rỉ ổ cắm, và chạy ra khỏi ổ cắm nếu bạn không gọi dọn dẹp/cleanupTransport, theo chủ đề này và nhiều người có liên quan:

http://issues.apache.org/jira/browse/AXIS2-3670

Trong một số trường hợp, ít nhất là tiềm ẩn HttpClient bây giờ có vẻ là thread-an toàn, nhưng tùy thuộc vào cách bạn g enerated khách hàng của bạn, toàn bộ còn sơ khai có thể không được:

http://amilachinthaka.blogspot.com/2009/05/improving-axis2-client-http-transport.html

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