2011-08-04 70 views
6

Tôi là người mới làm quen với JavaEE nhưng có một số kinh nghiệm với ASP.NET MVC. Với ASP.NET MVC, tôi biết chúng ta có thể tạo kiến ​​trúc plugin với ứng dụng web ASP.NET MVC để bạn có thể tạo một dll với cấu trúc MVC và đặt nó vào ứng dụng web ASP.NET MVC hiện có để làm cho nó hoạt động mà không cần biên dịch web ứng dụng. http://www.wynia.org/wordpress/2008/12/05/aspnet-mvc-plugins/Kiến trúc Plugin Spring MVC

Tôi tự hỏi liệu loại kiến ​​trúc này có thể thực hiện với Spring MVC hay không. Ví dụ, khi tôi tạo một tệp jar (hoặc chiến tranh) với cấu trúc MVC và đặt nó vào ứng dụng web Spring MVC hiện có, nó sẽ hoạt động mà không cần biên dịch lại ứng dụng web. Nếu điều này là có thể, làm thế nào tôi có thể đạt được điều đó? Bất kỳ tài liệu tham khảo sẽ được đánh giá cao.

Trả lời

2

Có thể không biên dịch lại, nhưng có thể không phải khởi động lại. Bạn có thể tạo một .jar mà bạn thả vào thư mục WEB-INF/lib. Bằng cách sử dụng classpath scanning, bạn sẽ có thể triển khai bộ điều khiển mới của mình khi khởi động. Bạn có thể bỏ qua toàn bộ khung nhìn và trực tiếp xuất dữ liệu ra ServletResponse. Hiển thị một khung nhìn từ một cái bình có thể hoặc không thể, tôi không biết.

+0

Nghe có vẻ hay. Khởi động lại phần là OK. Tôi tin rằng đó là trường hợp tương tự trong ASP.NET MVC. Cảm ơn cậu. – Jon

1

Có vẻ như bạn muốn tìm kiếm "hotdeploy".

Điều bạn đang yêu cầu không phải là tính năng của Spring, mà là tính năng của JVM và máy chủ ứng dụng. Máy chủ ứng dụng có thể thấy rằng thực sự các lớp của bạn đã thay đổi và sử dụng một số thủ thuật ClassLoader thông minh, nó có thể tải các phiên bản mới cho JVM runinng khi chúng trở nên có sẵn. Java đã không thực sự được thiết kế để làm việc như thế này vì vậy có một số vấn đề (ClassLoader, rò rỉ bộ nhớ, hotdeploy là từ khóa tốt để tìm thêm về các vấn đề tiềm năng và các giải pháp có thể). Tôi sẽ không khuyên bạn nên sử dụng sản phẩm này nhưng nó có thể tiện dụng trong quá trình phát triển.

Vì đây là một tính năng của máy chủ ứng dụng, chi tiết thực tế phụ thuộc vào máy chủ ứng dụng cụ thể và được giải thích trong tài liệu của nó.

Nếu bạn chỉ đơn giản là muốn một số plugin-magic, không phải hotdeploy thực tế, có những thứ khác bạn có thể làm. Một ClassLoader tùy chỉnh có thể tải các lớp từ bất kỳ nguồn nào (tệp, mạng, cơ sở dữ liệu ..) mà bạn muốn và sau đó bạn có thể khởi tạo và sử dụng chúng với sự phản chiếu. (Đây là những gì sẽ xảy ra khi bạn triển khai chiến tranh với Tomcat/JBoss hoặc bất cứ điều gì). Truy cập và tự động tải lại các tài nguyên không phải lớp trong các tệp jar/war là cách dễ dàng hơn.

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