2009-04-01 30 views
10

Tôi đang cố gắng xây dựng ứng dụng cơ sở dữ liệu bằng cách sử dụng GWT 1.5.3. Tôi sử dụng chú thích JPA với các đối tượng của mình. Có vẻ như trong chế độ lưu trữ của GWT RPC hoạt động tốt. Nhưng khi tôi cố gắng biên dịch ứng dụng của mình bằng trình biên dịch GWT, tôi nhận được các lỗi như: "Nhập khẩu javax.persistence không thể được giải quyết", "Thực thể không thể được giải quyết thành một loại". toplink-essentials.jar đã được đưa vào đường dẫn dự án của tôi. Tôi cần những cài đặt nào khác để giải quyết vấn đề này?GWT với JPA

Trả lời

1

Ok, tôi đã tìm thấy những gì tôi đã mất tích. Tôi cần bao gồm jpa-annotations-source.jar trong đường dẫn trình biên dịch GWT của tôi trong kịch bản lệnh myapp-compile.cmd (hoặc trong tệp xây dựng kiến). Bằng cách này, bất cứ ai có thể cho tôi biết nguồn gốc của tập tin jpa-annotations-source.jar này?

+2

Ngoài ra, tôi nên nói rằng trong GWT 1.5 không cần bao gồm các bình trên. Thay vào đó, chỉ cần sử dụng jar sản xuất như toplink-necess.jar; tất nhiên chuyển nó cho trình biên dịch GWT của bạn để biên dịch thành công; và KHÔNG viết trong app.gwt.xml của bạn – synergetic

6

Bạn cần bao gồm mã nguồn cho chú thích JPA trong đường dẫn xây dựng cho dự án GWT của bạn. Xem ở đây để biết thêm chi tiết:

http://code.google.com/p/google-web-toolkit/issues/detail?id=1830&can=1&q=jpa

Cụ file jar này sẽ khắc phục vấn đề của bạn:

http://google-web-toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar

+0

Liên kết đã thay đổi địa chỉ http: // google-web- toolkit.googlecode.com/issues/attachment?aid=1475633892125294312&name=jpa-annotations-source.jar&token=672fe08de2c4a90493f62b6daaf3ae1e. Không nên phụ thuộc vào liên kết như chúng được tái tạo định kỳ động. Nên google cho "jpa-annotations-source.jar google-web-toolkit.googlecode.com/issues/attachment". –

1

Tôi cũng đang làm việc với JPA < -> GWT chuyển đổi dữ liệu, vv

Trong một nỗ lực để loại bỏ các lớp DTO tôi đã sử dụng Gilead quá.

Phản đối của tôi ở đây là về việc dịch javax.persistence. Để tránh điều này, tôi sử dụng các khai báo ánh xạ JPA XML (orm.xml)

2

Vấn đề chung của JPA và GWT là chính GWT không hỗ trợ các lớp JPA ưa thích, vì vậy bạn chỉ cần thực hiện các thực thể liên tục POJO đơn giản DTO java.io.Serializable và có các chú thích tài nguyên JPA đơn giản. Bạn cần phải tạo các lớp thực thể trong phạm vi của khách hàng GWT hoặc có hành nó theo các gói yourproject.client hoặc thêm chúng với

đường dẫn nguồn = "khách hàng"

nguồn path = "folderOfYourEntities"

trong tệp YouProject.gwt.xml của dự án GWT. Điều này sẽ bao gồm các đối tượng thực thể trong trình khách GWT để chúng có thể sử dụng chúng trên phía máy khách của RPC. DAO phải ở phía máy chủ và có thể chứa bất kỳ thứ gì mà bạn hỗ trợ.

Vấn đề bạn có bây giờ là khi biên dịch, trình biên dịch GWT nói rằng nó không biết những gì nhập khẩu cho các phụ đề JPA là trong các lớp thực thể DTO. Đó là lý do tại sao bạn cần lớp javax.persistence và mã nguồn. Tham chiếu jpa-annotation-source.jar của Rustmyself hoạt động. Nó chỉ là các tệp lớp được biên dịch javax.persistence và các tệp mã nguồn cộng với một Persistence.gwt.xml. Nó là một mô-đun GWT đơn giản cho gói javax.persistence. Nếu bạn biết cách tạo mô-đun GWT của riêng mình, bạn nên có vấn đề khi thực hiện tất cả công việc này. Nhân tiện, nguồn chính thức cho Java EE có thể được tìm thấy trên phần xây dựng trang web của glassfish wiki.glassfish.java.net

Có nhiều giải pháp khác bao bọc các thực thể PU ưa thích của bạn cho các đối tượng đơn giản tự động sử dụng proxy hoặc để tải chúng vào thời gian chạy. Chúng hoạt động, nhưng không phải là giải pháp tối ưu. Cách thực hành tốt nhất là làm cho mọi việc trở nên đơn giản và mạnh mẽ ngay từ đầu bằng cách có các thực thể POJO JPA DTO trên ngữ cảnh máy khách GWT và DAO toàn diện trên máy chủ.

GWTPersistence Ví dụ
Tôi đã thêm một ví dụ làm việc thực tế về cách làm cho GWT và JPA làm việc liên tục. Đây là một dự án NetBean với mã nguồn và tệp triển khai. Xem GWTPersistence on NingZhang.info

1

Đơn giản, hãy giữ phiên bản khác của Thực thể của bạn nhưng không có chú thích!

-1

Rebounding trên bình luận synergetic, bạn bây giờ (từ GWT 1.5) chỉ cần thêm

<source path='javax.persistence'/> 

để Module.gwt.xml bạn

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