Content unavailable! (broken link)https://dynarocks.com/wiki/attach/PageHeader/interSULT-2.002.jpg

This page (revision-16) was last changed on 10-Apr-2012 14:52 by Dieter Käppel

This page was created on 14-Dec-2010 17:23 by Dieter Käppel

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Version Date Modified Size Author Changes ... Change note
16 10-Apr-2012 14:52 13 KB Dieter Käppel to previous
15 10-Apr-2012 14:52 13 KB Dieter Käppel to previous | to last
14 14-Mar-2012 12:39 12 KB Dieter Käppel to previous | to last
13 06-Dec-2011 11:37 12 KB Dieter Käppel to previous | to last
12 06-Dec-2011 11:27 10 KB Dieter Käppel to previous | to last
11 06-Dec-2011 11:25 5 KB Dieter Käppel to previous | to last
10 05-Dec-2011 17:47 4 KB Dieter Käppel to previous | to last
9 05-Dec-2011 16:39 4 KB Dieter Käppel to previous | to last
8 05-Dec-2011 00:14 3 KB Dieter Käppel to previous | to last
7 02-Dec-2011 15:20 2 KB Dieter Käppel to previous | to last
6 17-Nov-2011 13:21 2 KB Dieter Käppel to previous | to last
5 17-Nov-2011 12:19 1 KB Dieter Käppel to previous | to last
4 17-Nov-2011 10:27 930 bytes Dieter Käppel to previous | to last
3 14-Nov-2011 10:25 257 bytes Dieter Käppel to previous | to last
2 14-Dec-2010 17:23 169 bytes Dieter Käppel to previous | to last
1 14-Dec-2010 17:23 51 bytes Dieter Käppel to last

Difference between version and

At line 7 added 288 lines
{{{
<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: Es befindet sich ein Projekt im Deployment-Assembly mit einer Abhängigkeit zur Google-Engine. Entweder das Projekt herausnehmen oder die Abhängigkeit ändern, sodass sie nicht im Deployment-Assembly erscheint.
!SAX-Parser Probleme
Der SAX-Parser aus dem JDK kann auf der GAE nicht benutzt werden:
{{{
javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:134)
at org.mortbay.xml.XmlParser.setValidating(XmlParser.java:91)
at org.mortbay.xml.XmlParser.<init>(XmlParser.java:83)
at org.mortbay.jetty.webapp.TagLibConfiguration.configureWebApp(TagLibConfiguration.java:210)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1247)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
06.12.2011 10:22:26 com.google.apphosting.utils.jetty.JettyLogger warn
WARNUNG: Nested in javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found:
java.lang.ClassNotFoundException: org.apache.xerces.jaxp.SAXParserFactoryImpl
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at com.google.appengine.tools.development.IsolatedAppClassLoader.loadClass(IsolatedAppClassLoader.java:176)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at javax.xml.parsers.FactoryFinder.getProviderClass(FactoryFinder.java:111)
at javax.xml.parsers.FactoryFinder.newInstance(FactoryFinder.java:146)
at javax.xml.parsers.FactoryFinder.findJarServiceProvider(FactoryFinder.java:298)
at javax.xml.parsers.FactoryFinder.find(FactoryFinder.java:223)
at javax.xml.parsers.SAXParserFactory.newInstance(SAXParserFactory.java:128)
at org.mortbay.xml.XmlParser.setValidating(XmlParser.java:91)
at org.mortbay.xml.XmlParser.<init>(XmlParser.java:83)
at org.mortbay.jetty.webapp.TagLibConfiguration.configureWebApp(TagLibConfiguration.java:210)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1247)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
}}}
Ursache: JARs nicht deployed
Lösung: Die Bibliotheken deployen
* Faceted Project
* Dynamic Web Application
* Im Deployment Assembly "Java Build Path Entry" hinzufügen, Maven Dependencies auswählen
* Folgende Dependencies einfügen:
{{{
<dependency>
<groupId>xalan</groupId>
<artifactId>serializer</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
<version>2.7.1</version>
</dependency>
<dependency>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
<version>2.9.1</version>
</dependency>
<dependency>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.3.04</version>
</dependency>
}}}
!Class-Cast-Problem bei ApiProxyLocal
{{{
WARNUNG: failed _ah_ServeBlobFilter: java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
06.12.2011 10:27:26 com.google.apphosting.utils.jetty.JettyLogger warn
WARNUNG: Failed startup of context com.google.appengine.tools.development.DevAppEngineWebAppContext@b05eb6f{/,C:\Java\workspace\com.intersult\internal\subflow\subflow-war\target\subflow}
java.lang.ClassCastException: com.google.appengine.tools.development.ApiProxyLocalImpl cannot be cast to com.google.appengine.tools.development.ApiProxyLocal
at com.google.appengine.api.blobstore.dev.ServeBlobFilter.init(ServeBlobFilter.java:53)
at org.mortbay.jetty.servlet.FilterHolder.doStart(FilterHolder.java:97)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.servlet.ServletHandler.initialize(ServletHandler.java:662)
at org.mortbay.jetty.servlet.Context.startContext(Context.java:140)
at org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1250)
at org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:517)
at org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:467)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
at org.mortbay.jetty.Server.doStart(Server.java:224)
at org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:50)
at com.google.appengine.tools.development.JettyContainerService.startContainer(JettyContainerService.java:191)
at com.google.appengine.tools.development.AbstractContainerService.startup(AbstractContainerService.java:239)
at com.google.appengine.tools.development.DevAppServerImpl.start(DevAppServerImpl.java:146)
at com.google.appengine.tools.development.DevAppServerMain$StartAction.apply(DevAppServerMain.java:164)
at com.google.appengine.tools.util.Parser$ParseResult.applyArgs(Parser.java:48)
at com.google.appengine.tools.development.DevAppServerMain.<init>(DevAppServerMain.java:113)
at com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
}}}
Ursache: Die Test-JARs appengine-testing, appengine-api-labs, appengine-api-stubs befinden sich im Classpath.
Lösung: Entfernen der Dependencies aus dem Classpath.
!SDK Utils
Die SDK-Utils enthalten die Kommandozeilen-Utils für die Arbeit mit der GAE. Das Deployment eines WAR-Verzeichnis erfolgt durch:
{{{
appcfg update <exploded war dir>
}}}
Voraussetzung zum Uploaden, ist eine vorhandene Application mit eigener App-Id. Diese App-Id ist in der WEB-INF/appengine-web.xml einzutragen, unter appengine-web-app/application.
Es ist möglich --proxy=<host>[[:<port>] mit anzugeben.
×