2010-06-08 27 views
5

Tôi là thương hiệu mới với thế giới Java EE. Là một bài tập để thử và làm quen với Java EE, tôi đang cố gắng tạo một ứng dụng web theo từng cấp, nhưng tôi đang gặp khó khăn một chút về cách tốt nhất là quay lên một dịch vụ trong nền không hoạt động.Mới đối với Java EE; đề xuất kiến ​​trúc cho một dịch vụ/daemon?

Các thông số của dịch vụ:

  • Nó phải mở và giữ một kết nối ổ cắm và nhận thông tin từ máy chủ được kết nối.
  • Có mối tương quan 1 đến 1 giữa người dùng và kết nối ổ cắm mới.

Vì vậy, ý tưởng là người dùng nhấn một nút trên trang web và một nơi nào đó trên máy chủ kết nối socket được mở. Đối với phần còn lại của phiên người dùng (hoặc cho đến khi người dùng nhấn một số loại nút ngắt kết nối), ổ cắm vẫn mở và đẩy thông tin nhận được tới một số cửa hàng tập trung mà servlet có thể truy vấn và trả về cho người dùng thông qua AJAX.

Có cách Java EE nào để xử lý tình huống này không? Đương nhiên những gì tôi nghĩ sẽ làm là viết một ứng dụng Java nghe trên một cổng mà các servlet có thể kết nối và sinh ra các luồng mới mở các socket này, nhưng điều đó dường như rất đặc biệt đối với tôi.

(PS: Tôi cũng mới để Stack Overflow, vì vậy tha thứ cho tôi nếu tôi phải mất một thời gian để tìm trang web ra!)

+0

Bạn có thể mở rộng mục đích mở ổ cắm và đẩy dữ liệu không? Từ webapp của bạn, bạn muốn mở một kết nối đến một ứng dụng khác và đẩy dữ liệu mà webapp đầu tiên có thể truy vấn?Dữ liệu này đến từ đâu và nó trông như thế nào? –

+0

Vì mục đích của câu hỏi này, giả sử trang web là giao diện người dùng cho kết nối telnet. Trên máy chủ, kết nối telnet cần được giữ mở cho đến khi người dùng nói "đóng" hoặc hết thời gian chờ. Kết nối đó cần ghi vào văn bản socket mà người dùng gõ và đọc từ văn bản socket mà máy chủ telnet ghi. Tôi hy vọng rằng sẽ giúp làm rõ! – Kate

Trả lời

4

Có ba container chính trong ngăn xếp Java EE: container Web, hộp chứa EJB và vùng chứa JCA. JCA có nghĩa là cung cấp kết nối gửi đến và đi với các hệ thống của bên thứ ba, chẳng hạn như cơ sở dữ liệu, nhà môi giới JMS hoặc các hệ thống khác.

Cách "đúng" để tạo kết nối với máy chủ Telnet từ EJB hoặc ứng dụng web sẽ sử dụng trình kết nối JCA cho điều đó.

[client] <-|-> [web] <--> [ejb] <--> [jca] <-|-> [telnet server] 

Ống | biểu thị ranh giới từ xa. Giả sử EJB là người dân địa phương, nhưng chúng là tùy chọn; bạn cũng có thể sử dụng trình kết nối JCA từ lớp web.

Tôi khuyên bạn nên điều tra xem có triển khai hiện tại hay không. Một google nhanh chóng đã cho tôi kết quả này: JCA connector for Telnet client.

Cách tiếp cận khác (nhưng không tuân thủ thông số kỹ thuật), là bắt đầu chuỗi nghe ổ cắm từ ServletContextListener. Chủ đề sẽ chạy trong lớp web và bạn có thể quản lý kết nối với máy chủ Telnet như bạn muốn.

Tôi đề nghị bạn cũng xem xét câu hỏi SO khác: Java EE application that listens to a socket.

Trong cả hai trường hợp, bạn có thể cần phải tìm hiểu cách lưu trữ tạm thời thông tin nhận được bởi máy chủ Telnet (cửa hàng tập trung mà bạn đề cập) mà sau này sẽ được hiển thị trong giao diện web. Điều này lại có vấn đề với Java EE, bởi vì đặc tả cấm sử dụng trạng thái toàn cầu. Ví dụ: bạn không nên sử dụng trường static theo lý thuyết. Nhưng trong thực tế, nó hoạt động nếu bạn chỉ có một phiên bản ứng dụng đang chạy.

Đó chỉ là một bản phác thảo thô, nhưng tôi hy vọng nó sẽ giúp ích.

+0

Điều này có vẻ đầy hứa hẹn! Bạn có nói đây vẫn là một bài viết hay để học hỏi (được viết vào tháng 12 năm 2001): http://java.sun.com/developer/technicalArticles/J2EE/connectorclient/resourceadapter.html – Kate

+1

@Kate Liên kết mà bạn đề cập đến là ok , nhưng IMHO, tài liệu tốt nhất về JCA để bắt đầu là "Tạo bộ chuyển đổi tài nguyên với J2EE Connector Architecture 1.5". Mã tương ứng có thể được tìm thấy trong các mẫu J2EE đi kèm với SDK. http://developers.sun.com/appserver/reference/techart/resource_adapters.pdf Nếu không thì google cho Frank Kievet, tôi nghĩ anh ấy có những bài viết tuyệt vời. Các tài nguyên khác của tôi bao gồm hai bài đăng trên blog mà tôi đã viết về nó http://www.ewernli.com/web/guest/52 http://www.ewernli.com/web/guest/51 và một vài câu trả lời khác của SO: http : //stackoverflow.com/search? q = người dùng% 3A217862 + jca. – ewernli

+0

Tôi không biết hệ thống xếp hạng của Stack Overflow hoạt động như thế nào, nhưng tôi chắc chắn sẽ kiểm tra hai bài viết này và tìm cách giải quyết một giải pháp. Nếu tôi không gặp phải bất kỳ vấn đề khó hiểu nào, tôi sẽ đánh dấu câu trả lời của bạn như một giải pháp! Cám ơn rất nhiều! – Kate

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