[appengine-java] Question: best practice to persist medium-large data?

2010-01-25 Thread Moritz
Hi Group,

I'm not sure about how to model my application, therefore I'm going to
ask you, because I think you might know some best practice approach.
Here is the problem.

I have a simple application, maintaining photos and albums. Each photo
can be assigned to one album. One album can contain multiple photos.
Each photo has one (more or less large) set of image data:

public class Photo
@Persistent
private String contentType;
@Persistent
private Blob data;
@Persistent
private String fileName;
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk",
value = "true")
private String id;

...
}

public class Album implements IdObject {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
@Extension(vendorName = "datanucleus", key = "gae.encoded-pk",
value = "true")
private String id;
@Persistent
private String name;
@Persistent
private List photos;
...
}

Now, as you can see, every time the application loads an album, it
loads all photos of the album, including the image data. This is easy.
At the moment I'm not experiencing performance problems. But with
increased amount of photos I don't think it will scale very well.
Furthermore, it is not necessary to load the image data every time;
imagine a website which displays all photos of an album: first, a list
of  tags is created, including title of the photo etc., but the
data is loaded in a different servlet.

Now I see three options to solve this problem:

1) Use fetch groups
The problem here is, that I am not sure if fetch-groups really solve
the problem - I'm new to JDO.

2) Use "unowned" relationships
Here the question is, if this actually solves the problem. If I
understood correctly, the application itself has to take care about
loading the relationship entities. However I fail to see the benefit I
have, as I have to use the Datastore specific Key class.

3) Use lists of IDs
For this solution, I build my own relationship management. For
example, the Album class contains only a list of photo IDs. This gives
me even more flexibility, as I can use my own ID type, such as Long:

public class Album {
  private List photoIds;
...
}

What actually is the difference between this and the "unowned"
relationships?

As an extension to this solution, I would separate the photo data from
the actual photo, such as:

public class Photo {
  ... // without the private Blob data member
...
}

public class PhotoData {
  private Long photoId;
  private Blob data;
...
}

I hope this all isn't too confusing. Any help or suggestions are
highly appreciated.

Thank you,
Moritz

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Datastore migration

2010-02-02 Thread Moritz
Hello everyone,

after a couple of versions of my application I found out that I need
to change the datamodel fundamentally in order to achieve better
performance. My approach was as follows:

(Coding)
- Mark all old API as @Deprecated
- Create new classes etc.
- Update views etc.
- Develop a migration servlet which copies data from the old model to
the new model
(Migration)
- Deploy new app
- Call migration servlet URL

All tests on my local development environment were successful. The new
datamodel is less complex than the old one, it contains only
"implicit" relations and stores large data in a separate entity. That
perfectly matches the application's scope, only minor refactorings
were necessary to implement the new datamodel.

However, the migration failed. Of course, I had already so much data
in the system, that the request timed out. Now my datastore is half
old and half new.

Bummer.

Luckily, that application is not really in production, so it is not a
fatal loss.

However, I'm wondering how such migration is usually done.
- How do I backup my datastore?
- How do I run migration "scripts" (in my case =servlet)?

Thank you,
Moritz

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Question on request duration / quota / HardDeadlineExceededError

2010-02-08 Thread Moritz
Hello everyone,

in my application I have a scheduled task that runs every 5 minutes to
update the cache. Currently it is a "brute force" implementation, that
runs through all entities and computes all permutations required.

This task usually takes longer than 30 seconds - and fails almost
every time with a HardDeadlineExceededError.

My problem is, that all available information currently is not clear
about how to handle these errors. Maybe I missed it, but:

- The documentation is only about bandwidth, number of requests, API
calls etc.
- The API provides methods to measure number of CPU cycles
(getCpuTimeInMegaCycles()), but doesn't warn about reaching the limit
- In the discussion group I find some information such as "maximum
duration of 30 seconds for each request", but that is actually quite
unspecific.
- HardDeadlineExceededError is not documented in the API docs.
Somewhere I read that a DeadlineExceededException should be thrown
before - but I catch any "Exception" and still produce a
HardDeadlineExceededError

