Google App Engine Developer - Day4

24
GAE Developer - Day4 Simon @ MiCloud 2014Q1

description

GAE Java - Day4 About CloudStorage and CloudSQL

Transcript of Google App Engine Developer - Day4

Page 1: Google App Engine Developer - Day4

GAE Developer - Day4Simon @ MiCloud2014Q1

Page 2: Google App Engine Developer - Day4

Last Class

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

Page 3: Google App Engine Developer - Day4

● Create a Bucket● Create a CloudSQL

Before Today

Page 4: Google App Engine Developer - Day4

Create a Bucket

$ gcloud auth login

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

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

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

Page 5: Google App Engine Developer - Day4

Sample Database

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

Page 6: Google App Engine Developer - Day4

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]

Page 7: Google App Engine Developer - Day4

Create a CloudSQL

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

-p [password]

$ gcloud sql instances patch test-sql \

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

Page 8: Google App Engine Developer - Day4

Connect Cloud SQL - MySQL Workbench

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

Page 9: Google App Engine Developer - Day4

Today

● Use CloudStorage - BlobStore● Connect CloudSQL

Page 10: Google App Engine Developer - Day4

Using Cloud Storage

Page 11: Google App Engine Developer - Day4

Use CloudStorage - BlobStore

Page 12: Google App Engine Developer - Day4

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\"");

Page 13: Google App Engine Developer - Day4

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

Page 14: Google App Engine Developer - Day4

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();

}

….

Page 15: Google App Engine Developer - Day4

Other Storage API

● Image API● Cloud Storage Client Library

Page 16: Google App Engine Developer - Day4

Connect Cloud SQL

Page 17: Google App Engine Developer - Day4

Before Connect

● CloudSQL instance ready● Authorized

○ root password○ instance ip address○ access ip address

Page 18: Google App Engine Developer - Day4

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/

Page 19: Google App Engine Developer - Day4

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>

Page 21: Google App Engine Developer - Day4

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.~

Page 22: Google App Engine Developer - Day4

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

Page 24: Google App Engine Developer - Day4