Hộp cát (sandbox)

Một phần của tài liệu Tìm hiểu Cloud Computing và nền tảng Google app engine (Trang 25 - 28)

2. Môi trường phát triển ứng dụng 1 Tổng quan

2.4 Hộp cát (sandbox)

Để cho phép App Engine để phân phối các yêu cầu cho các ứng dụng giữa các máy chủ web, và để ngăn chặn một ứng dụng can thiệp đến các ứng dụng khác, ứng dụng được cho chạy trong môi trường sandbox. Trong môi trường này, các ứng dụng có thể thực thi mã, lưu trữ và truy vấn dữ liệu trong kho dữ liệu App Engine, sử dụng dịch vụ App Engine mail, URL fetch, dịch vụ người dùng (xem thêm ở phần các dịch vụ của GEA), và kiểm tra yêu cầu web của người dùng và chuẩn bị các kết quả trả về.

Một ứng dụng App Engine không thể:

• Thay đổi hệ thống tập tin. Các ứng dụng phải sử dụng App Engine datastore để lưu trữ dữ liệu. Cho phép đọc dữ liệu từ hệ thống tập tin, và từ các tập tin tải lên cùng với ứng dụng.

• Mở một socket hoặc truy cập trực tiếp một máy chủ khác. Một ứng dụng có thể sử dụng dịch vụ App Engine URL fetch để tạo yêu cầu HTTP và HTTPS đến máy chủ khác trên cổng 80 và 443, tương ứng.

• Sinh ra một tiến trình phụ hoặc luồng. Một yêu cầu phải được xử lý trong một tiến trình duy nhất trong vòng vài giây. Tiến trình mất một thời gian rất dài để đáp ứng được chấm dứt để tránh quá tải máy chủ web.

a) Luồng

Một ứng dụng Java không thể tạo một đối tượng kiểu java.lang.ThreadGroup hay java.lang.Thread. Những hạn chế này cũng áp dụng cho các lớp JRE sử dụng Thread. Ví dụ

Một ứng dụng không thể tạo ra một đối tượng kiểu java.util.concurrent.ThreadPoolExecutor, hoặc java.util.Timer. Một ứng dụng có thể thực hiện các hoạt động đối với các luồng hiện hành, chẳng hạn như Thread.currentThread (). DumpStack ().

b) Hệ thống tập tin

Một ứng dụng Java không thể sử dụng bất kỳ lớp nào để thay đổi hệ thống tập tin, chẳng hạn như java.io.FileWriter. Một ứng dụng có thể đọc các tập tin của mình từ hệ thống tập tin bằng cách sử dụng các lớp như java.io.FileReader. Các ứng dụng cũng có thể truy cập các tập tin của như "tài nguyên", chẳng hạn như Class.getResource () hoặc ServletContext.getResource() .

Chỉ có tập tin được coi là "các tập tin tài nguyên" là có thể được truy cập vào ứng dụng thông qua hệ thống tập tin. Theo mặc định, tất cả các file trong WAR là "các tập tin tài nguyên". Bạn có thể loại bỏ các tập tin từ thiết lập này bằng cách sử dụng tập tin appengine-web.xml.

c) java.lang.System

• Các tính năng của lớp java.lang.System mà không áp dụng cho App Engine bị vô hiệu hoa.

• Các phương pháp System sau đây không phải làm gì trong App Engine: exit(), go(), runFinalization(), runFinalizersOnExit().

• Các phương pháp System sau trả về null: inheritedChannel(), console().

Một ứng dụng không thể cung cấp hoặc trực tiếp gọi bất kỳ mã JNI. Các phương pháp System sau tạo ra một ngoại lệ java.lang.SecurityException: load(), loadLibrary(), setSecurityManager().

d) Reflection

Một ứng dụng được cho phép đầy đủ, không hạn chế, phản xạ truy cập đến các lớp riêng của mình. Nó có thể truy vấn bất kỳ thành phần riêng, sử dụng java.lang.reflect.AccessibleObject.setAccessible(), và đọc/ghi các thành phần riêng.

Một ứng dụng cũng có thể lấy thông tin về các lớp của JRE và API, chẳng hạn như java.lang.String và javax.servlet.http.HttpServletRequest. Tuy nhiên, nó chỉ có thể truy cập các thành phần công khai của lớp, không thể vào các phần được bảo vệ hay riêng tư.

Một ứng dụng không thể lấy phản ánh cảu bất kỳ lớp nào khác không thuộc về chính nó, và nó không thể sử dụng phương pháp setAccessible() để phá vỡ những hạn chế này.

2.5 Logging

Ứng dụng của bạn có thể ghi thông tin vào log bằng cách sử dụng java.util.logging.Logger. Dữ liệu trong log có thể được xem và phân tích bằng cách sử dụng điều khiển chính, hoặc tải về bằng cách sử dụng request_logs appcfg.sh. Ở bản điều khiển chính ta có thể nhận ra mức độ log đang sử dụng, và hiển thị các thông điệp trong log ở các cấp độ khác nhau.

Tất cả mọi thứ servlet ghi ra dòng ra tiêu chuẩn (System.out) và dòng lỗi tiêu chuẩn (System.err) đều được App Engine bắt và được ghi lại trong log của ứng dụng. Các thông điệp ghi ra dòng ra tiêu chuẩn được log lại ở cấp độ "INFO", và các thông điệp ghi vào dòng lỗi tiêu chuẩn được log lại ở cấp "WARNING". Bất kỳ các log framework nào (như log4j) log lại dòng ra và dòng lỗi đều có thể hoạt động bình thường. Tuy nhiên, để hoạt động của màn hình hiển thị log trong bảng điều khiển chính hoạt động mịn, các log framework phải sử dụng java.util.logging.

import java.util.logging.Logger; // ...

public class MyServlet extends HttpServlet { private static final Logger log =

Logger.getLogger(MyServlet.class.getName());

public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {

log.info("An informational message."); log.warning("A warning message."); log.severe("An error message."); }

}

App Engine Java SDK có file logging.properties mẫu, nằm trong thư mục appengine-java-sdk/config/user/ . Để sử dụng nó, chép nó vào thư mục WEB- INF/classes của bạn (hoặc ở nơi khác trong WAR), sau đó chỉnh thuộc tính hệ thống java.util.logging.config.file tới "WEB-INF/classes/logging.properties" (hoặc đường đẫn khác nếu chép đến thự mục khác). Bạn có thể thiết lập các thuộc tính hệ thống trong tập tin appengine-web.xml như sau:

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> ...

<system-properties>

<property name="java.util.logging.config.file" value="WEB- INF/classes/logging.properties" />

</system-properties> </appengine-web-app>

Một phần của tài liệu Tìm hiểu Cloud Computing và nền tảng Google app engine (Trang 25 - 28)

Tải bản đầy đủ (DOCX)

(50 trang)
w