Of course, I could now just use a timer to run my job and terminate it
gracefully shortly before 30 seconds are reached. But I'd prefer a
better, more predictable and reliable option. Any suggestions?

Thanx,
Moritz

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Question on request duration / quota / HardDeadlineExceededError

2010-02-09 Thread Moritz
Thank you.
That is my approach now, as well; however, I hoped to learn a better,
more reliable solution.

On 8 Feb., 19:42, John Patterson  wrote:
> HDEEs can be thrown without a DEE if it happens in your own code.  
> Usually the most time consuming thing is waiting for API calls to  
> return so a timeout here will result in the API call stopping with a  
> DEE. So if you do not call the API often you can hit HDEE directly.
>
> I also have long running tasks that iterate through data processing  
> and storing results.  I use an Iterator that stops returning results  
> after 20 seconds and saves the last object processed and then kicks  
> off a new task to continue processing.
>
> My original solution caught the DEE and then cleaned up but this  
> stopped working reliably.
>
> On 9 Feb 2010, at 01:22, Moritz wrote:
>
>
>
> > Hello everyone,
>
> > in my application I have a scheduled task that runs every 5 minutes to
> > update the cache. Currently it is a "brute force" implementation, that
> > runs through all entities and computes all permutations required.
>
> > This task usually takes longer than 30 seconds - and fails almost
> > every time with a HardDeadlineExceededError.
>
> > My problem is, that all available information currently is not clear
> > about how to handle these errors. Maybe I missed it, but:
>
> > - The documentation is only about bandwidth, number of requests, API
> > calls etc.
> > - The API provides methods to measure number of CPU cycles
> > (getCpuTimeInMegaCycles()), but doesn't warn about reaching the limit
> > - In the discussion group I find some information such as "maximum
> > duration of 30 seconds for each request", but that is actually quite
> > unspecific.
> > - HardDeadlineExceededError is not documented in the API docs.
> > Somewhere I read that a DeadlineExceededException should be thrown
> > before - but I catch any "Exception" and still produce a
> > HardDeadlineExceededError
>
> > Of course, I could now just use a timer to run my job and terminate it
> > gracefully shortly before 30 seconds are reached. But I'd prefer a
> > better, more predictable and reliable option. Any suggestions?
>
> > Thanx,
> > Moritz
>
> > --
> > You received this message because you are subscribed to the Google  
> > Groups "Google App Engine for Java" group.
> > To post to this group, send email to google-appengine-java@googlegroups.com
> > .
> > To unsubscribe from this group, send email to 
> > google-appengine-java+unsubscr...@googlegroups.com
> > .
> > For more options, visit this group 
> > athttp://groups.google.com/group/google-appengine-java?hl=en
> > .

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Problem with Junit Test with JDO

2010-02-13 Thread Moritz
Not sure if you tried already, but I removed the file:/C:/Users/
Timofey.NovaBigBook-PC/Documents/Eclipse/Horoscope/war/
WEB-INF/lib/datanucleus-jpa-1.1.5.jar (the workspace file) from the
build path and then all tests were successful.

