This page (revision-25) was last changed on 23-Apr-2022 17:05 by Harry Metske

This page was created on 23-Apr-2022 17:05 by Harry Metske

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
25 23-Apr-2022 17:05 5 KB Harry Metske to previous
24 23-Apr-2022 17:05 5 KB Harry Metske to previous | to last
23 23-Apr-2022 17:05 5 KB Harry Metske to previous | to last
22 23-Apr-2022 17:05 5 KB Harry Metske to previous | to last
21 23-Apr-2022 17:05 4 KB Harry Metske to previous | to last

Page References

Incoming links Outgoing links

Version management

Difference between version and

At line 3 added 3 lines
[{TableOfContents }]
At line 10 added 4 lines
* [Dashboard computerhok01|http://appengine.google.com/dashboard?&app_id=computerhok01]
* [Will it play in GAE ?|http://groups.google.com/group/google-appengine-java/web/will-it-play-in-app-engine?pli=1]
* [JDOQL-QuickRef.pdf]
! JDO Resources
At line 8 changed one line
Before you sing-up, they require you have a mobile number:
|[Apache DB Home|http://db.apache.org/jdo/]|[Datanucleus Home|http://www.datanucleus.org/]| [Java API|http://db.apache.org/jdo/api23/apidocs/index.html] |[Comparing JDO/JPA|http://db.apache.org/jdo/jdo_v_jpa.html]
At line 10 changed one line
''To create applications with Google App Engine, you need a verification code. .... \\The verification code will be sent to it via SMS. Note you will only need to verify your account once.''
!! Intro
At line 12 changed one line
!! Things that you normally use, but won't run on GAE
Before you sing-up ([agreements here|google-app-engine-agreements.txt]), they require you have a mobile number:
At line 21 added one line
''To create applications with Google App Engine, you need a verification code. .... \\The verification code will be sent to it via SMS. Note you will only need to verify your account once.''
At line 23 added one line
At line 22 changed one line
I registered my first app with the __ID computerhok01__, so you can access it at [http://computerhok01.appspot.com/jsp/AddEmployee.jsp]
I registered my first app with the __ID computerhok01__, so you can access it at [http://computerhok01.appspot.com]
At line 60 added 83 lines
!! Application life cycle management
A very nice feature of GAE is the way they manage deployed applications.\\
If you deploy an application, you can assign a version number (in Eclipse), if you deploy a new version, both the old and the new applications are available.\\
You can manage these application versions on the GAE console (see [Administration Versions|http://appengine.google.com/deployment?app_id=computerhok01]).
So you can simultaneously access both applications, for example with the following urls :
* 1 [http://1.latest.computerhok01.appspot.com/]
* 2 [http://2.latest.computerhok01.appspot.com/]
!! Quota
Here's a screenshot of the Qouta details page:
[GAEQuota.png]
!! Things noticed / experiences
! HttpSessions
* HttpSessions should be enabled in appengine-web.xml, The implementation uses the App Engine datastore and memcache to store session data.
* make sure that all objects in the session are Serializable (test environment accepts it, but GAE not)
* changing names of classes/packages of objects that were in the session earlier will cause problems:
%%small {{{
Caused by: java.lang.ClassNotFoundException: nl.computerhok.gae.test1.dao.Peuter
at com.google.appengine.runtime.Request.process-e0ffd4c85af8f259(Request.java)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at java.util.HashMap.readObject(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.google.apphosting.runtime.jetty.SessionManager.deserialize(SessionManager.java:385)
... 35 more
}}} %%
You only get into the application using the version identifier in the URL, like [http://3.latest.computerhok01.appspot.com/]
! java.net.InetAddress
Oops, not supported, you even get a compile error in your workbench, so you don't get to know the hostname of the host your request was handled on.
! (no) log4j
If you start using log4j in your webapp (and you added a log4j.jar to war/WEB-INF/lib and to your project's build path), JDO enhance ant task fails with a NoClassDefFoundError. Few hits on Google on that, finally removed log4j all together and switched to Java util logging.
! Datastore
* The datastore does not support the SQL language, you can only use JDOQL, for example, this is not supported :
%%prettify
{{{
Query query = getPersistenceManager().newQuery(Query.SQL, queryString);
}}}
%%
__Only one property per query may have inequality filters (<=, >=, <, >)..__
So you cannot do something like :
{{{
SELECT * FROM Peuter where geslacht>'M' AND achternaam>'b'
}}}
Case insensitive queries ?
What happens if you first create some entities, and then you add additional persistent fields ("columns") to the class ?\\
Well, that's nice, that simply works, tested by adding an adres field :-)
!