2016-06-23 12 views
5

Gần đây tôi đã có được niềm vui khi được phép làm nổi bật phiên bản của sự phụ thuộc Hibernate (trong số những người khác) trong một cơ sở mã di sản có kích thước trung bình (từ 3.x đến 5.2). Bản thân mã này đã được hơn 10 năm nhưng vẫn được sử dụng hàng ngày. Vì vậy, ngay cả sau khi tăng phiên bản và chuyển càng nhiều các cuộc gọi API ra khỏi khu vực hiện tại của chúng tôi (tìm hiểu cách thực hiện SchemaExport là một trải nghiệm thú vị), tôi vẫn không thấy điều này như một sự chuyển đổi hoàn toàn.Đường dẫn nâng cấp dự định cho các ứng dụng Hibernate cũ là gì?

Tôi tự hỏi đường dẫn nâng cấp dự định dành cho người dùng cũ là hệ thống doanh nghiệp sẽ có từ 10 đến 15 năm và đôi khi bạn cần chuyển sang phiên bản phụ thuộc mới hơn để nhận các sửa lỗi hoặc tính năng cần thiết.

Những điểm sau đây là phần nào vẫn còn mở:

  • Không có cách nào rõ ràng hoặc tự động để di chuyển thông tin bản đồ .hbm.xml để chú thích JPA. Tôi biết việc di chuyển thủ công sẽ rất dễ xảy ra lỗi và không phải tất cả các khái niệm đều có bộ phận truy cập rõ ràng hoặc rõ ràng.

  • Hiện chúng tôi nhận được rất nhiều cảnh báo không dùng nữa (org.hibernate.orm.deprecation) về việc sử dụng API tiêu chí cũ của chúng tôi nhưng cũng không có đường dẫn nâng cấp rõ ràng. Người ta không thể chỉ viết lại toàn bộ mã truy cập db của một ứng dụng đến một API hoàn toàn khác biệt và chi tiết hơn mà chắc chắn sẽ hoạt động khác nhau ở các trường hợp cạnh nhất định.

  • Có vẻ như chúng tôi sử dụng rất nhiều truy vấn gốc và các phiên bản org.hibernate.transform.ResultTransformer nhưng dường như không còn được dùng nữa mà không có chỉ dẫn về cách giải quyết vấn đề này.

Nói chung, tôi tìm thấy tài liệu về việc không dùng nữa và dự định nâng cấp đường dẫn trên mặt của Hibernate. Tôi hiểu rằng đó là một dự án mã nguồn mở và rằng họ không muốn duy trì các API cũ mãi mãi nhưng tôi vẫn cảm thấy một chút mất mát và tôi không tin đây là ứng dụng Java kế thừa duy nhất hiện có vẫn đang được sử dụng hôm nay.

+0

Hầu hết các mối quan tâm của bạn đều được đề cập đến bởi sự tồn tại của các bài kiểm tra tích hợp. Cho rằng bạn làm việc trên các hệ thống cũ, tôi lấy nó mà bạn không có. Đó sẽ là vấn đề chính của bạn, không phải thực tế là Hibernate phát triển theo thời gian. Tôi đã thực hiện nâng cấp tương tự nhưng cũng nâng cấp máy chủ (JBoss 5.1 lên Wildfly 9) và JSF (1.2 + JBoss Seam thành JSF 2.2 + Primefaces) - đó là một trải nghiệm đau đớn mất 6 tháng thiết kế lại mã. Đó chỉ là cách nó là với các hệ thống di sản - và tại sao nhiều người chọn không nâng cấp. – Gimby

+0

Các mẫu và công nghệ nào đang sử dụng trong ứng dụng của bạn? Tôi có nghĩa là bạn ứng dụng sử dụng MVC, cho lớp dịch vụ để bạn sử dụng Spring, EJB hoặc một cái gì đó như thế này. –

+0

Tôi có thể đề xuất bạn nâng cấp lên 5.1 chứ không phải 5.2 chưa? 5.2 là rất nhiều về "lát đường" đối với Hibernate 6, và không chấp nhận một số điều mà chúng ta biết sẽ được gỡ bỏ, nhưng thực sự không phải tất cả mọi thứ là rõ ràng được nêu ra. Ngoài ra một số thay đổi đã đi một chút quá xa, và chúng tôi đang khôi phục một chút trong 5.2.1, tức là https://hibernate.atlassian.net/browse/HHH-10877 – Sanne

Trả lời

1

Tôi hiểu ý của bạn là gì. Trong thực tế, gần đây tôi đã nhìn thấy tất cả các loại câu hỏi trên diễn đàn của chúng tôi về di chuyển từ 3.x đến 4.x và 5.x.

  1. Tôi nghĩ chúng ta nên có trang đích di chuyển làm trang bắt đầu cho mọi lần di chuyển. Bằng cách này, người dùng sẽ phải đi đến một trang duy nhất và tìm thấy mọi thứ họ cần.
  2. Chúng tôi không có công cụ HBM-to-Annotations tự động. Tuy nhiên, có một sự thay thế. Bạn có thể làm HBM -> cơ sở dữ liệu, và sau đó sử dụng công cụ kỹ sư đảo ngược để tạo chú thích từ lược đồ cơ sở dữ liệu của bạn.
  3. Tiêu chí cũ không được chấp nhận vì chúng tôi không thể đủ khả năng duy trì hai API tiêu chí nữa. Ngoài ra, các Tiêu chuẩn JPA là nâng cao hơn (nó có kiểu truy vấn an toàn và Metamodel). Thật không may, không có di chuyển tự động từ di sản đến API tiêu chí. Nhưng sau đó, ngay cả khi bạn có hàng trăm cuộc gọi phương thức như vậy, bạn có thể dễ dàng di chuyển chúng một cách tự động (regex/perl/vi) hoặc theo cách thủ công. Nó sẽ không mất nhiều để làm điều đó.
  4. ResultTransformer sẽ được thay thế bằng một cơ chế mới có thể tận dụng tốt hơn lambdas. Vì lý do này, giao diện hoặc giao diện mới sẽ phải là các giao diện chức năng.
+0

Cảm ơn bạn đã dành thời gian trả lời bộ sưu tập của tôi không phải là rất Những câu hỏi cụ thể. :) – aeisele

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