On 13 Feb., 07:07, Timofey Koolin  wrote:
> I use eclipse. I create new project for create Junit tests of my GAE
> application, add my gae application in JavaBuildPath/Project. Than i
> copy all jars from sdk to lib in my project and add all to build path.
>
> in constructor i create helper:
>                 helper = new LocalServiceTestHelper(
>                                         new LocalDatastoreServiceTestConfig()
>                                 );
> in setUp method i do
>
> helper.setUp();
> PersistenceManager pm = PMF.get().getPersistenceManager(); // - this
> line throw exception (stacktrace below)
>
> I tried create jdoconfig.xml - but have compile error - duplicate
> description.
>
> java.lang.ExceptionInInitializerError
>         at
> ru.abc_software.horoscope.test.HoroscopePageTest.Empty(HoroscopePageTest.ja 
> va:
> 35)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.junit.runners.model.FrameworkMethod
> $1.runReflectiveCall(FrameworkMethod.java:44)
>         at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable. 
> java:
> 15)
>         at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.j 
> ava:
> 41)
>         at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.ja 
> va:
> 20)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 73)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 46)
>         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>         at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>         at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe 
> ference.java:
> 46)
>         at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 467)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 683)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner 
> .java:
> 390)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne 
> r.java:
> 197)
> Caused by: javax.jdo.JDOFatalInternalException: Unexpected exception
> caught.
> NestedThrowables:
> java.lang.reflect.InvocationTargetException at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1186)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 803)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 1086)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 914)
>         at ru.abc_software.horoscope.test.PMF.(PMF.java:8)
>         ... 25 more
> Caused by: java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at javax.jdo.JDOHelper$16.run(JDOHelper.java:1956)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.jdo.JDOHelper.invoke(JDOHelper.java:1951)
>         at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1159)
>         ... 29 more
> Caused by: org.datanucleus.exceptions.NucleusException: Plugin
> (Bundle) "org.datanucleus.jpa" is already registered. Ensure you dont
> have multiple JAR versions of the same plugin in the classpath. The
> URL "file:/C:/Users/Timofey.NovaBigBook-PC/Documents/Eclipse/
> HoroscopeTest/lib/d

[appengine-java] Re: Problem with Junit Test with JDO

2010-02-13 Thread Moritz
Not sure if you tried already, but I removed the file:/C:/Users/
Timofey.NovaBigBook-PC/Documents/Eclipse/Horoscope/war/
WEB-INF/lib/datanucleus-jpa-1.1.5.jar (the workspace file) from the
build path and then all tests were successful.

On 13 Feb., 07:07, Timofey Koolin  wrote:
> I use eclipse. I create new project for create Junit tests of my GAE
> application, add my gae application in JavaBuildPath/Project. Than i
> copy all jars from sdk to lib in my project and add all to build path.
>
> in constructor i create helper:
>                 helper = new LocalServiceTestHelper(
>                                         new LocalDatastoreServiceTestConfig()
>                                 );
> in setUp method i do
>
> helper.setUp();
> PersistenceManager pm = PMF.get().getPersistenceManager(); // - this
> line throw exception (stacktrace below)
>
> I tried create jdoconfig.xml - but have compile error - duplicate
> description.
>
> java.lang.ExceptionInInitializerError
>         at
> ru.abc_software.horoscope.test.HoroscopePageTest.Empty(HoroscopePageTest.ja 
> va:
> 35)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.junit.runners.model.FrameworkMethod
> $1.runReflectiveCall(FrameworkMethod.java:44)
>         at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable. 
> java:
> 15)
>         at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.j 
> ava:
> 41)
>         at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.ja 
> va:
> 20)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 73)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 46)
>         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>         at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>         at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe 
> ference.java:
> 46)
>         at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 467)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 683)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner 
> .java:
> 390)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne 
> r.java:
> 197)
> Caused by: javax.jdo.JDOFatalInternalException: Unexpected exception
> caught.
> NestedThrowables:
> java.lang.reflect.InvocationTargetException at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1186)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 803)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 1086)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 914)
>         at ru.abc_software.horoscope.test.PMF.(PMF.java:8)
>         ... 25 more
> Caused by: java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at javax.jdo.JDOHelper$16.run(JDOHelper.java:1956)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.jdo.JDOHelper.invoke(JDOHelper.java:1951)
>         at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1159)
>         ... 29 more
> Caused by: org.datanucleus.exceptions.NucleusException: Plugin
> (Bundle) "org.datanucleus.jpa" is already registered. Ensure you dont
> have multiple JAR versions of the same plugin in the classpath. The
> URL "file:/C:/Users/Timofey.NovaBigBook-PC/Documents/Eclipse/
> HoroscopeTest/lib/d

