Google Application Engine Google App Engine GAE
Compatible Spring EntityManager Injector#
Google Application Engine/PersistenceAnnotationBeanPostProcessor.java<bean class="com.intersult.jsf2.PersistenceAnnotationBeanPostProcessor"/>
Test für lokalen Datastore#
public class ObjectifyTest { private static LocalServiceTestHelper helper; @BeforeClass public static void setupClass() { LocalDatastoreServiceTestConfig config = new LocalDatastoreServiceTestConfig(); helper = new LocalServiceTestHelper(config); ObjectifyService.register(User.class); } @Before public void setUp() { helper.setUp(); } @After public void tearDown() { helper.tearDown(); } @Test public void test() { Objectify objectify = ObjectifyService.begin(); User user = objectify.find(User.class, 1); }
Eclipse GAE Plugin mit Maven#
- GAE Plugin in Eclipse installieren
- GAE Runtime Installieren
- GAE Runtime in Preferences -> Google -> App Engine eintragen
- Im importierten Maven Projekt GAE Support anschalten
- WAR-Dir ist src/main/webapp
- Class Output Folder ist target/classes
- App Engine ist die installierte GAE, nicht die Maven Library
- In Preferences -> Build Path -> Order and Export die Maven Dependencies ganz nach unten. (Sonst versucht das GAE Plugin die Maven GAE-Runtime JAR als Runtime Home zu benutzen.)
- Als Faceted Projekt konfigurieren, damit XHTML-Editor konfiguriert wird
- Dynamic Web Project 2.5, keine web.xml generieren
- Gegebenenfalls JSF 2.0, keine Library-Konfiguration
- Im Deployment-Assembly Maven-Dependencies hinzufügen. Falls Projekte im Workspace referenziert sind, diese extra nochmal zufügen (damit JARs gebaut werden)
Um die Libs zur Verfügung zu stellen, wird das maven-war-plugin auf exploded umgestellt:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.1.1</version> <configuration> <webResources> <resource> <directory>src/main/webapp</directory> <filtering>true</filtering> <includes> <include>**/appengine-web.xml</include> </includes> </resource> </webResources> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>exploded</goal> </goals> </execution> </executions> </plugin>
EL-Expressions 2, 2.2#
Die Glassfish el-impl 2.2 arbeitet leider nicht mit der GAE zusammen, dort ist JBoss zu verwenden. Die Version 2.* führt zu Access Violations in der GAE, daher 1.* verwenden:<dependency> <groupId>javax.el</groupId> <artifactId>el-api</artifactId> <version>2.2</version> </dependency> <dependency> <groupId>org.jboss.el</groupId> <artifactId>jboss-el</artifactId> <version>1.0_02.CR6</version> </dependency> <repository> <id>jboss</id> <name>Jboss Maven Repository</name> <url>https://repository.jboss.org/nexus/content/repositories/releases</url> </repository>
In der web.xml:
<context-param> <param-name>com.sun.faces.expressionFactory</param-name> <param-value>org.jboss.el.ExpressionFactoryImpl</param-value> </context-param>
Proxy#
Das Maven-Plugin arbeitet mit dem für Maven konfigurierten Proxy.Die GAE-Runtime prüft im Netzwerk auf Update. Beim Starten aus Maven oder Eclipse, ist das Proxy in die Launch-Config einzutragen:
-DproxyHost=<host> -DproxyPort=<port>
oder in Maven
<plugin> <groupId>net.kindleit</groupId> <artifactId>maven-gae-plugin</artifactId> <version>0.9.2</version> <dependencies> <dependency> <groupId>net.kindleit</groupId> <artifactId>gae-runtime</artifactId> <version>${version.gae}</version> <type>pom</type> </dependency> </dependencies> <configuration> <proxy>host:port</proxy> </configuration> </plugin>
SDK Fehler bei Starten aus Eclipse#
Exception in thread "main" java.lang.ExceptionInInitializerError at com.google.appengine.tools.util.Logging.initializeLogging(Logging.java:35) at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:82) Caused by: java.lang.RuntimeException: Unable to discover the Google App Engine SDK root. This code should be loaded from the SDK directory, but was instead loaded from file:/C:/Users/<profile>/.m2/repository/com/google/appengine/appengine-tools-sdk/1.6.0/appengine-tools-sdk-1.6.0.jar. Specify -Dappengine.sdk.root to override the SDK location. at com.google.appengine.tools.info.SdkInfo.findSdkRoot(SdkInfo.java:102) at com.google.appengine.tools.info.SdkInfo.init(SdkInfo.java:194) at com.google.appengine.tools.info.SdkInfo.getSdkRoot(SdkInfo.java:149) at com.google.appengine.tools.info.SdkImplInfo.<clinit>(SdkImplInfo.java:19) ... 2 more
Lösung: ?