Máy ứng dụng của Google cho Java - Phần 1: Rồ máy lên
Tóm tắt: Bạn có nhớ khi mà Máy ứng dụng của Google (Google App Engine) chỉ
dành cho những người lập trình Python (Pythonistas)không? Những ngày đen tối.
Google Inc đã mở nền tảng điện toán đám mây của mình cho các nhà phát triển
Java™ trong tháng 4 năm 2009. Trong loạt bài viết ba phần này, Rick Hightower,
một huấn luyện viên và tác giả viết về công nghệ Java giúp bạn bắt đầu với nền
tảng tin cậy, vững chãi và đầy vui thú này để phát triển ứng dụng dựa trên Java.
Trong bài này, bạn sẽ có được một tổng quan về lý do tại sao Máy ứng dụng của
Google cho Java có thể là nền tảng để tiếp tục phát triển những ứng dụng sát thủ
(N.D: “killer app”tiếng lóng của các lập trình viên, để chỉ một ứng dụng được viết
tài tình, đặc biệt hữu ích, hàm ý nó giống như các sát thủ đối với người chơi những
trò chơi điện tử), có khả năng mở rộng cao của bạn, sau đó bắt đầu sử dụng các
trình cắm thêm (Plugin) củaGoogle cho Eclipse để xây dựng hai ứng dụng ví dụ:
một dựa trên bộ công cụ Web của Google (Google Web Toolkit -GWT) và một
dựa trên API Servlet của Java. Bạn sẽ tự mình tìm hiểu Máy ứng dụng của Google
cho Java làm nên sự khác biệt như thế nào, cả trong việc xây dựng một ứng dụng
từ đầu lẫn trong việc triển khai nó dành cho số người truy cập lên đến năm triệu.
(Và đó mới chỉ là phiên bản miễn phí.)
* * This is the entry point method. */ public void onModuleLoad() { final Button sendButton = new Button("Send"); final TextBox nameField = new TextBox(); nameField.setText("GWT User"); // You can add style names to widgets sendButton.addStyleName("sendButton"); // Add the nameField and sendButton to the RootPanel // Use RootPanel.get() to get the entire body element RootPanel.get("nameFieldContainer").add(nameField); RootPanel.get("sendButtonContainer").add(sendButton); // Focus the cursor on the name field when the app loads nameField.setFocus(true); nameField.selectAll(); // Create the popup dialog box final DialogBox dialogBox = new DialogBox(); dialogBox.setText("Remote Procedure Call"); dialogBox.setAnimationEnabled(true); final Button closeButton = new Button("Close"); // You can set the id of a widget by accessing its Element closeButton.getElement().setId("closeButton"); final Label textToServerLabel = new Label(); final HTML serverResponseLabel = new HTML(); VerticalPanel dialogVPanel = new VerticalPanel(); dialogVPanel.addStyleName("dialogVPanel"); dialogVPanel.add(new HTML("Sending name to the server:")); dialogVPanel.add(textToServerLabel); dialogVPanel.add(new HTML("Server replies:")); dialogVPanel.add(serverResponseLabel); dialogVPanel.setHorizontalAlignment(VerticalPanel.ALIGN_RIGHT); dialogVPanel.add(closeButton); dialogBox.setWidget(dialogVPanel); // Add a handler to close the DialogBox closeButton.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { dialogBox.hide(); sendButton.setEnabled(true); sendButton.setFocus(true); } }); // Create a handler for the sendButton and nameField class MyHandler implements ClickHandler, KeyUpHandler { /** * Fired when the user clicks on the sendButton. */ public void onClick(ClickEvent event) { sendNameToServer(); } /** * Fired when the user types in the nameField. */ public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_ENTER) { sendNameToServer(); } } /** * Send the name from the nameField to the server and wait for a response. */ private void sendNameToServer() { sendButton.setEnabled(false); String textToServer = nameField.getText(); textToServerLabel.setText(textToServer); serverResponseLabel.setText(""); greetingService.greetServer(textToServer, new AsyncCallback() { public void onFailure(Throwable caught) { // Show the RPC error message to the user dialogBox .setText("Remote Procedure Call - Failure"); serverResponseLabel .addStyleName("serverResponseLabelError"); serverResponseLabel.setHTML(SERVER_ERROR); dialogBox.center(); closeButton.setFocus(true); } public void onSuccess(String result) { dialogBox.setText("Remote Procedure Call"); serverResponseLabel .removeStyleName("serverResponseLabelError"); serverResponseLabel.setHTML(result); dialogBox.center(); closeButton.setFocus(true); } }); } } // Add a handler to send the name to the server MyHandler handler = new MyHandler(); sendButton.addClickHandler(handler); nameField.addKeyUpHandler(handler); } } Bộ mô tả triển khai Web (web.xml, như thấy trong Liệt kê 9) ánh xạ GreetingService như một nguồn tài nguyên Web dựa trên servlet. Nó ánh xạ GreetingService dưới tên /simplegwtapp/greet sao cho SimpleGWTApp có thể nạp nó và thực hiện cuộc gọi đến nó. Bộ mô tả triển khai Web cũng biểu thị rằng SimpleGWTApp.html là trang chào mừng cho ứng dụng, như vậy nó luôn luôn nạp. Liệt kê 9.Bộ mô tả triển khai để đặt cấu hình GreetingServiceImpl (war/WEB-INF/web.xml) <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" ""> SimpleGWTApp.html greetServlet gaej.example.server.GreetingServiceImpl greetServlet /simplegwtapp/greet Mặt tiền trang HTML là SimpleGWTApp.html, được hiển thị trong Liệt kê 10. Đây là trang để nạp simplegwtapp.js và simplegwtapp.nocache.js, là mã JavaScript được GWT tạo từ mã Java của bạn. Như đã đề cập ở trên, mã này lưu trữ trong thư mục src thuộc gói gaej.example.client (từ các Liệt kê 6, 7 và 8). Liệt kê 10. Trang HTML để hiển thị GUI của GWT (war/SimpleGWTApp.html) Web Application Starter Project <script type="text/javascript" language="javascript" src="simplegwtapp/simplegwtapp.nocache.js"> <iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"> Web Application Starter Project Please enter your name: Với GWT, bạn điều khiển dáng vẻ của ứng dụng của bạn thông qua CSS, như đã chứng tỏ trong Liệt kê 11: Liệt kê 11. Bảng định kiểu cho GUI của GWT (war/SimpleGWTApp.css) /** Add css rules here for your application. */ /** Example rules used by the template application (remove for your app) */ h1 { font-size: 2em; font-weight: bold; color: #777777; margin: 40px 0px 70px; text-align: center; } .sendButton { display: block; font-size: 16pt; } /** Most GWT widgets already have a style name defined */ .gwt-DialogBox { width: 400px; } .dialogVPanel { margin: 5px; } .serverResponseLabelError { color: red; } /** Set ids using widget.getElement().setId("idOfElement") */ #closeButton { margin: 15px 6px 6px; } Triển khai Máy ứng dụng của Google Một khi bạn đã tạo ra ứng dụng sát thủ tiếp theo của thế giới (vì chúng ta thực sự cần một ứng dụng lời chào thân thiện với người sử dụng), bạn sẽ muốn triển khai nó. Toàn bộ vấn đề sử dụng Máy ứng dụng của Google là bạn có thể triển khai ứng dụng của mình trên cơ sở hạ tầng vững chắc của Google, làm cho nó dễ dàng điều chỉnh hơn. Máy ứng dụng của Google được thiết kế để cung cấp một nền tảng cho việc xây dựng các ứng dụng có thể mở rộng "để phát triển từ một đến hàng triệu người dùng mà không nhức đầu về cơ sở hạ tầng" (như đã nêu trên trang chủ Máy ứng dụng - App Engine). Để sử dụng cơ sở hạ tầng này, bạn cần một tài khoản của Máy ứng dụng của Google cho Java. Giống như nhiều thứ trong đời, thời gian đầu là miễn phí. Phiên bản miễn phí của Máy ứng dụng cho Java cung cấp cho ứng dụng đã triển khai đủ CPU, băng thông và lượng lưu trữ để phục vụ cho khoảng 5 triệu lượt truy cập trang. Sau đó, cần phải trả tiền khi bạn tiếp tục. (Cũng nên nhớ rằng cái sẵn có khi viết bài này là một bản phát hành xem trước của nền tảng Máy ứng dụng cho Java.) Một khi bạn nhận được tài khoản, bạn sẽ thấy một danh sách còn bỏ trống các ứng dụng tại trang Web Máy ứng dụng cho Java. Nhấn vào nút Create New Application (Tạo ứng dụng mới) và một biểu mẫu giống như trong Hình 8 sẽ xuất hiện. Nhập tên ứng dụng duy nhất và một mô tả, sau đó bạn sẽ thấy một thông báo xác nhận với mã nhận dạng (identifier) ứng dụng của bạn. Mã nhận dạng cũng thuộc về tệp app.yaml của ứng dụng của bạn. Lưu ý rằng không thể thay đổi mã nhận dạng. Nếu bạn sử dụng việc xác thực của Google cho các ứng dụng của bạn, thì "GAEj Article For Rick Part 1" sẽ được hiển thị trong trang Sign In (Đăng nhập) khi bạn truy cập vào ứng dụng của mình. Bạn sẽ sử dụng gaejarticleforrick để triển khai các ứng dụng lên Máy ứng dụng của Google bằng trình cắm thêm Eclipse của Máy ứng dụng cho Java. Hình 8. Tạo ứng dụng mới của Máy ứng dụng cho Java Sau khi bạn thiết lập mã nhận dạng (ID) của ứng dụng, bạn có thể triển khai ứng dụng của mình từ Eclipse. Đầu tiên, nhấn vào nút của thanh công cụ trông giống như biểu tượng Máy ứng dụng của Google (một động cơ phản lực có cánh và đuôi), như chỉ ra trong Hình 9: Hình 9. Trình cắm thêm Eclipse của Máy ứng dụng cho Java Bạn có thể cần phải bảo đảm chắc chắn dự án Máy ứng dụng cho Java của bạn được đánh dấu chọn trước khi nhấn vào Deploy (Triển khai) trong hộp thoại như thấy trong Hình 10. Bạn sẽ được nhắc cung cấp mã ủy nhiệm Google của bạn, đó là địa chỉ và tên người dùng thư điện tử của bạn. Hình 10. Triển khai dự án Hộp thoại trong Hình 10 có một đường liên kết tới "App Engine Project setting" (Thiết lập dự án Máy ứng dụng). Nhấn vào đường liên kết này (cũng có thể truy cập từ tệp thiết lập dự án) và nhập ID của ứng dụng (trong trường hợp này là gaejarticleforrick), như trong Hình 11. Sau khi bạn điền vào ID của ứng dụng, nhấn OK, rồi nhấn Deploy. Hình 11. Thiết lập dự án cho máy ứng dụng của Google Sau khi bạn đã triển khai ứng dụng của mình, nó sẽ có sẵn tại http://<application id>.appspot.com/. Bạn cũng có thể thấy ứng dụng này đang hoạt động tại Kết luận Đến đây kết thúc Phần 1 của bài giới thiệu của tôi về Máy ứng dụng của Google cho Java. Cho đến nay, bạn đã thu được một tổng quan về Máy ứng dụng cho Java là gì và đã thực hiện các bước đầu tiên bằng việc sử dụng Trình cắm thêm của Google cho Eclipse của Máy ứng dụng cho Java. Bạn tạo ra hai ứng dụng khởi động nhỏ (một ứng dụng dựa trên servlet còn cái kia dựa trên GWT) và sau đó đã triển khai ứng dụng GWT cho nền tảng của Máy ứng dụng Google này. Các ví dụ cho đến nay đã chứng tỏ việc tạo công cụ và chức năng giúp Máy ứng dụng dễ dàng tạo và triển khai các ứng dụng Java mở rộng được — tiềm năng lên đến quy mô như của YouTube hoặc Facebook. Trong Phần 2, bạn sẽ tiếp tục khám phá những cơ hội sẵn có cho các nhà phát triển Java làm việc trên Máy ứng dụng cho Java. Rời khỏi các ví dụ ứng dụng đã trình bày trong bài viết này, bạn sẽ xây dựng một ứng dụng quản lý mối liên hệ tùy chỉnh. Ứng dụng này cũng sẽ là trọng tâm của các bài tập trong Phần 3, chúng đi sâu vào kho lưu trữ dữ liệu của Máy ứng dụng cho Java và mặt tiền GUI của nó. Mục lục Về Máy ứng dụng của Google cho Java Tạo ứng dụng đầu tiên của bạn bằng Máy ứng dụng cho Java Tạo một Máy ứng dụng cho ứng dụng Java/GWT Triển khai Máy ứng dụng của Google Kết luận
File đính kèm:
- Máy ứng dụng của Google cho Java Phần 1 Rồ máy lên.pdf