2010-07-13 35 views
8

Tôi muốn khám phá tất cả các triển khai của một giao diện trong thời gian chạy trong một ứng dụng Java và tải các lớp đó một cách động từ các tệp JAR mà người dùng có thể thêm vào một thư mục. Đó là một hệ thống plug-in, về cơ bản.Khuôn mẫu khám phá dịch vụ Java đơn giản

Tôi tìm thấy một số giải pháp cho việc này:

  • Sử dụng SPI - đây không phải là rất linh hoạt: Tôi muốn một cái gì đó mà có thể làm việc với chú thích, hoặc chỉ tìm kiếm một giao diện được mở rộng, không cũng phải thêm các tệp văn bản bên ngoài.
  • Sử dụng Commons Discovery - trông giống như một kết thúc chết, vì bản phát hành cuối cùng là 0,4 từ năm 2005 trở lại
  • Sử dụng Java Simple Plugin Framework. 5 minutes and it works. No XML. - điều này có vẻ rất chưa trưởng thành.

Có giải pháp nào được sử dụng rộng rãi cho việc này không?

Cập nhật: Không cần phải tách mã và OSGi dường như quá phức tạp đối với các nhu cầu đơn giản của tôi ngay bây giờ. Tôi cũng đã thêm "Đơn giản" vào tiêu đề của câu hỏi này để làm rõ ý định của mình.

+0

OSGi có thể giải quyết các vấn đề như thế này và ngoài ra còn cung cấp các cách để giữ mô-đun riêng biệt, vv sẽ rất quan trọng nếu bạn có các trình cắm phụ thuộc vào các thư viện khác. – Jesper

Trả lời

4

Đó là một chút về phía nặng, nhưng bạn nên xem xét Apache Felix hoặc Eclipse Equinox, cả hai đều là triển khai OSGi vốn còn sống và đá, nhưng có thể quá mức cần thiết cho nhu cầu của bạn. Tuy nhiên, đây là một trong những vấn đề mà OSGi được thiết kế để giải quyết.

0

Giống như @skaffman đã nói, OSGi và triển khai hiện đại được xây dựng dựa trên dường như là một giải pháp hoàn hảo. Nếu bạn đang sử dụng guồng quay guice, hãy xem xét iPOJO, kết hợp hoàn hảo các chú thích trong ngăn xếp OSGi (thông báo iPOJO hoạt động trên bất kỳ nền tảng OSGi nào). Nếu bạn có nhiều hơn trong băng thông XML/Spring, hãy xem xét sử dụng Blueprint.

Cuối cùng, xem xét JSPF, tôi sẽ không chia sẻ ý kiến ​​của bạn về sự non nớt của nó. Có cộng tác một chút về dự án đó, tôi thấy nó thực sự hữu ích trong lĩnh vực của nó, vì nó cho phép sử dụng plugin dễ dàng, mà không có rắc rối và classpath separaion mà OSGi cung cấp.

+0

bạn có thể đăng liên kết tới một ví dụ đơn giản về JSPF không? Tôi đang cố gắng sử dụng khung công tác đó, nhưng tôi thực sự không thể hiểu được tính năng Tùy chọn hoạt động như thế nào. – capovawi

0

+1 SPI - gọn nhẹ, một chút bảo trì (các tệp dịch vụ/* văn bản) nhưng cách trình nạp lớp của Java hoạt động bất kỳ "tự động phát hiện" nào sẽ không đáng tin cậy 100%; bạn có thể giảm bớt rắc rối của các tệp văn bản với một chương trình đơn giản cho một dự án/thư mục đã tạo và/hoặc (tôi khuyên bạn nên) kiểm tra tất cả các triển khai được bao gồm

+2 OSGi - nếu bạn sẵn sàng người nặng, và lưu ý việc triển khai đang nhận được nhẹ hơn và dễ dàng hơn (ít nhất là một số trong số họ!)

1

Bạn có thể thử khám phá dịch vụ của sông Apache (trước đây là Jini)

http://river.apache.org/

Nó phát hiện ra dịch vụ theo một Giao diện từ xa và tải về proxy cho bạn, đó là một chủ đề RMI.

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