[appengine-java] Re: Problem with Junit Test with JDO

2010-02-13 Thread Moritz
Remove datanucleus-appengine-1.0.5.final.jar from your build path, but
leave it in the WEB-INF/lib folder.

On 13 Feb., 07:07, Timofey Koolin  wrote:
> I use eclipse. I create new project for create Junit tests of my GAE
> application, add my gae application in JavaBuildPath/Project. Than i
> copy all jars from sdk to lib in my project and add all to build path.
>
> in constructor i create helper:
>                 helper = new LocalServiceTestHelper(
>                                         new LocalDatastoreServiceTestConfig()
>                                 );
> in setUp method i do
>
> helper.setUp();
> PersistenceManager pm = PMF.get().getPersistenceManager(); // - this
> line throw exception (stacktrace below)
>
> I tried create jdoconfig.xml - but have compile error - duplicate
> description.
>
> java.lang.ExceptionInInitializerError
>         at
> ru.abc_software.horoscope.test.HoroscopePageTest.Empty(HoroscopePageTest.ja 
> va:
> 35)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.junit.runners.model.FrameworkMethod
> $1.runReflectiveCall(FrameworkMethod.java:44)
>         at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable. 
> java:
> 15)
>         at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.j 
> ava:
> 41)
>         at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.ja 
> va:
> 20)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 73)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 46)
>         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>         at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>         at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe 
> ference.java:
> 46)
>         at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 467)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 683)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner 
> .java:
> 390)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne 
> r.java:
> 197)
> Caused by: javax.jdo.JDOFatalInternalException: Unexpected exception
> caught.
> NestedThrowables:
> java.lang.reflect.InvocationTargetException at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1186)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 803)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 1086)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 914)
>         at ru.abc_software.horoscope.test.PMF.(PMF.java:8)
>         ... 25 more
> Caused by: java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at javax.jdo.JDOHelper$16.run(JDOHelper.java:1956)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.jdo.JDOHelper.invoke(JDOHelper.java:1951)
>         at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1159)
>         ... 29 more
> Caused by: org.datanucleus.exceptions.NucleusException: Plugin
> (Bundle) "org.datanucleus.jpa" is already registered. Ensure you dont
> have multiple JAR versions of the same plugin in the classpath. The
> URL "file:/C:/Users/Timofey.NovaBigBook-PC/Documents/Eclipse/
> HoroscopeTest/lib/datanucleus-jpa-1.1.5.jar" is already registered,
> and you are trying to register an identical plugin located at URL
> "file:/C:/

[appengine-java] Re: Problem with Junit Test with JDO

2010-02-13 Thread Moritz
Remove datanucleus-appengine-1.0.5.final.jar from your build path, but
leave it in the WEB-INF/lib folder.

