2009-07-27 27 views
6

Tôi đã tạo một portlet JSR-268 cho Liferay sử dụng các dịch vụ để tương tác với một cơ sở dữ liệu. Tôi có thể triển khai portlet mà không có vấn đề hoặc lỗi, nhưng bảng được xác định bởi các dịch vụ không được tạo ra!Bảng SQL không được tạo khi triển khai tệp WAR tới Liferay

Tôi không nhận được lỗi "không tìm thấy bảng" khi tôi kiểm tra portlet. Tôi hoàn toàn không gặp lỗi gì cả! Bảng này không có trong cơ sở dữ liệu. Tôi đã tìm thấy những thứ khác trên internet nói rằng tôi nên sử dụng tệp "create.sql" đã tạo mà Trình tạo dịch vụ Liferay đã tạo, nhưng tôi không thấy tệp đó ở bất kỳ đâu.

Ai đó có thể giúp tôi không?

Trả lời

10

Bạn chưa bao giờ tạo bảng? Tôi đã có một vấn đề tương tự khi tôi xóa các bảng bằng tay. Tôi nghĩ rằng họ sẽ được tạo ra một lần nữa khi triển khai portlet một lần nữa, nhưng nó đã không xảy ra.

Sau khi nghiên cứu mã nguồn tôi phát hiện ra rằng các cửa hàng Liferay thông tin về các portlets trong bảng servicecomponent và kiểm tra 2 điều trước khi nó thực thi (giả) SQL trong META-INF/tables.sql:

  1. Các build.number trong service.properties phải cao hơn mức đó, được lưu trữ trong servicecomponent,
  2. tables.sql phải khác với số được lưu trữ trong servicecomponent.

Chỉ khi đó tables.sql mới được thực thi.

Một cách dễ dàng để đạt được điều đó, là xóa tất cả các mục nhập trong servicecomponent giải quyết portlet của bạn.

2

Thử xóa mục nhập khỏi bảng servicecomponent. Và triển khai lại portlet của bạn.

delete FROM servicecomponent where buildNamespace="<your table namespace>" 
0

Nếu bạn đang sử dụng serviceBuilder trong Liferay 6.2 khi bạn xác định một thực thể mới trong lược đồ Liferay trong service.xml, lần đầu tiên mà bất kỳ Portlet cố gắng truy cập vào bảng nó sẽ được tạo ra nếu nó không tồn tại .

Có một số vấn đề khi bạn đang sử dụng một lược đồ khác vì đôi khi Liferay không tự động tạo bảng. Sau đó, bạn cần phải lau câu tạo SQL và tạo nó theo cách thủ công và sau đó truy cập nó thông qua LocalServiceUtil.

1

Tôi đã gặp phải sự cố tương tự và giải pháp dưới đây được cung cấp phù hợp với tôi.

bước

  1. Tôi đã thay đổi build.number trong service.properties cao hơn so với lưu trữ trong servicecomponent.
  2. Đã xóa tất cả các tệp xml khỏi thư mục META-INF.
  3. Đã xóa tất cả các tệp sql khỏi thư mục webapp/WEB-INF/sql.

Sau đó xây dựng-dịch vụtriển khai sẽ tạo ra bảng tùy chỉnh mà là defiend trong service.xml tập tin.

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