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

