2011-10-14 25 views
10

Tôi khá mới đối với Java EE và đã phải vật lộn với sự chậm chạp của quá trình triển khai, và tự hỏi liệu tôi có làm điều gì sai không. Tôi có kinh nghiệm với Django, nơi những thay đổi mã ngay lập tức xảy ra, và có vẻ như việc triển khai các ứng dụng Java EE nóng một chút khó hiểu - có nhiều điều yêu cầu triển khai nóng (Glassfish, Eclipse hotdeploy, Jetty hotdeploy, JRebel, v.v.).Tái triển khai các ứng dụng Java EE ngay lập tức

Dự án của tôi là dự án Maven và tôi đang sử dụng Netbeans để triển khai. Trang này sử dụng khung công tác Spring, JSF và Hibernate.

Trong Netbeans, Triển khai trên Lưu, theo ảnh chụp màn hình sau có vẻ được bật, nhưng việc nhấp/không thể nhấp là không thể vì nó tuyên bố nhận thông tin từ tệp pom.xml của tôi (mặc dù không có trường nào trong pom của tôi .xml (chỉ phụ thuộc)). enter image description here

Bây giờ, các thay đổi đối với một số tệp có vẻ có hiệu lực ngay lập tức. Chúng bao gồm: - file JSF - file tĩnh

Thay đổi sau đây yêu cầu triển khai: - Bất kỳ tập tin XML - nộp Bất kỳ tài sản, thậm chí tính nội địa hóa các file - Bất kỳ tập tin java

Những thay đổi đối với những yêu cầu tôi triển khai theo cách thủ công và triển khai lại mất nửa phút mặc dù hiện tại tôi chỉ có 2-3 lớp, về cơ bản là một lớp người dùng và lớp ủy quyền. Dự án này chỉ cho phép đăng nhập vào lúc này, và mặc dù vậy, việc biên dịch mất khoảng vài giây; và các container (Glassfish) dường như tiêu thụ khoảng 600 MB RAM và thậm chí cung cấp cho PermGen lỗi sau một vài triển khai và tôi cần phải giết quá trình java bằng cách sử dụng Task Manager. (Tôi đã đọc rằng điều này liên quan đến việc thu gom rác bị rò rỉ sau mỗi lần triển khai lại, và tôi thậm chí còn sử dụng jhat để tạo hồ sơ, nhưng được trình bày với danh sách hàng nghìn lớp, lớp học của tôi, lớp Spring, Hibernate, v.v.)

Tôi cũng đã nghe về jrebel, và thử chạy nó, nhưng có vẻ như nó không tương thích với phiên bản Netbeans (7.0) của tôi và mặc dù nó có vẻ chạy, bất kỳ sửa đổi nào đối với bất kỳ tệp java nào vẫn yêu cầu triển khai lại.

Có bất kỳ điều gì tôi có thể làm để khắc phục những vấn đề này hay chỉ là bình thường trong Java EE để đợi khoảng 1 phút sau mỗi thay đổi đối với bất kỳ tệp Java nào? Vấn đề này làm giảm đáng kể năng suất.

Đây là sản lượng Glassfish của tôi khi triển khai ứng dụng: http://pastebin.com/7FhZ6AVh

Trả lời

5

Tôi đã nguồn không đáng tin cậy cũng không chính thức tìm thấy nhưng vì bạn không có câu trả lời tôi muốn chỉ ra hai điều tôi đã phát hiện ra.

Đầu tiên là this FAQ trên trang NetBeans mô tả cách bật biên dịch khi lưu cho dự án Maven. Dường như cài đặt này bị tắt theo mặc định và chỉ được bật theo mặc định cho các thử nghiệm. Để thuận tiện:

Tới hộp thoại thuộc tính dự án, Compile bảng điều khiển, để bật tính năng này để thực hiện nguồn chính là tốt.

Thứ hai là, và tôi phải nhấn mạnh rằng tôi hoàn toàn không hiểu điều này hoàn toàn, có vẻ như có hai cách khác nhau mà NetBeans triển khai một ứng dụng web.Cách đầu tiên là triển khai tại chỗ có vẻ giống như triển khai tệp .war đến máy chủ theo cách thủ công. Thứ hai là một triển khai gia tăng, mà nếu nó là bất cứ thứ gì như biên dịch gia tăng thì có nghĩa là khi ứng dụng của bạn được triển khai nóng, bạn chỉ triển khai các tệp đã thay đổi.

Triển khai tại chỗ dường như là phương pháp triển khai mặc định khi bạn nhấp vào Run hoặc Deploy từ trình đơn ngữ cảnh của dự án. Việc triển khai gia tăng xảy ra khi dự án của bạn đã được triển khai và bạn nhấp lại vào Run (hoặc sử dụng nút thanh công cụ Run).

Tôi muốn chỉ ra rằng Câu hỏi thường gặp về NetBeans, mặc dù trên trang web netbeans.org không phải là một ấn phẩm chính thức. Bất kỳ ai cũng có thể tạo Câu hỏi thường gặp và thông tin có thể và sẽ trở nên lỗi thời mà không cần sửa đổi.

Sửa: Sau khi một sự phản ánh nhỏ, tôi đã quyết định rằng cái gọi là triển khai gia tăng không phải là một cách khác nhau của việc triển khai nó chỉ là lần thứ hai bạn Run ứng dụng của bạn nó một triển khai gia tăng.

Sửa: Chú ý rằng các hướng dẫn ở trên trỏ bạn đến Compile bảng như trái ngược với Run bảng điều khiển mà bạn đã chọn trong ảnh chụp màn hình của bạn. Dưới đây là ảnh chụp màn hình của tôi cho thấy rằng bạn cần phải chọn for both application and test execution trong thả Compile bảng xuống và mặc định là for test execution only

0

"biên dịch vào Save" chậm lại những điều rất nhiều cho tôi, nhưng điều khác tôi đã tìm thấy sau đó là nút "Áp dụng Thay đổi Mã" trong Netbeans, chỉ hiển thị trong chế độ Gỡ lỗi. (Nút màu xanh lục ở bên phải trong hình)

Điều này rất hữu ích khi áp dụng các thay đổi mã Java; nó không hoạt động mỗi lần, nhưng tôi nghĩ rằng nó hoạt động phần lớn thời gian nếu thay đổi không phải là một phương pháp bổ sung và đậu được yêu cầu phạm vi. Tôi nghĩ rằng điều này làm những gì biên dịch trên Lưu bằng tay, nhưng nó tốt hơn so với triển khai lại.

Apply Code Changes

+0

"Áp dụng các thay đổi mã" là hotswap. Nó sẽ không hoạt động nếu bạn đang thay đổi chữ ký của lớp. – Daniel

2

JRebel tương thích với NetBeans 7.0 (http://plugins.netbeans.org/plugin/22254/jrebel-netbeans-plugin) và trên thực tế nó là tương thích với bất kỳ IDE ra khỏi đó.

1

Đây là một video tuyệt vời bởi Geertjan Wielenga từ nhóm NetBeans mà đi qua thành lập JRebel trên NetBeans 7.2.1 và GlassFish 3.1.2:

Làm thế nào để Bắt đầu với JRebel trong NetBeans IDE: http://www.youtube.com/watch?v=kveXKv2q4Ec

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