2012-03-16 23 views
7

Tôi có một ứng dụng phức tạp vừa phải sử dụng POJO, và bây giờ đến để di chuyển nó sang EJB3.1 để nó có thể được triển khai trực tuyến, truy cập thông qua dịch vụ REST và hưởng lợi từ môi trường container (kiên trì là quan trọng nhất, nhưng giao dịch sẽ hữu ích quá).Java EE 6 - Mẫu đối tượng miền liên tục - bất kỳ thành công nào?

Tôi đã rời khỏi Java EE kể từ ngày J2EE, và tôi đang vật lộn để có được cái đầu của tôi xung quanh "mất mát" của đậu thực thể. Tôi đã mất một thời gian để nhận ra rằng các thực thể trong EJB3.1 không thực sự Đậu theo nghĩa cũ ... :) Tôi đã đọc một số sách EJB3 bao gồm sách hướng dẫn của O'Reilly Enterprise JavaBeans 3.1 ", tất cả đều giải thích các khái niệm và thành phần của EJB3 nhưng không phải là các tùy chọn mẫu triển khai.

Trong nghiên cứu và điều tra của tôi tìm kiếm các mẫu Java EE 6, tôi thực hiện theo cách tiếp cận của Adam Bien - đặc biệt là mẫu "Persistent Domain Objects" (PDO) (trong cuốn sách của ông, nhưng tóm tắt ở đây: http://download.java.net/general/podcasts/real_world_java_ee_patterns.pdf) để cung cấp sự phức tạp và ít sức mạnh nhất với ứng dụng POJO hiện tại của tôi. PDO cũng liên kết chặt chẽ với các triết lý và cách tiếp cận hướng đối tượng truyền thống, và thực sự thu hút tôi.

Thay vì thực hiện một cuộc tranh luận về PDO, tôi muốn nghe ý kiến ​​của những người đã thực hiện nó và những gì đã làm việc so với nơi bạn gặp khó khăn. Đặc biệt, tôi muốn tìm hiểu cách bạn thực hiện các cuộc gọi từ thực thể JPA vào các dịch vụ khác trong vùng chứa (như các cuộc gọi tới các hạt phiên không trạng thái, v.v.).

Tôi cũng muốn biết nếu có các lựa chọn thay thế cho mẫu PDO cho phép tôi duy trì cấu trúc ứng dụng (sử dụng đa hình v.v.) mà không phải tạo bean phiên và thực thể JPA cho mọi lớp trong mô hình của tôi. (Tôi không muốn làm điều đó một phần vì tập thể dục lớn cần thiết để tái cấu trúc tất cả các bài kiểm tra đơn vị và tích hợp, và một phần vì - theo như tôi thấy - tôi sẽ cố gắng nhân rộng mối quan hệ đối tượng 1toMany của mình trên đậu phiên của tôi quá mà có vẻ điên).

Có ai có bất kỳ kinh nghiệm chia sẻ - hoặc nếu bạn muốn chỉ ra tôi là một thằng ngốc và đã bỏ lỡ một cái gì đó cơ bản trong Java EE 6 rằng sẽ là "chào đón" quá :)

TIA

Trả lời

3

Không trả lời như vậy có lẽ tôi là người duy nhất làm việc đó;) đối với bất cứ ai khác tìm kiếm gợi ý, tôi đã tìm thấy:

  • mô hình đối tượng của bạn cần thay đổi lớn. Bạn không thể sử dụng Maps hoặc Danh sách giao diện giống như bạn làm trong ứng dụng không phải JPA, vì JPA không thể giao diện "xử lý" , bạn cần phải duy trì các lớp (trừu tượng). Hibernate có chú thích @Any và @ManyToAny, nhưng chi phí (hiệu suất, chức năng và mã hóa) là đáng kể (IMHO). Nếu bạn có thể thực hiện một hệ thống phân cấp lớp trừu tượng ghê tởm thì bạn nên. YUK!

  • Nếu bạn có mô hình đối tượng phức tạp mơ hồ (hơn sáu mối quan hệ giữa các đối tượng), bạn sẽ kết thúc với các lệnh LOTS of JOIN trong mã SQL được tạo bởi công cụ JPA. Tôi đọc ở đâu đó> 6 JOINS đặt một tải cao trên cơ sở dữ liệu (chỉ là một quy tắc-của-ngón tay cái tôi chắc chắn). MySQL có một giới hạn cứng 61 tham gia. Âm thanh điên cuồng cao, chắc chắn bạn sẽ không bao giờ trúng được điều đó ?! Nếu bạn có một hệ thống phân cấp đối tượng trừu tượng và một vài mối quan hệ giữa các đối tượng, nó sẽ sớm được thêm vào!

Tôi chưa tìm được cách để giải quyết vấn đề đầu tiên.Nó cảm thấy sai lầm khi ram-in rất nhiều lớp cơ sở trừu tượng thay vì giao diện, nhưng nó không thể tránh khỏi như xa như tôi có thể nhìn thấy. Xin vui lòng cho tôi biết nếu không! Vấn đề thứ hai có thể được quản lý bằng cách sử dụng lazy-fetch trên các mối quan hệ đối tượng, hoặc bằng cách sử dụng mẫu Gateway của Adam và các phiên kiên trì mở rộng (chứ không phải là đậu phiên không trạng thái tải và lưu mô hình trên mọi cuộc gọi). Quay lại đầu trang Tôi đang đi với thứ hai cho đến nay - nhưng đã không đến một điểm mà tôi có thể tải-thử nghiệm về bộ nhớ và sử dụng cơ sở dữ liệu được nêu ra. Chúng ta sẽ thấy!

+0

Chúc mừng bạn đã khắc phục! Khi bạn có thể, hãy đảm bảo đánh dấu câu trả lời của bạn là 'được chấp nhận' để người khác sẽ thấy câu hỏi của bạn đã được trả lời và có thể học hỏi từ giải pháp của bạn. Chúc mừng ~ –

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