Google App Engine Developer - Day4

Post on 10-May-2015

529 views 4 download

Tags:

description

GAE Java - Day4 About CloudStorage and CloudSQL

Transcript of Google App Engine Developer - Day4

GAE Developer - Day4Simon @ MiCloud2014Q1

Last Class

● Memcache basic● Task Queue concept● Push Queue● Pull Queue

● Create a Bucket● Create a CloudSQL

Before Today

Create a Bucket

$ gcloud auth login

$ gcloud config set project [my-project-id]

$ gsutil mb gs://[my-bucket]

$ gsutil ls gs://[my-bucket]

Sample Database

http://www.mysqltutorial.org/mysql-sample-database.aspx

Create a CloudSQL

$ gcloud sql -h

$ gcloud sql instances create [inst-name]

$ gcloud sql instances list

$ gcloud sql instances import instance-name --uri \

gs://your-bucket/sql-dump-file.gz

$ gcloud sql instances patch --assign-ip [inst-name]

$ gcloud sql instances get [inst-name]

Create a CloudSQL

$ gcloud sql instances set-root-password test-sql \

-p [password]

$ gcloud sql instances patch test-sql \

--authorized-networks=[your-ip-address]

Connect Cloud SQL - MySQL Workbench

http://www.mysql.com/products/workbench/

Today

● Use CloudStorage - BlobStore● Connect CloudSQL

Using Cloud Storage

Use CloudStorage - BlobStore

Create Upload Url

BlobstoreService blobstoreService =

BlobstoreServiceFactory.getBlobstoreService();

UploadOptions uploadOptions =

UploadOptions.Builder.withGoogleStorageBucketName(

"BUCKET-NAME"); //Name without “gs://”

String uploadUrl = blobstoreService.createUploadUrl(

"/callback-url", uploadOptions);

resp.getWriter().println("<form action=" + uploadUrl

+ " method=\"post\" enctype=\"multipart/form-data\">");

resp.getWriter().println("<input type=\"file\" name=\"field-name\"");

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

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

Map<String, List<FileInfo>> blobs = blobstoreService.getFileInfos(req);

List<FileInfo> keys = blobs.get("field-name"); //input file name on form if (keys != null && keys.size() > 0) { FileInfo fileKey = keys.get(0);

String objectUploaded = fileKey.getGsObjectName();…. (Save the objectUploaded mapping to datastore or database)

Create Callback Handler

Serving Datapublic void doGet(HttpServletRequest req, HttpServletResponse resp){

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

BlobKey blobKey = blobstoreService.createGsBlobKey("/gs/<bucket>/<object>");

try {blobstoreService.serve(blobKey, resp);

} catch (IOException e){e.printStackTrace();

}

….

Other Storage API

● Image API● Cloud Storage Client Library

Connect Cloud SQL

Before Connect

● CloudSQL instance ready● Authorized

○ root password○ instance ip address○ access ip address

Configure Connectors

● Hostname is Cloud SQL instance IP address● Connection URL includes instance IP and

database name● Java connection is:

jdbc:mysql://<instance-ip>:3306/

Local Test Configure

appengine-web.xml<?xml version="1.0" encoding="utf-8"?><appengine-web-app xmlns="http://appengine.google.com/ns/1.0"> <application>mitac-cp300</application> <version>eord</version> …. <use-google-connector-j>true</use-google-connector-j> ….</appengine-web-app>

Detect running environmentConnection conn = null;if (SystemProperty.environment.value() ==

SystemProperty.Environment.Value.Production) {// app is running in productionClass.forName("com.mysql.jdbc.GoogleDriver");String url= "jdbc:google:mysql://instance-name/";conn = DriverManager.getConnection(url);...

} else {// app is running on localhostClass.forName("com.mysql.jdbc.Driver");String url= "jdbc:mysql://db-ip-address/";conn = DriverManager.getConnection(url);...

}conn.~

DriverManager.registerDriver(new AppEngineDriver());

conn = DriverManager.getConnection(connUrl);

String sql = "SELECT count(*) as total FROM " + tableName + "";

PreparedStatement stmt = conn.prepareStatement(sql);ResultSet results = stmt.executeQuery();

while (results.next()) {int total = results.getInt("total");…

}

Query Example - Standard JDBC