Google App Engine Developer - Day4
-
Upload
simon-su -
Category
Technology
-
view
529 -
download
4
description
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>
Connect from App Engine● JDBC● Java Persistence API (JPA)● Java Data Objects (JDO)● Other JPAs custom additions: Hibernate, EclipseLink
jdbc:google:mysql://...(instead of jdbc:mysql://...)
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
Other FrameworksPopular frameworks for programming MySQL● Hibernate (Java)● JOOQ (Java)● JPA ( Java )● Django (Python)