On 13 Feb., 07:07, Timofey Koolin  wrote:
> I use eclipse. I create new project for create Junit tests of my GAE
> application, add my gae application in JavaBuildPath/Project. Than i
> copy all jars from sdk to lib in my project and add all to build path.
>
> in constructor i create helper:
>                 helper = new LocalServiceTestHelper(
>                                         new LocalDatastoreServiceTestConfig()
>                                 );
> in setUp method i do
>
> helper.setUp();
> PersistenceManager pm = PMF.get().getPersistenceManager(); // - this
> line throw exception (stacktrace below)
>
> I tried create jdoconfig.xml - but have compile error - duplicate
> description.
>
> java.lang.ExceptionInInitializerError
>         at
> ru.abc_software.horoscope.test.HoroscopePageTest.Empty(HoroscopePageTest.ja 
> va:
> 35)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.junit.runners.model.FrameworkMethod
> $1.runReflectiveCall(FrameworkMethod.java:44)
>         at
> org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable. 
> java:
> 15)
>         at
> org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.j 
> ava:
> 41)
>         at
> org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.ja 
> va:
> 20)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 73)
>         at
> org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.ja 
> va:
> 46)
>         at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:180)
>         at org.junit.runners.ParentRunner.access$000(ParentRunner.java:41)
>         at org.junit.runners.ParentRunner$1.evaluate(ParentRunner.java:173)
>         at
> org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:
> 28)
>         at
> org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:
> 31)
>         at org.junit.runners.ParentRunner.run(ParentRunner.java:220)
>         at
> org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRe 
> ference.java:
> 46)
>         at
> org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:
> 38)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 467)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestR 
> unner.java:
> 683)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner 
> .java:
> 390)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunne 
> r.java:
> 197)
> Caused by: javax.jdo.JDOFatalInternalException: Unexpected exception
> caught.
> NestedThrowables:
> java.lang.reflect.InvocationTargetException at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1186)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 803)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 1086)
>         at javax.jdo.JDOHelper.getPersistenceManagerFactory(JDOHelper.java:
> 914)
>         at ru.abc_software.horoscope.test.PMF.(PMF.java:8)
>         ... 25 more
> Caused by: java.lang.reflect.InvocationTargetException
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
> 39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImp 
> l.java:
> 25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at javax.jdo.JDOHelper$16.run(JDOHelper.java:1956)
>         at java.security.AccessController.doPrivileged(Native Method)
>         at javax.jdo.JDOHelper.invoke(JDOHelper.java:1951)
>         at
> javax.jdo.JDOHelper.invokeGetPersistenceManagerFactoryOnImplementation(JDOH 
> elper.java:
> 1159)
>         ... 29 more
> Caused by: org.datanucleus.exceptions.NucleusException: Plugin
> (Bundle) "org.datanucleus.jpa" is already registered. Ensure you dont
> have multiple JAR versions of the same plugin in the classpath. The
> URL "file:/C:/Users/Timofey.NovaBigBook-PC/Documents/Eclipse/
> HoroscopeTest/lib/datanucleus-jpa-1.1.5.jar" is already registered,
> and you are trying to register an identical plugin located at URL
> "file:/C:/

[appengine-java] Re: App Engine and Spring slow start up

2010-02-16 Thread Moritz
Yes, I have the same problem, although it doesn't happen every time.
Unfortunately, I don't have a fix for this problem.

My application uses a scheduled task to update the cache every 5
minutes - this task fails every time with a HDEE, and I didn't have
the time to optimize it yet - maybe both issues are correlated.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Problem with using Apache HttpClient

2010-03-08 Thread Moritz
Hi Group,

I have a problem. I want to make a HTTP Post request using Apache
HttpClient. In the development environment everything works fine. But
in the production environment I get the following exception:

Uncaught exception from servlet
java.lang.NoClassDefFoundError: javax.net.ssl.HttpsURLConnection is a
restricted class. Please see the Google App Engine developer's guide
for more details.
at javax.net.ssl.HttpsURLConnection.(HttpsURLConnection.java)
at
org.apache.http.conn.ssl.SSLSocketFactory.(SSLSocketFactory.java:
255)
at
org.apache.http.conn.ssl.SSLSocketFactory.(SSLSocketFactory.java:
166)
at
org.apache.http.impl.client.DefaultHttpClient.createClientConnectionManager(DefaultHttpClient.java:
219)
at
org.apache.http.impl.client.AbstractHttpClient.getConnectionManager(AbstractHttpClient.java:
312)
at
org.apache.http.impl.client.DefaultHttpClient.createHttpContext(DefaultHttpClient.java:
254)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
618)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
576)
at
org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:
554)

The problem is, that I'm not trying to use SSL. It is a very normal
HTTP request (in fact I try uploading a photo to Flickr). Does anyone
know how to get rid of this problem?

