Professional Documents
Culture Documents
Incoming Requests
Incoming Requests
Incoming Requests
Incoming Requests
Incoming Requests
Other Google
AppServer Infrastructure
- Google Accounts
- Memcache
App App App
6 - Image manipulation
<appengine-web-app>
<application>application-id</application>
<version>1</version>
</appengine-web-app>
10
<appengine-web-app>
<application>application-id</application>
<version>1</version>
<static-files>
<include path="/**.png"/>
<exclude path="/data/**.png"/>
</static-files>
<resource-files>
<include path="/**.xml"/>
<exclude path="/feeds/**.xml"/>
</resource-files>
</appengine-web-app>
11
<appengine-web-app>
<application>application-id</application>
<version>1</version>
<static-files>
<include path="/**.png"/>
<exclude path="/data/**.png"/>
</static-files>
<resource-files>
<include path="/**.xml"/>
<exclude path="/feeds/**.xml"/>
</resource-files>
<system-properties>
<property name="max-length" value="140"/>
</system-properties>
</appengine-web-app>
12
<appengine-web-app>
<application>application-id</application>
<version>1</version>
<static-files>
<include path="/**.png"/>
<exclude path="/data/**.png"/>
</static-files>
<resource-files>
<include path="/**.xml"/>
<exclude path="/feeds/**.xml"/>
</resource-files>
<system-properties>
<property name="max-length" value="140"/>
</system-properties>
<ssl-enabled>true</ssl-enabled>
<sessions-enabled>true</sessions-enabled>
</appengine-web-app>
13
14
15
Standard Interface
JDO, JPA, JCache, JavaMail, ...
15
Standard Interface
JDO, JPA, JCache, JavaMail, ...
Proprietary Interface
com.google.appengine.api.*
15
Standard Interface
JDO, JPA, JCache, JavaMail, ...
Proprietary Interface
com.google.appengine.api.*
Language-Neutral Interface
Protocol Buffers
15
Standard Interface
JDO, JPA, JCache, JavaMail, ...
Proprietary Interface
com.google.appengine.api.*
Language-Neutral Interface
Protocol Buffers
Implementation
Google servers, SDK local stubs
15
16
16
17
17
17
17
18
18
18
18
19
19
20
20
20
21
22
22
22
22
22
23
23
Bad!
Field f = String.class.getDeclaredField(“count”);
f.setAccessible(true);
f.set(“Hello World”, 2);
23
Bad!
Field f = String.class.getDeclaredField(“count”);
f.setAccessible(true);
f.set(“Hello World”, 2);
Good!
Field f = MyClass.class.getDeclaredField(“foo”);
f.setAccessible(true);
f.set(myObj, aFoo);
23
24
24
24
Good!
ClassLoader myClassLoader = new URLClassLoader() {
public Class findClass(String className) {
// define and load some newly generated bytecode
}
};
24
25
25
25
25
25
26
26
26
26
26
27
27
27
27
27
28
29
29
29
29
29
31
32
33
34
36
37
37
37
37
37
37
37
38