2012-05-04 14 views
6

Chúng tôi có một ứng dụng web lớn, khó sử dụng nhưng khá ổn định được viết bằng Tapestry 4.1, mà chúng tôi đang tìm cách dần dần di chuyển khỏi. Cuối cùng, chúng tôi đang tìm cách phát triển một số chức năng mới trong Grails. Khách hàng của chúng tôi không bao giờ nên biết sự khác biệt và nếu có thể, không ai trong nội bộ, ví dụ: trong các dịch vụ cài đặt, cần phải quan tâm - lý tưởng là ứng dụng Grails sẽ ở trong cùng WAR như mã Tapestry hiện có, chỉ với GrailsDispatcherServlet được định cấu hình cho một đường dẫn cụ thể hơn. Nó cũng quan trọng là có tối thiểu thay đổi đối với quá trình xây dựng quái vật cho ứng dụng hiện có - làm lại hệ thống xây dựng (hiện tại là Ant, chuyển sang Maven) trong Gant và Ivy không phải là một lựa chọn. Và nó sẽ là tốt đẹp nếu chúng ta có thể làm việc với WARs nổ để tải lại trực tiếp trong quá trình phát triển.Tích hợp Grails với ứng dụng web hiện có

câu hỏi, sau đó:

  • Đây có phải là có thể?
  • Nếu có, tôi bắt đầu từ đâu?
  • Nếu không, cách tiếp cận tốt nhất tiếp theo là gì?
  • Tôi cần xem điều gì?

Lưu ý bằng cách chúng tôi sẽ không sử dụng GORM; tất cả dữ liệu của chúng tôi đến từ các dịch vụ web, mà chúng tôi đã có các lớp tin nhắn và miền Java.

+0

Bạn có sử dụng chế độ ngủ đông để lưu trữ dữ liệu hoặc bạn có sử dụng thứ gì khác không? – allthenutsandbolts

+0

chỉ là một vài suy nghĩ - làm thế nào về việc tạo ra các ứng dụng grails một cách riêng biệt, và sau đó đóng gói cuộc chiến của ứng dụng grails với chiến tranh của ứng dụng gốc, như là một tập tin .ear? Bằng cách đó, bạn có thể giữ bản dựng ban đầu của mình, giữ cho grails hoạt động theo cách của nó và chỉ cần thêm bước bổ sung ở cuối để xây dựng tệp .ear. Các câu hỏi lớn sẽ là mức độ tích hợp giữa hai yếu tố này, điểm tích hợp là gì và cách rút gọn url thích hợp để làm cho nó xuất hiện liền mạch. – GreyBeardedGeek

+0

Bên ngoài thực tế là bạn sẽ sử dụng Java thay vì Groovy có vẻ như bạn có thể được phục vụ tốt hơn bằng cách làm Spring MVC (một thành phần chính của Grails). –

Trả lời

1

Bạn có thể chỉnh sửa các mẫu cho web.xml để thay đổi ánh xạ servlet bằng cách chạy grails install-templates lệnh

Bạn có thể sử dụng Ant & Maven (hoặc Gradle) để xây dựng một ứng dụng Grails nhưng vì không phải là " tiêu chuẩn "phương pháp kinh nghiệm của tôi đã được rằng một số tinh chỉnh nhỏ có thể là cần thiết. Tôi đã sử dụng tích hợp Ant (sử dụng ivy cho các phụ thuộc) để xây dựng và sử dụng Gradle để bọc Ant và sửa đổi xây dựng cho các yêu cầu đặc biệt.

Vấn đề bạn có thể gặp phải là kịch bản Gant là lõi của Grails và nhiều thứ xảy ra trong các tập lệnh đó (tùy thuộc vào plugin bạn sử dụng) có thể gây ra sự cố khi kết hợp hai bản dựng với nhau viết với trường hợp sử dụng của bạn trong tâm trí.

2

Tin vui: Có, có thể.

Tin xấu: Đó là một chút lông.

Có ít nhất 2 cách:

  1. Theo đề nghị của Dylan, sửa đổi Grails xây dựng để phù hợp với ứng dụng hiện tại của bạn, với một số điều chỉnh.
  2. Tạo một mục tiêu Ant khác kết hợp tệp WAR hiện có với tệp WAR được tạo bởi Grails.

Tùy chọn đầu tiên, sửa đổi cấu trúc Grails. Nguy cơ là khi Grails cập nhật phiên bản, Grails build tùy biến và được tinh chỉnh có thể thất bại, và bạn sẽ kết thúc ở đây cũng không có ở đó. Việc sửa lỗi này sẽ đòi hỏi kiến ​​thức sâu sắc về cách mà khung công tác tạo ra bản dựng. Vì đây là cuộc gặp gỡ ban đầu của bạn với một khuôn khổ mới, có lẽ đường cong học tập sẽ quá dốc.

Tôi muốn thứ hai, vì bạn không cần phải gây rối với Grails. Bạn cần phải biết cơ sở, cách cấu hình web.xml hoạt động như thế nào. Tôi cho rằng bạn đã có kiến ​​thức này vì bạn cũng đã có bản dựng Ant của riêng bạn. Có lẽ đây là con đường kháng cự ít nhất.

Nhược điểm của phương pháp thứ hai sẽ rất khó để có WAR phát nổ trong quá trình phát triển. Nhưng nếu bạn có thể tách ứng dụng cũ và ứng dụng mới mà không cần phải thử nghiệm chúng với nhau trong quá trình phát triển, bạn sẽ có một thời điểm tốt khi phát triển trong Grails bằng cách sử dụng máy chủ phát triển nhẹ của họ.

Bước tiếp theo sẽ từng chút một là làm cho ứng dụng cũ có thể chạy dưới Grails như thành phần Java được gọi bởi Grails.