Thank you,
Moritz

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-03-28 Thread Moritz
I have the same problem: "The App Engine SDK '/{project-root}/war' on
the project's build path is not valid" where "{project-root} is the
root directory of my project.
When I create a new project, this error does not occur, but I cannot
spot any differences in the configuration files of both projects, so
I'm a bit stuck at the moment.

On 29 Mrz., 04:07, Joa  wrote:
> I've tried to update GAE to 1.3.2. Now the project is broken and I
> seem to be not even able to revert back to 1.3.1.
>
> I've taken the following steps:
> - Trying to locate instructions. Couldn't find any, so this must be
> simple...
> - Updated Google plugin through Help -> Check for updates. Checks out
> - Then downloaded GAE 1.3.2 for Java, unzip
> - Set Project Properties using Google > App Engine. "Use specific SDK"
> set to 1.3.2. Now the project root in the Eclipse Package Explorer is
> marked with an error. The project won't start any longer without an
> error message and dumps stack traces. To my dismay, any changes in
> this panel do not seem to have an impact whatsoever now.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-04-03 Thread Moritz
Hi Jason,

On 29 Mrz., 18:24, Jason Parekh  wrote:

> Could you try the following:
> - In your project properties, could you see what the App Engine SDK is set
> to (right-click project > Properties > Google > App Engine).  Does it show
> an error on this page?  If you click the Configure SDKs button, what is the
> path for the SDK?

No matter what I do, the selected SDK is

/webgallery-spring/war
(wegallery-spring is the name of the project)

(!!)
It always automatically changes to that setting. As you might guess,
there is no SDK at that location.
My SDKs are at /Users/Moritz/Documents/Installation/Libraries/
appengine-java-sdk-1.3.2 (and -1.3.1, -1.3.0, …)

The default SDK is appengine-java-sdk-1.3.2 but it never gets selected
- or to be precise: the selection is never saved.


> - In your project properties, can you go to Java Build Path , then Libraries
> tab, and see if there are any leftover JARs on your classpath?  If there
> are, could you take a screenshot of that dialog (hopefully tall enough so
> all the entries are visible)?

Here:
http://farm5.static.flickr.com/4025/4487531734_e7567c87e8_o.png

Please note, that I have updated the Plugin normally with the Eclipse
Update Manager, and downloaded the SDK from the Google Website, copied
it to the usual location (see above).

It still doesn't work yet!

Any idea what could be wrong?

Regards,
Moritz

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-04-03 Thread Moritz
Here is a screenshot of the project's appengine settings:

http://farm3.static.flickr.com/2801/4486943539_41cbc3abe3_o.png

I'm unable to change the settings. After "OK" the settings aren't
saved and the SDK is always the "specific SDK", which of course
doesn't exist.

Moritz.

On 29 Mrz., 18:24, Jason Parekh  wrote:
> Hi Moritz,
>
> Could you try the following:
> - In your project properties, could you see what the App Engine SDK is set
> to (right-click project > Properties > Google > App Engine).  Does it show
> an error on this page?  If you click the Configure SDKs button, what is the
> path for the SDK?
> - In your project properties, can you go to Java Build Path , then Libraries
> tab, and see if there are any leftover JARs on your classpath?  If there
> are, could you take a screenshot of that dialog (hopefully tall enough so
> all the entries are visible)?
>
> Thanks,
> jason
>
>
>
> On Mon, Mar 29, 2010 at 1:53 AM, Moritz  wrote:
> > I have the same problem: "The App Engine SDK '/{project-root}/war' on
> > the project's build path is not valid" where "{project-root} is the
> > root directory of my project.
> > When I create a new project, this error does not occur, but I cannot
> > spot any differences in the configuration files of both projects, so
> > I'm a bit stuck at the moment.
>
> > On 29 Mrz., 04:07, Joa  wrote:
> > > I've tried to update GAE to 1.3.2. Now the project is broken and I
> > > seem to be not even able to revert back to 1.3.1.
>
> > > I've taken the following steps:
> > > - Trying to locate instructions. Couldn't find any, so this must be
> > > simple...
> > > - Updated Google plugin through Help -> Check for updates. Checks out
> > > - Then downloaded GAE 1.3.2 for Java, unzip
> > > - Set Project Properties using Google > App Engine. "Use specific SDK"
> > > set to 1.3.2. Now the project root in the Eclipse Package Explorer is
> > > marked with an error. The project won't start any longer without an
> > > error message and dumps stack traces. To my dismay, any changes in
> > > this panel do not seem to have an impact whatsoever now.
>
> > --
> > You received this message because you are subscribed to the Google Groups
> > "Google App Engine for Java" group.
> > To post to this group, send email to
> > google-appengine-j...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > google-appengine-java+unsubscr...@googlegroups.com > unsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/google-appengine-java?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-04-04 Thread Moritz
Just to let everyone know: uninstalling the plugin & sdk and
reinstalling everything worked.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-04-04 Thread Moritz
… not. again I have the same problem.

It always jumps back to "Specific SDK '/{project-root}/web'"

Very annoying. The Google Plugin is definitively broken on my computer
and I have no idea how I can fix it.

On 4 Apr., 13:31, Moritz  wrote:
> Just to let everyone know: uninstalling the plugin & sdk and
> reinstalling everything worked.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Update to GAE/J 1.3.2 -> Project in Eclipse broken

2010-04-19 Thread Moritz
No.

Miguel asked for an example project for reproduction, but in each and
every project I try to enable appengine support, I get the same
problem and the SDK is permanently set to "{project.home}/war" and I'm
not able to change it.

My solution is to get rid of the Eclipse plugin and use the Maven
plugin instead. Maven is better anyway - unfortunately not officially
supported by Google.

Moritz

P.S.: I'm using Eclipse on Mac OS X 10.6.3

On 19 Apr., 13:00, Dannemano  wrote:
> Hi,
>
> Any updates on the bug? I have the exact same problems and have been
> unable to fix it.
>
> Regards,
> Daniel
>
> On 5 Apr, 15:04, Miguel Méndez  wrote:
>
> > Can you file a bug with a project that reproduces the problem?  I think that
> > will be the best way to get to bottom of what is going on.
>
> --
> You received this message because you are subscribed to the Google Groups 
> "Google App Engine for Java" group.
> To post to this group, send email to google-appengine-j...@googlegroups.com.
> To unsubscribe from this group, send email to 
> google-appengine-java+unsubscr...@googlegroups.com.
> For more options, visit this group 
> athttp://groups.google.com/group/google-appengine-java?hl=en.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Problem with admin pages

2010-09-20 Thread Moritz
Hi,

I'm trying to use admin pages embedded in the Administration Console
as described here . The menu entry
for the admin page is shown correctly, but when I call the page, I get
the error:

"Error: Server Error

The server encountered an error and could not complete your request.
If the problem persists, please report your problem and mention this
error message and the query that caused it."

The logs show a warning entry:

"Authentication for the Google Apps domain cloudme.org can only be
performed when requests are served from a subdomain of that domain or
it has been approved through the Google Apps Control Panel. See
http://code.google.com/appengine/articles/auth.html";

In my application I'm using authentication for users of the
cloudme.org domain only and I'm using the admin console at .

I tried before using authentication for all Google accounts, but that
displayed the login screen on the admin page itself. Therefore I
thought that using the domain authentication type would be more
adequate for my setup.

In my appengine-web.xml I have configured:


  

  


and in the web.xml I have:


  

  Admin pages
  /admin/*


  admin

  

Of course, the domain works on the development server.

Any ideas what's wrong?

Mo.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Mvenizing GAE/GWT project

2010-09-20 Thread Moritz
Maybe the maven-gae-plugin group would be more helpful. But:

In the dependencies section, you should use variables like "$
{gae.version}" (without quotes). When defining variables in the
properties section you should use "1.3.7" (without quotes).

I'd recommend that you use the latest version of the plugin and
install the appengine sdk using "mvn gae:unpack".

Mo.

On 20 Sep., 21:05, Ravi Sharma  wrote:
> Hi All,
> I am trying to maenize my exisitng GAE-GWT project. So first i started with
> a sample new project as mentioned here
>
> http://code.google.com/p/maven-gae-plugin/
>
> I created a project with this command as mentioned on this page
>
> mvn archetype:generate -DarchetypeGroupId=net.kindleit
> -DarchetypeArtifactId=gae-archetype-gwt -DarchetypeVersion=0.7.1
> -DgroupId=com.myapp.test -DartifactId=testapp
>
> And then i imported this project in eclipse(Galileo)
>
> And nothing worked.(I did expected that it will work )
> Version variables are defined like this $${Gae.version}}, which looks absurd
> and feel like this plugin is not good enough to start with.
> even after fixing these problems, it didint work at all.
>
> Does any one have any sample example/steps for GAE-GWT project with maven.
>
> Thanks,
> Ravi.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] [SOLVED] Problem with admin pages

2010-09-22 Thread Moritz
For the record: The problem was that I didn't add the application to
my app services as described on <http://code.google.com/intl/de-DE/
appengine/articles/auth.html> at the bottom section.

On 20 Sep., 23:25, Moritz  wrote:
> Hi,
>
> I'm trying to use admin pages embedded in the Administration Console
> as described here <http://code.google.com/appengine/docs/java/config/
> appconfig.html#Administration_Console_Custom_Pages>. The menu entry
> for the admin page is shown correctly, but when I call the page, I get
> the error:
>
> "Error: Server Error
>
> The server encountered an error and could not complete your request.
> If the problem persists, please report your problem and mention this
> error message and the query that caused it."
>
> The logs show a warning entry:
>
> "Authentication for the Google Apps domain cloudme.org can only be
> performed when requests are served from a subdomain of that domain or
> it has been approved through the Google Apps Control Panel. 
> Seehttp://code.google.com/appengine/articles/auth.html";
>
> In my application I'm using authentication for users of the
> cloudme.org domain only and I'm using the admin console at  appengine.google.com/a/cloudme.org>.
>
> I tried before using authentication for all Google accounts, but that
> displayed the login screen on the admin page itself. Therefore I
> thought that using the domain authentication type would be more
> adequate for my setup.
>
> In my appengine-web.xml I have configured:
>
>   
>     
>   
>
> and in the web.xml I have:
>
>   
>     
>       Admin pages
>       /admin/*
>     
>     
>       admin
>     
>   
>
> Of course, the domain works on the development server.
>
> Any ideas what's wrong?
>
> Mo.

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: maven-gae-plugin

2010-12-24 Thread Moritz
Please check the maven-gae-plugin group. There is a thread about this:
http://groups.google.com/group/maven-gae-plugin/browse_thread/thread/d65f33bd1c33170/e33b21d3ecbd8338?lnk=gst&q=debug#e33b21d3ecbd8338


On 23 Dez., 05:03, Patrick Twohig  wrote:
> Hi,
>
> I was having difficulty debugging my application using Maven plugin for App
> Engine.  As soon as I connect the debugger the process stops.  Is anybody
> else experiencing this issue?  Or, alternatively, is there any other means
> to get maven+gae+eclipse and the debugger working?
>
> Thanks,
> Patrick.
>
> --
> Patrick H. Twohig.
>
> Namazu Studios
> P.O. Box 34161
> San Diego, CA 92163-4161

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine for Java" group.
To post to this group, send email to google-appengine-j...@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine-java+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine-java?hl=en.