Re: [google-appengine] Datastore write costs

2012-12-26 Thread John Patterson


On Thursday, 27 December 2012 01:27:47 UTC+13, aschmid wrote:

 even if a property is not indexed is needs to be written to the datastore 
 so it costs 1 write instead of 2 (one to the datastore and one to the 
 index).



Unindexed properties do not cost anything to write.  They are included in 
the one write operation that writes the entity data.  Basically, all 
properties are serialised and written as a single opaque unit.  It costs no 
more to write 1000 unindexed properties as 1 - however the latency to read 
and write will be higher which will cost you in terms of instance hours.

An indexed property costs 2 writes because each index (ASC, DESC) is 
a separate write.
 

  

vlad UNEXISTING props do not add any write cost ;)


What do you mean by UNEXISTING?  Be careful here because null values will 
also cost 2 writes if they are indexed.

Twig (prob also Objectify) can be configured store null values as indexed 
or not indexed (also or stored or not stored) while still storing non-null 
values.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/SDxdWsxYrC4J.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: Pull task leasing question

2012-12-26 Thread John Patterson


On Wednesday, 26 December 2012 19:26:35 UTC+13, Mahron wrote:

 Hi, 

 I would like to know what happens if two simultaneous lease_tasks are 
 called, is it possible that both get returned the same tasks ? or is 
 there something to prevent that scenario ? 


The recommendation from Google about pull queues is Tasks should be 
idempotent, so even if a task lease expires and another client leases the 
task, performing the same task twice should not cause an error.

With push queues (standard task queues) there is also no guarantee that a 
task will not be executed more than once so probably the same caveat is 
true when you manage the queue yourself.

How likely is this?  The push queue docs say: App Engine's Task Queue API 
is designed to only invoke a given task once; however, it is possible in 
exceptional circumstances that a task may execute multiple times (such as 
in the unlikely case of major system failure). Thus, your code must ensure 
that there are no harmful side-effects of repeated execution.

However I have seen it happen more frequently than major system failures. 
 I have a task chain that uses named tasks (can only be added once) and 
roughly 1 / 500,000 tasks gets repeated. 

If you truly need to ensure tasks execute only once you can give each a 
serial number (in a task chain increment the value for each new task) and 
at the start of your task do a transactional check and increment 
operation on the datastore.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/WqFUEfLAinoJ.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: NoSuchFieldError - TypedValue.clinit(TypedValue.java:31) when Running GWT Appengine webapp

2012-11-03 Thread John Patterson
You probably have a different Spring jar in your WEB-INF/lib to the one on 
your project classpath

On Saturday, 3 November 2012 12:38:23 UTC+7, xybrek wrote:

 I'm getting this exception when running my GWT-AppEngine application:

 java.lang.NoSuchFieldError: NULL
 at 
 org.springframework.expression.TypedValue.clinit(TypedValue.java:31)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:186)
 at 
 com.google.appengine.tools.development.agent.runtime.RuntimeHelper.checkRestricted(RuntimeHelper.java:70)
 at 
 com.google.appengine.tools.development.agent.runtime.Runtime.checkRestricted(Runtime.java:64)
 at 
 org.springframework.expression.spel.support.StandardEvaluationContext.setRootObject(StandardEvaluationContext.java:85)
 at 
 org.springframework.expression.spel.support.StandardEvaluationContext.init(StandardEvaluationContext.java:74)
 at 
 org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:124)
 at 
 org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1272)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:224)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:311)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:616)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:125)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:616)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:270)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:125)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:353)
 at 
 org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:153)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:630)
 at 
 org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1003)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:907)
 at 
 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
 at 
 

[google-appengine] Bounding box spatial queries

2012-07-09 Thread John Patterson
The new Full Text Search API allows a find within X meters type search 
but I need a bounding box search.  Are there plans to implement this?

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/8NRFJlDHJ90J.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [appengine-java] GeoPt vs. two floats

2011-10-06 Thread John Patterson
You can actually store a coordinate accurate to about 1 meter in a single 
long value (32 bits each axis).  This can be an important saving if you are 
indexing a lot of locations.  Think of the long value as pointing to a block 
of earth at any degree of accuracy you want.  You can then query for all 
entities that are in the same 1KM block or 10KM block using a normal query 
which you cannot do if you store two floats.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/U3oKICdkgBQJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: Loading requests timeout with DeadlineExceededException while reading classes

2011-09-17 Thread John Patterson
Hi Googlers, I was wondering if someone could answer the 3 questions below 
regarding slow resource file loading.  I am getting a bit tired 
of jarring up all classes and resource files (and removing WEB-INF/classes) 
every time I want to update my app with GEP.

On Wednesday, 31 August 2011 20:15:03 UTC+7, John Patterson wrote:

Why is the time for file system access so erratic?  As this is a major 
 performance/stability variable then perhaps it should be covered in the 
 system status pages.

 Is this file system access problem somehow linked to the recent memcache 
 issues?

 Will this problem be addressed?  Is it even considered a bug?  Or is the 
 advice from Googlers to always put local resources (incl classes) into a 
 jar now and in the future? 



-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/sdyS_fTxgO4J.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: Loading requests timeout with DeadlineExceededException while reading classes

2011-09-10 Thread John Patterson
I have started getting deadlock exceptions thrown from code that uses Guavas 
ConcurrentHashMap

http://code.google.com/p/googleappengine/issues/detail?id=5384

Aside from this problem, loading requests frequently seem to block on 
something (resource access?).  Normally they complete in 5-8 seconds but 
sometimes (~25%) they take 20 - 60 seconds or just time-out (DEEx).

I was not getting either of these problems with thread-safe=false but 
latency was higher so I don't want to switch back to that mode.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/GVNEEEAazngJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: min. charge under new pricing

2011-09-05 Thread John Patterson
You are right: 9 bucks is the minimum *if *you want to be able to 
automatically scale beyond the free limits.  Your app is either free to run 
(under 50,000 datastore ops a day etc) or at least 9 dollars a month. 
 Nothing in-between.  Its the fear of showing a quota error page to users 
that will force many small sites to pay this scaling fee.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/DJ5D68t_XzUJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: The JavaScript file is not found to the JSF2 application that has been deployed

2011-09-05 Thread John Patterson
Do you have caching set up for static files in your appengine-web.xml?  This 
can mean that when you deploy a new version the old scripts are still served 
for a while.  You can verify what scripts are available on the server by 
requesting them directly in your browser.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/hKcDVj5oMsAJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[google-appengine] Re: Google App Engine Leaving Preview

2011-09-05 Thread John Patterson
You must increase it past your current authorized weekly limit so that you 
are taken to Google Checkout.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/29VwYNpxZJkJ.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: GAE development team rebelling against GAE

2011-09-05 Thread John Patterson
You will need to post questions about specific problems in order to get 
helpful answers.  Do you have Javascript files that are cachable and out of 
date?  Do you have Google Maps using a development server key?  That sort of 
thing can stop other scripts from executing.

At the end of the day your app serves up HTML, JavaScript and CSS... it 
makes no difference to the browser if that is coming from GAE or a linux 
rack.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/Jf9jm9YFcAsJ.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Even the HR Datastore is (slightly) having performance issue now.

2011-09-05 Thread John Patterson


On Friday, 2 September 2011 23:10:30 UTC+7, Robert Kluin wrote:

 As for the SLA, see the exclusions section.  SLAs are fairly worthless
 in my honest opinion anyway, so this probably isn't really something
 to worry about though.
   http://code.google.com/appengine/sla.html


The SLA does not really offer me any peace of mind.  If the datastore slows 
down to the point where requests are taking 5 seconds to return then my app 
is as good as dead.  But the SLA doesn't cover performance problems - only 
errors.  If my app becomes so slow that it starts to throw DEE's then that 
is probably considered a problem with the application code rather than an 
infrastructure error.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/vaMwJ2LpSUoJ.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[google-appengine] Re: Could I pay my GAE hosting fee from AdSense revenue?

2011-09-05 Thread John Patterson
After the new pricing takes effect my AdSense revenue will be about 200x the 
higher hosting costs.  So yes, it is very possible to pay for your running 
costs with AdSense and still retain 99% as profit.  If you are starting a 
new site from zero the only tricky thing is estimating when to start paying 
the 9 bucks a month to enable scaling or risk having quota error messages 
shown to your users.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/McwQcJDisJUJ.
To post to this group, send email to google-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



[appengine-java] Re: threads per instance (Java)

2011-09-04 Thread John Patterson
Three months ago instances were limited to 10 concurrent requests but 
apparently this restriction will be completely removed (may already be 
removed) and the CPU usage of your app will be the sole determinant of 
concurrency.  So if your app handles requests very efficiently it will 
handle a higher number of simultaneous requests before requests linger in 
the pending queue.  There will be some CPU limit for front end instances 
such as 600Mhz.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/hZMakuEUqbUJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Loading requests timeout with DeadlineExceededException while reading classes

2011-08-31 Thread John Patterson
I've changed the topic name from this thread but the issue is the same: 
 https://groups.google.com/d/topic/google-appengine-java/nU1c9tHbG60/discussion

I want to know if this is a recognised problem with threads-safe=true apps 
and if work is being done to improve the situation.  Can I expect a solution 
soon or should I revert to thread-safe=false in the mean time.  Currently it 
is causing havoc with one of my sites and traffic has dropped very 
significantly over the last week.  Using thread-safe=false raises the 
latency on average (but without the long loads) so that is not really ideal.

To reiterate the problem, loading requests frequently time-out with 
DeadlineExceededException or HardDeadlineExceededError while loading 
classes.  As my app uses Guice, this usually happens while creating the 
Injector from a ContextListener. 

Usually loading requests take 4 - 8 seconds.  Recently (last week or more) 
they take either the normal time or an excessive amount of time (not in 
between), often causing a time-out.  When they do time-out the exception is 
thrown while waiting for file system access which makes me think that  this 
is the cause of the long delays and exceptions.  

This problem *only *occurs during loading requests - never during normal 
requests.  This reinforces the theory that it is due to class loading or 
other initialisation work.  The exception is never thrown while trying to 
read from memcache or the datastore so I don't think the recent memcache 
problems can be blamed.

Below are some example stack traces from loading requests that time-out

Caused by: com.google.apphosting.api.DeadlineExceededException: This request 
(87a9b70d2e6454ce) started at 2011/08/30 21:35:23.631 UTC and was still 
executing at 2011/08/30 21:36:07.688 UTC.
at 
com.google.appengine.runtime.Request.process-87a9b70d2e6454ce(Request.java)
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:231)
at sun.misc.Resource.getBytes(Resource.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:273)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)
at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:616)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)


Caused by: com.google.apphosting.runtime.HardDeadlineExceededError: This 
request (5d47b3fba3dc9418) started at 2011/08/30 21:35:53.131 UTC and was still 
executing at 2011/08/30 21:36:28.003 UTC.
at 
com.google.appengine.runtime.Request.process-5d47b3fba3dc9418(Request.java)
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:231)
at sun.misc.Resource.getBytes(Resource.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:273)
at sun.reflect.GeneratedMethodAccessor5.invoke(Unknown Source)

Caused by: com.google.apphosting.runtime.HardDeadlineExceededError: This 
request (969d70b821181c7d) started at 2011/08/30 04:05:53.874 UTC and was still 
executing at 2011/08/30 04:06:34.552 UTC.
at 
com.google.appengine.runtime.Request.process-969d70b821181c7d(Request.java)
at java.util.zip.ZipFile.read(Native Method)
at java.util.zip.ZipFile.access$1200(ZipFile.java:57)
at java.util.zip.ZipFile$ZipFileInputStream.read(ZipFile.java:476)
at sun.misc.Resource.getBytes(Resource.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:273)
at java.net.URLClassLoader.access$000(URLClassLoader.java:73)
at java.net.URLClassLoader$1.run(URLClassLoader.java:212)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:205)
at java.lang.ClassLoader.loadClass(ClassLoader.java:321)




When the loading request take so long, many instances are started to handle 
the pending requests.  This results in a lot of instances created that are 
not needed and they just sit there once the app eventually gets back on its 
feet again:



https://lh5.googleusercontent.com/-9ehwmZDo0ys/Tl3Aevbh45I/ADg/VJfOXow4Rk8/Capture.PNG


I've seen related issues in the tracker but one discussion suggested that 
the problem was fixed in 1.5.2:

https://groups.google.com/d/topic/google-appengine-java/6tnyfJLBIXM/discussion

One issue in the tracker is Started but no update and it is now a couple 
of months old:

http://code.google.com/p/googleappengine/issues/detail?id=5214

I hope someone can shed some light on this problem.

Thanks,

John

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/eKUvh_zhZScJ.
To post to this group, send 

[appengine-java] Re: Loading requests timeout with DeadlineExceededException while reading classes

2011-08-31 Thread John Patterson
I should add that some loading requests take an excessive amount of time 
(20+ seconds) but do not time out.  Those are the ones that result in the 
unneeded front-end instances shown above.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/CIx4uK_t1zkJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: GAE domains not resolving

2011-08-31 Thread John Patterson
When I try your link from Thailand it resolves to Google but gives this 
error

https://lh3.googleusercontent.com/-sO3H5YHOxdY/Tl4UFX-zLHI/ADk/ukA7hBPg_TY/Capture.PNG


So it looks like your domain issues are local but you have not added the 
domain to your app correctly.  BTW, I also experienced such a local DNS 
problem that resolved itself within a day.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/o7xlizvSHHMJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: GAE domains not resolving

2011-08-31 Thread John Patterson

On 31/08/2011 18:36, footy wrote:

That is the 404 error page from Google which is what led me to believe
that there is a probelm
with ghs.google.com and CNAME resolution.



The fact that your browser shows this google page indicates that the 
name resolution is working but that perhaps you have not added the 
subdomain to your app.


--
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: Loading requests timeout with DeadlineExceededException while reading classes

2011-08-31 Thread John Patterson

On 31/08/2011 19:48, Simon Knott wrote:


Another developer posted that they had a massive performance 
improvement deploying their classes in a JAR file - see 
https://groups.google.com/d/msg/google-appengine/Gl7OaMOHJD8/i_ti0KceockJ 
for the relevant thread.


A ha!!!  I have not tested as a jar yet but this sounds like exactly the 
problem causing some loading requests to stall.  Thanks for the link :)


More questions:

Why is the time for file system access so erratic?  As this is a major 
performance/stability variable then perhaps it should be covered in the 
system status pages.


Is this file system access problem somehow linked to the recent memcache 
issues?


Will this problem be addressed?  Is it even considered a bug?  Or is the 
advice from Googlers to always put local resources (incl classes) into a 
jar now and in the future?  If so then it should be plastered all over 
the docs and every developer called up on the telephone and told to jar 
their apps up tight.  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-java@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.



Re: [appengine-java] Task queue locking up

2011-08-24 Thread John Patterson
I switched back to thread-safetrue/threadsafe , upgraded to SDK 1.5.2 
and for a week the number of deadlocks seems to be greatly reduced.

I do still get deadlocks but now the error reporting is MUCH better.  They 
normally occur in some Google generated method 
com.google.appengine.runtime.Request.process-XXX. 
Often they are due to the class loader accessing the file system 
concurrently. There doesn't seem to be anything my code can do to protect 
against these. They usually occur while an instance is spinning up - loading 
classes etc.

In fact, last night for a period, almost every loading request caused a dead 
lock. Not good. Normal loading requests complete in 6 seconds.


Here are a few example stack traces:


com.google.apphosting.runtime.HardDeadlineExceededError: This request 
(fa381c78a3815eac) started at 2011/08/24 23:52:33.115 UTC and was still 
executing at 2011/08/24 23:53:04.127 UTC.
at 
com.google.appengine.runtime.Request.process-fa381c78a3815eac(Request.java)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.init(FileInputStream.java:139)
at java.lang.ClassLoader.loadClass(ClassLoader.java:266)


Caused by: com.google.apphosting.runtime.HardDeadlineExceededError: This 
request (fd3fb35c7fd41f00) started at 2011/08/25 00:00:41.072 UTC and was still 
executing at 2011/08/25 00:01:14.736 UTC.
at 
com.google.appengine.runtime.Request.process-fd3fb35c7fd41f00(Request.java)
at java.io.UnixFileSystem.getBooleanAttributes0(Native Method)
at java.io.UnixFileSystem.getBooleanAttributes(UnixFileSystem.java:243)
at java.io.File.exists(File.java:807)



com.google.apphosting.runtime.HardDeadlineExceededError: This request 
(c7de12e8c6c87de3) started at 2011/08/25 00:01:17.557 UTC and was still 
executing at 2011/08/25 00:01:48.517 UTC.
at 
com.google.appengine.runtime.Request.process-c7de12e8c6c87de3(Request.java)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.init(FileInputStream.java:139)
at java.lang.Class.getGenericSuperclass(Class.java:386)
at 
com.google.inject.TypeLiteral.getSuperclassTypeParameter(TypeLiteral.java:97)
at com.google.inject.TypeLiteral.init(TypeLiteral.java:77)




Caused by: com.google.apphosting.api.DeadlineExceededException: This request 
(5cb100e4cb6e2818) started at 2011/08/25 00:13:55.275 UTC and was still 
executing at 2011/08/25 00:14:26.967 UTC.
at 
com.google.appengine.runtime.Request.process-5cb100e4cb6e2818(Request.java)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.init(FileInputStream.java:139)
at java.lang.Class.forName(Class.java:110)


-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/TDMIg2gMovwJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] GWT + GAE pom?

2011-08-10 Thread John Patterson
I haven't read your exact setup but some things that might help:

Add this to your pom.xml

build
outputDirectory${project.build.directory}/${project.build.finalName}/WEB-INF/classes/outputDirectory

I use the Eclipse plugin FileSync to keep src/main/webapp synchronised with 
/target/myapp-1.0/

In Eclipse preferences, under Google  Web Application I have ticked This 
project has a war directory and set it to src/main/webapp

I do not include any of the App Engine jars in my pom because the Eclipse 
plugin seems to depend on the location of some of them to find other bits 
and pieces in the SDK - at least it did a number of releases back.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/q4oahoP4Y48J.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Datastore access deadlock

2011-08-05 Thread John Patterson
Do you normally see the DeadlineExceededException?  If not then perhaps you 
are running into this dead-lock issue :

http://code.google.com/p/googleappengine/issues/detail?id=5384

Try turning off thread-safe mode - that fixed the problem for me while I 
wait for a proper fix for multi threaded apps.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/tgtrc2G3CgsJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: Mining logs for performance data

2011-08-01 Thread John Patterson

On 30/07/2011 08:50, Kesava Neeli wrote:
Thanks for the pointer. I wasn't aware of the the 'download logs' 
tool. I will give that a try. 


It doesn't contain the time information. That only shows in the console

--
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Task queue locking up

2011-07-25 Thread John Patterson


On Tuesday, 26 July 2011 04:03:44 UTC+7, Ikai L (Google) wrote:

 John, yeah, it's a deadlock, possibly in userspace code. Can you look into 
 this?


The only pattern I could detect was the dead-lock with concurrent file 
access - I had my web framework in dev mode so each request was loading 
templates.  I do a lot of reflective reads and writes (Method.get 
Method.set) and annotation reading, which makes me suspect the GAE security 
manager.

I've run a load test on the dev server and not seen the dead-locks locally.


On our end we'll see if we can surface and more usable error message.


Nice one, a stack trace would really help figure this one out.  I'll turn on 
threadsafe mode again once its possible to get some more details on the 
problem.

I think that running single threaded increases the variance of response 
times.  I often now see a request take e.g. 600ms but my code competes in 
50ms.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/YfJhHVZZo70J.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Mining logs for performance data

2011-07-25 Thread John Patterson
I've seen a couple of apps (iPad app) that can log into your account and 
monitor various things.

I took a very low-tech approach to average the response time from logs: I 
filter logs by label (e.g. path:/place/.*) and set the limit to 200 (the 
maximum logs you can show in one page) and then copy and past the results 
into a file and run this to average the times:


public class GetAverageTimeFromLogPage
{
public static void main(String[] args) throws MalformedURLException, 
IOException
{
FileReader reader = new FileReader(args[0]);
String text = CharStreams.toString(reader);
long total = 0;
int count = 0;
 Pattern pattern = Pattern.compile( 200 (\\d+)ms);
Matcher matcher = pattern.matcher(text);
while (matcher.find())
{
String time = matcher.group(1);
long value = Long.parseLong(time);
 // remove restarts
if (value = 1000)
{
count++;
total += value;
}
}
 System.out.println(total / count +  from  + count);
}
}

I hope someone has a nicer method!!

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/lwLRH0p6XYkJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: java.lang.NoClassDefFoundError: for sample project ( CodeLabEx2.zip.)

2011-07-25 Thread John Patterson
make sure you have all the app engine libs in /WEB-INF/lib

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/QTTGn-_VOmAJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Pending or not pending

2011-07-23 Thread John Patterson

Hi,

I was wondering why in the logs some requests show pending=XXXms and 
others do not even though the request is clearly taking a lot of time 
in the plumbing before it gets to my first request Filter (which times 
total ms spent in my code)?


As an example, below are samples from my logs timed in ms

Total My code   Pending
868
784   27ms Not specified

In the last sample the request took a lot of time before hitting my code 
but no pending value was logged.  In contrast the first sample shows a 
request which does specify the pending value but it is not really 
significant.


Can a request be moved from the pending queue to a front end instance 
and then block while waiting for another single threaded request to 
complete?


Cheers,

John

--
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: New Pricing Model

2011-07-22 Thread John Patterson
No body can answer that without knowing exactly how your app uses billed 
resources.

Latest details can be found here:

https://groups.google.com/d/topic/google-appengine/Hluog1_a3n4/discussion

BTW, 10 queries is too much - your goal should be zero or one query per page 
by using denormalisation, memcache and in-memory caching. 
 10 consecutive queries would result in a very slow website and if your 
requests don't complete in roughly 600ms or less then your app will not be 
auto-scaled which effectively kills it.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/9hGSoMRIKkMJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Task queue locking up

2011-07-21 Thread John Patterson
Oh also, I was previously getting deadlocks ( time-out without exception) as 
more than one thread tried to read a resource from the file system.

I wonder if the wide variety of circumstances that this problem occurs in 
points to something fundamental like the security manager?

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/gKRRQMJfoxoJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Task queue locking up

2011-07-20 Thread John Patterson
I have a task which sometimes runs fine in a few seconds and other times 
locks up and times out after 10 mins.  The logs do not show any exception 
just this message:

2011-07-21 01:38:06.983

A serious problem was encountered with the process that handled this request, 
causing it to exit. This is likely to cause a new process to be used for the 
next request to your application. If you see this message frequently, you may 
have a memory leak in your application. (Error code 201)


it is logged at WARN level not critical.  The instances console page shows 
memory use is only 80MB

The problem is easily repeatable.  As no exception is logged I cannot tell 
if it is locking up due to a problem in my code or in the SDK code.

I'm running 1.5.0 on the high replication datastore.

Cheers,

John

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/QlTy5SkZ_o8J.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Big Entities vs Small Entities

2011-07-01 Thread John Patterson
Keep them all in one Entity so you only need to do a single datastore get() 
but embed a List of FormField (or something) in the main entity.  Both Twig 
and Objectify support embedding collections of objects in a single Entity. 
 Entity size is less important than the number of datastore calls you must 
make.

class MyEntity
{
  @Embed private ListFormField fields;
}

class FormField 
{
  String value;
  boolean modified;
}

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/VgmHIl1m87QJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Optional custom index

2011-06-29 Thread John Patterson

Hi All,

I just wanted to share some timings and a performance tip that I wasn't 
previously aware of on the HR datastore (should also apply to MS datastore).


I had a query that was the limiting factor for my page load time.  It 
was taking on avg 280ms to query with two equality filters across a 
dataset of about 600,000 records.  A custom index is not needed because 
the query contains only equality filters.


After adding a custom index on those fields the average query time 
dropped to about 50 milliseconds.  Interestingly the api_cpu consumed 
remained exactly the same at 104ms.


John

--
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: FileServiceFactory.getFileService().getBlobKey(file) is Broken, blobkey parser returns null

2011-06-13 Thread John Patterson
I'm finding the same problem.  This worked for me:


BlobKey key = files.getBlobKey(file);
if (key == null)
{
Thread.sleep(2000);
key = files.getBlobKey(file);
}

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/fzW-7DGiCZkJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Entity.getKey() reliable for gets?

2011-06-12 Thread John Patterson
Hi Jay, yes you can use the Key that you have created - it is fully 
specified by the kind and id/name (automatically includes appId and 
namespace).  It is worth noting that if you create a Key and Entity then 
keep a reference to the Key in a HashMap that after calling db.put() the has 
value of the Key will change if its id is set.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/OWISvPDLkPgJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



[appengine-java] Re: Entity.getKey() reliable for gets?

2011-06-12 Thread John Patterson
.. that is the hash value will change.

-- 
You received this message because you are subscribed to the Google Groups 
Google App Engine for Java group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine-java/-/uIMwryKZk9kJ.
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Re: how to persist a list of bytearray?

2011-03-21 Thread John Patterson

On 18/03/2011 15:29, Jeff Schnitzer wrote:

I normally don't do this but... if you're using Objectify, it's just:

@Serialized
private Listbyte[]  attachments;

Jeff


... and for comparison, with Twig you use its type converter system to 
tell it to store the whole list as a single blob:


   @Type(Blob.class)
   private Listbyte[] attachments;


John

--
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 at 
http://groups.google.com/group/google-appengine-java?hl=en.



Re: [appengine-java] Low-level API: EntityTranslator and DataTypeTranslator

2010-10-26 Thread John Patterson
These are unpublished classes so you should use them at your own  
risk.  They may change in a future release in which case you will get  
NoSuchMethodError exceptions thrown.


You can see how Twig uses them in AyncDatastoreHelper to implement  
async datastore commands.  Twigs implementation protects against  
changes to these classes by capturing errors and retrying the normal  
synchronous commands instead.  So if there are any problems due to  
server side upgrades Twig drops back to normal speed operations that  
are run serially rather than in parallel.


John

On 26 Oct 2010, at 18:02, dominity wrote:


Hi, guys.

Is there any information of how could I use these classes in my code?

Best regards, Alexander.

--
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 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.



Re: [appengine-java] Many to many relation ship

2010-10-19 Thread John Patterson
On 7 October 2010 05:15, hadf hadrien.for...@gmail.com wrote:

  how jpa or jdo knows that Car is associated to User ?

 public class Car {
@OneToMany
private SetKey users; //this relation ship is untyped
 }


Two alternative datastore frameworks add typing in different ways.  Twig
uses direct references:

class Car
{
  SetUser users;
}

and Objectify uses generic Keys;

class Car
{
  SetKeyUser users;
}

http://code.google.com/p/twig-persist/
http://code.google.com/p/objectify-appengine/

-- 
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.



Re: [appengine-java] Size of Nearly Empty Entity

2010-10-18 Thread John Patterson
This should answer most of your questions about storage:

http://code.google.com/appengine/articles/storage_breakdown.html

Entities do not use any space for missing values but do use space for null
values.  In fact, because Entities are essentially a Map of name-value
pairs, there is really no such thing as a missing value.  If space is a
concern it is better to not store nulls unless you want to query for them.
 Twig gives you the choice of whether you want to store null values or not
but I don't think JDO-GAE (or other datastore frameworks?) can be configured
to do this.

Firstly, you should be certain it is worth the effort to optimise storage
space.  It is likely not worth the time to bother with deltas etc.

http://code.google.com/appengine/articles/storage_breakdown.htmlWhen you
view the datastore statistics page you might find most of your storage space
used by meta data.  You can reduce this by using small kind names,
property names and even the app-id which are all included in every indexed
value.

Twig 2.0 can be configured to store short kind and property names without
requiring you to rename your data model classes or fields.  I don't think
JDO-GAE can do this... but not certain about that.


On 18 October 2010 12:07, Rud rudmerr...@gmail.com wrote:

 My app has a UserProfile class (entity) with many fields. These are
 your typical user demographics - age, marital status, etc. Over time
 users will change the fields, i.e. get married or divorced.

 I need to keep a history of changes. I am wondering if creating
 another entity of the entire class containing only the data in the
 changed field would be efficient. Ignore the mechanics of tracking how
 the new entity relates to the old since I think that is just detail
 chasing.

 The question is whether the new entity with only a single field
 populated is only the size of that field, or nearly so. Or is the
 stored entity have a default field for every field in the entity,
 basically making it as large as the original entity.

 The other approach would be to keep a name-value pair containing the
 change in a 'delta' entity.

 Which would be more efficient in the datastore?

 Rud
 http://www.mysticlakesoftware.com

 --
 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.comgoogle-appengine-java%2bunsubscr...@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.



Re: [appengine-java] Re: Web Hook - Asynchronous - Where is my response?

2010-10-07 Thread John Patterson
There is no public API for checking the status of tasks.  A task is  
really nothing more than a normal http request which is monitored by  
GAE to retry it if it fails.  The real brains is in the task queue  
which is simply a queue of URL's that app engine will fire off at a  
given rate and retry failed requests.


The only public method to check tasks (http requests) in this queue is  
the console webpage.  Its up to you to monitor your tasks yourself by  
storing some kind of status data in memcache or the datastore.


On 7 Oct 2010, at 20:13, Andy wrote:

Sorry I don't quite understand your answer, what do you mean by  
DataStore Operation?


--
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 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.



Re: [appengine-java] Re: Tell data store not to selected index properties on bulkupload

2010-10-05 Thread John Patterson


On 5 Oct 2010, at 19:44, Maxim Veksler wrote:


Hi Peter,

I used bulkloader.yaml. I can't find the non indexing configuration  
in the docs http://code.google.com/appengine/docs/python/tools/uploadingdata.html


Should I just go back and user the deprecated method (python  
configuration?).


What about the existing data? Should I reupload the same entries to  
after I configure no indexing to make the index go poof ?


The implicit single property indexes can only be added or removed by  
re-putting the entities replacing the existing ones.  Keep in mind  
that any property used in a composite index must also be indexed  
(single property index).  Existing composite indexes will stay in the  
datastore until you run appcfg.py vacuum_indexes.  This features is  
not available in the Java SDK appcfg.sh script. 
 


--
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.



Re: [appengine-java] Re: Wicket/JPA application works locally but fails when deployed on GAE

2010-10-05 Thread John Patterson
Wicket works fine on GAE as long as you make sure your page instances  
do not contain non-Serializable instances - using detachable models  
follows this rule.


Here is this base class I use to set up a Wicket / Engine App

public abstract class EngineApplication extends WebApplication
{
@Override
protected void init()
{
		getResourceSettings().setResourceWatcher(new  
OnDemandModificationWatcher());

super.init();
}

protected ISessionStore newSessionStore()
{
return new HttpSessionStore(this);
}

@Override
protected WebRequest newWebRequest(HttpServletRequest servletRequest)
{
if (isDevelopmentEnvironment())
{
			((OnDemandModificationWatcher)  
getResourceSettings().getResourceWatcher(true)).start();

}
return super.newWebRequest(servletRequest);
}

public static boolean isDevelopmentEnvironment()
{   
		return  
System 
.getProperty 
(com.google.appengine.runtime.environment).equals(Development);

}

@Override
public String getConfigurationType()
{
if (isDevelopmentEnvironment())
{
return development;
}
else
{
return deployment;
}
}

}


On 6 Oct 2010, at 08:02, nico wrote:



swapplace isn't a good example, it is too simple
NM

On Mon, Oct 4, 2010 at 5:19 AM, Ian Marshall  
ianmarshall...@gmail.com wrote:

Mmmm: my link has been Googlised. If interested, try

 http://www.SwapPlace.co.uk

instead.


On Oct 4, 9:11 am, Ian Marshall ianmarshall...@gmail.com wrote:
 I disagree. I use Wicket and JDO on GAE/J; it works fine for me,
 including no serialisation problems.

 As a working example, I am satisfied with my Wicket/JDO/GAE/J  
proof-of-

 concept web application at

  www.SwapPlace.co.uk.

 I am using the lessons learnt for my commercial web site  
development,

 which is coming along nicely too.

 On Oct 3, 9:43 pm, nico nfmelen...@gmail.com wrote:

  Hey! don't use wicket + GAE!!! you will have lot of  
serialization problems

  and your project will FAIL! you will lose time and money!
  bug:http://code.google.com/p/googleappengine/issues/detail?id=2500

  Bye!
  NM

--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.





--
Nicolás Meléndez
Java Software Developer

Cell: +54 9 1157535454

1) Google App Engine works:

1.a) http://www.clasificad.com.ar  (Local free classifieds for   
housing, sale, services, local community, curses,jobs, and events -  
GAE/J + Wicket + YUI)


1.b) http://www.chessk.com  (Massive multiplayer chess online  GAE/J  
+ Applets + Wicket)


2) Linkedin: http://ar.linkedin.com/in/nicolasmelendez

--
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 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.



Re: [appengine-java] Select query using LIKE

2010-10-04 Thread John Patterson
Use a GREATER_THAN_OR_EQUAL and a LESS_THAN filter to match a prefix -  
thats the best you can do for a single stored term.  You will need to  
break the term up into multiple n-grams if you want to query for a  
partial match within a term.


On 4 Oct 2010, at 16:25, Ravi Dhanwate wrote:


Hi All,

Please provide inputs if we can use LIKE in GQL query or if any  
alternative is available for this.


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-java@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 
.


--
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.



Re: [appengine-java] JDO unique Long ID keys across entity groups

2010-10-01 Thread John Patterson
You can use DatastoreService.allocateIds() to get a range of unique  
keys that you can then assign to the children.  The kind name can be  
any old String - not just an existing kind.  This method does not  
guarantee the ids will be sequential but they will be unique.


If you really need sequential ids you can use memcache's atomic  
increment method.  If the value is not found in memcache you can do a  
query to find the maximum sequence number in the datastore and use the  
memcache increment method that allows you to specify an initial  
missing value atomically.


John

On 30 Sep 2010, at 17:28, Fred wrote:


Hi Group,

I know key ids are only unique across entity groups so what GAE + JDO
gives me is:
/Parent[1]/Child[1]
/Parent[1]/Child[2]
/Parent[1]/Child[3]

/Parent[2]/Child[1]
/Parent[2]/Child[2]

/Parent[3]/Child[1]

etc.

What I need to achieve (aka implement) is a way to assign keys in the
following fashion:
/Parent[1]/Child[1]
/Parent[1]/Child[2]
/Parent[1]/Child[3]

/Parent[2]/Child[4]
/Parent[2]/Child[5]

/Parent[3]/Child[6]

etc... so child ids are in sequence across entity groups (or at least
unique). Does anyone have experience with this or any thoughts on how
to go about it in a secure fashion?
I can't seem to come up with a secure way of doing this, but don't
want to give up on it because it would give my use case a lot of
querying power.

Hope someone can help.
Thanks in advance,
Fred


--
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 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.



Re: [appengine-java] Python and Java

2010-09-26 Thread John Patterson
Different versions are completely separate code bases that share a  
common datastore and other API services.  One version could be written  
in Java and another in Python but only one can be the default  
version at a time (receiving traffic from your domain name).  The  
other versions are accessible only from the appspot.com domain.


On 26 Sep 2010, at 20:48, joradom wrote:


hello

I found this in the FAQ:
http://code.google.com/intl/en/appengine/kb/java.html#pythonandjava

Can I run Java and Python code in the same app?

Yes, each version of the app must specify a runtime language and it is
possible to have version x of your app running Java, while version y
is running Python. It would also be possible to use Jython.

But I'm not sure to understand it...

Can I just create a python app and upload it to a java gae cloudr? or
is there some more magidc not documented in the faq?

thx

--
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 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.



Re: [appengine-java] How to make GWT + App Engine application crawlable?

2010-09-25 Thread John Patterson
You will need to post the code you are using... rest assured, you can  
read query string parameters on both the development and production  
servers.


On 25 Sep 2010, at 06:23, hezjing wrote:

I'm still not able to retrieve the query string from my servlet  
filter.


For example after application is deployed to Google App Engine, and  
then browse X.appspot.com/X.html?a=b. The query string is null.



Can you help me on this, please?


On Thu, Sep 23, 2010 at 1:21 PM, hezjing hezj...@gmail.com wrote:
Probably that was a bad query string, but the servlet filter is not  
able to retrieve the query string from http://127.0.0.1:/Hello.html?A=Bgwt.codesvr=127.0.0.1:9997 
 too!



On Thu, Sep 23, 2010 at 10:04 AM, John Patterson jdpatter...@gmail.com 
 wrote:


On 23 Sep 2010, at 07:47, hezjing wrote:


When run in the GWT development mode, e.g. http://127.0.0.1:/X.html?_escaped_fragment_=gwt.codesvr=127.0.0.1:9997 
, the application without App Engine is able to retrieve the query  
string as _escaped_fragment_=gwt.codesvr=127.0.0.1:9997.


The problem is, the application with App Engine is always getting  
the null query string!


You need to encode the query string - the  character is not allowed  
in a value.


http://download.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html

--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.




--

Hez



--

Hez

--
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 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.



Re: [appengine-java] Namespace design issues

2010-09-23 Thread John Patterson


On 24 Sep 2010, at 02:55, Mouseclicker wrote:

API. The need to set and later reset a global setting is dangerous and
error-prone. Probably that's what Guillaume mentions with The fear I
had was when seeing a static methods being used. I'm always afraid
when I see 'static' somewhere. Me too!


The namespace is not global or static but stored per-thread so it must  
be set for every request e.g. in a servlet Filter.  There is no  
problem setting it for a single operation if it is reset in a finally  
block.


I personally like the way that the namespace API is completely  
separated from other APIs.  In fact, I would prefer it if the memcache  
API namespace did not override the namespace API namespace... that  
caused a subtle bug the other day.


It really is very important to be able to see all the stored data in  
the datastore viewer without requiring the user to enter the  
namespace.  Especially as the user could be billed for data they  
cannot delete.


--
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.



Re: [appengine-java] How to make GWT + App Engine application crawlable?

2010-09-22 Thread John Patterson


On 23 Sep 2010, at 07:47, hezjing wrote:


When run in the GWT development mode, e.g. http://127.0.0.1:/X.html?_escaped_fragment_=gwt.codesvr=127.0.0.1:9997 
, the application without App Engine is able to retrieve the query  
string as _escaped_fragment_=gwt.codesvr=127.0.0.1:9997.


The problem is, the application with App Engine is always getting  
the null query string!


You need to encode the query string - the  character is not allowed  
in a value.


http://download.oracle.com/javase/1.4.2/docs/api/java/net/URLEncoder.html

--
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.



Re: [appengine-java] Re: A question about queries and composite indices

2010-09-19 Thread John Patterson


On 16 Sep 2010, at 21:18, Ikai Lan (Google) wrote:

The way an AND query works is by making multiple queries and merging  
the results by zig-zagging between them.


A solution to your problem may be simply to whittle down the result  
set to as small as you can reasonably get it, then traverse the  
entities in memory.


If you end up needing to use multiple queries you can use Twigs  
parallel async queries to run them all at the same time then zig-zag  
the results yourself to filter out the matching results.  This way you  
have fine control over the chunk size for each query (to tune  
performance) and can keep a cursor for each query.


--
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.



Re: [appengine-java] Using the Python bulk exporter tool with a Java application

2010-09-19 Thread John Patterson
If you feel more comfortable working with Java, I use this code to  
bulk load and backup data:


http://code.google.com/p/remote-datastore/

It intercepts the raw bytes sent to the local datastore and sends them  
to another remote datastore.  Because it operates at this very low  
level it is very efficient.


On 17 Sep 2010, at 12:23, megala dhinakaran wrote:


i had created webappliccation project using java,I want to bulk load
the data in google app engine datastore,But it shows the following
error how to solve this

appcfg.py create_bulkloader_config --filename=bulkloader.yaml --
url=http://logchecking1.appspot.com/remote_api
appcfg.py:41: DeprecationWarning: the sha module is deprecated; use
the hashlib module instead
 os.path.join(DIR_PATH, 'lib', 'antlr3'),
/home/crimson/Desktop/google_appengine/google/appengine/tools/
dev_appserver_login.py:33: DeprecationWarning: the md5 module is
deprecated; use hashlib instead
 import md5
Creating bulkloader configuration.
[INFO] Logging to bulkloader-log-20100917.105157
[INFO] Throttling transfers:
[INFO] Bandwidth: 25 bytes/second
[INFO] HTTP connections: 8/second
[INFO] Entities inserted/fetched/modified: 20/second
[INFO] Batch Size: 10
[INFO] Opening database: bulkloader-progress-20100917.105157.sql3
[INFO] Opening database: bulkloader-results-20100917.105157.sql3
[INFO] Connecting to logchecking1.appspot.com/remote_api
[ERROR   ] Exception during authentication
Traceback (most recent call last):
 File /home/crimson/Desktop/google_appengine/google/appengine/tools/
bulkloader.py, line 3167, in Run
   self.request_manager.Authenticate()
 File /home/crimson/Desktop/google_appengine/google/appengine/tools/
bulkloader.py, line 1176, in Authenticate
   remote_api_stub.MaybeInvokeAuthentication()
 File /home/crimson/Desktop/google_appengine/google/appengine/ext/
remote_api/remote_api_stub.py, line 533, in MaybeInvokeAuthentication
   datastore_stub._server.Send(datastore_stub._path, payload=None)
 File /home/crimson/Desktop/google_appengine/google/appengine/tools/
appengine_rpc.py, line 336, in Send
   f = self.opener.open(req)
 File /usr/lib/python2.6/urllib2.py, line 389, in open
   response = self._open(req, data)
 File /usr/lib/python2.6/urllib2.py, line 407, in _open
   '_open', req)
 File /usr/lib/python2.6/urllib2.py, line 367, in _call_chain
   result = func(*args)
 File /usr/lib/python2.6/urllib2.py, line 1146, in http_open
   return self.do_open(httplib.HTTPConnection, req)
 File /usr/lib/python2.6/urllib2.py, line 1121, in do_open
   raise URLError(err)
URLError: urlopen error [Errno -2] Name or service not known
[INFO] Authentication Failed

How to solve this?

--
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 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.



Re: [appengine-java] SimpleDS 1.0 is out

2010-09-13 Thread John Patterson
Nice work Nacho!  Some cool new features... love the meta-data  
reloader idea


On 13 Sep 2010, at 18:53, Nacho Coloma wrote:


We are excited to announce the 1.0 release of SimpleDS. SimpleDS is a
simple persistence framework for Google AppEngine that provides an
alternative to JDO or JPA.

This release includes a lot of new features:

Cached queries
==
This is the star feature of this release. Starting with 1.0, all query
results can be cached. To maximize cache performance only the returned
primary keys will be cached, so you still have to use @Cacheable to
cache the entity itself.

There are cases were this feature is killer, e.g. to retrieve a User
given the email:

User user = entityManager.createQuery(User.class)
.equal(email, googleUser.getEmail())
.withCacheSeconds(3600)
.asSingleResult()
;

DEBUG CacheManagerImpl - Level 2 cache hit:
qdata{kind=User,pred=[email = t...@example.com]}
DEBUG CacheManagerImpl - Level 2 cache hit: User(5)
DEBUG Level1Cache - Level 1 cache hit: User(5)

Cached queries work with FetchOptions (cursors, limit and offset) and
support only count(), asSingleEntity(), asList() and asPagedList().
Any invocation to asIterable() / asIterator() will ignore the cache.
To clear cached data, just prepare the same query and invoke
clearCache().

More about cache here [2].

Better fluent interfaces

The syntax has been simplified from this (older version):

SimpleQuery query =
entityManager.createQuery(User.class).equal(name, foo);
return entityManager.find(query);

To this:

return entityManager.createQuery(User.class)
.equal(email, email)
.equal(enabled, true)
.sortAsc(email)
.asList()
;

Now we rarely use more than one line for most queries. In this
example, if email is null it will just be ignored.

Several methods have been added: asList(), asSingleResult(),
asIterator(), asIterable() and PagedQuery.asPagedList(). The old
EntityManager methods have been deprecated.

More about queries here [3].

New Functions
=
We are also adding some new Functions for transforming persistent
entities. Some examples of use:

// save space for your relationships by storing SetLong instead of
SetKey
SetLong userIds = user.getFriends();
CollectionKey userKeys = Collections2.transform(userIds, new
IdToKeyFunction(User.class));
CollectionUser users = entityManager.get(userKeys);

// transform back
CompositeFunctionUser, Long func = new CompositeFunction(
new EntityToKeyFunction(User.class),
new KeyToIdFunction()
);
user.setFriends(Collections2.transform(users, func));

// just return a collection of email addresses
return Collections2.transform(users, new
EntityToPropertyFunction(User.class, email));

More about functions and transformations here [4]

Added JRebel support

I personally use JRebel for development, which means that I rarely
restart my development server. This was a problem with SimpleDS, which
was unable to detect changes such as new persistent attributes, etc.
SimpleDS can now be used with JRebel just by adding this to your
startup code:

if (SystemProperty.environment.get().equals(Development))
  ClassMetadataReloader.register();

Then in eclipse (Go to your launcher config - Arguments - VM
Arguments)

-javaagent:/usr/local/java/appengine-java-sdk/lib/agent/appengine-
agent.jar -noverify
-javaagent:${env_var:REBEL_HOME}/jrebel.jar

Minor changes
=

* Added @Property.converter to override the default converter for one
persistent property. You can, for example, store a String attribute as
Text.
* Added new methods SimpleQuery.withReadPolicy(ReadPolicy) and
SimpleQuery.withDeadline(double)
* Added new methods SimpleQuery.withStartCursor(Cursor) and
SimpleQuery.withEndCursor(Cursor)
* Cache settings will be ignored when invoked within a transaction.
* We have moved from commons-logging to slf4j. This may break binary
compatibility, but is a huge boost in performance.

Next on the roadmap: we are already playing with appengine-mapper and
expect to deprecate our own dirty hack (BackgroundTasks) for our next
release.

I hope you find it interesting. All feedback is welcome.

Nacho.
[1] http://code.google.com/p/simpleds/wiki/ReleaseAnnouncements
[2] http://code.google.com/p/simpleds/wiki/Cache
[3] http://code.google.com/p/simpleds/wiki/SimpleQuery
[4] http://code.google.com/p/simpleds/wiki/Functions

--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.




--
You received this message because you are subscribed to the 

Re: [appengine-java] Problem starting a GWT (with jetty) app via LAN

2010-09-13 Thread John Patterson
Try adding the parameter -bindAddress 0.0.0.0 in the launch  
configuration.  Since a few versions back the dev server will only  
bind to the local interface by default.


On 13 Sep 2010, at 15:46, Thomas P. wrote:


Hi all,

Initially, I used GWT + GAE for my project and when compiled to  
Javascript I could start the project from everywhere in my home-lan  
over e.g. http://myip:.


Then, after I found out, GAE doesn't support the java-classes I  
need, I created a new project without GAE, but still using the Jetty  
server which is included in a GWT/GAE hello-world application.


But now, I got the problem, I can't access my project anymore. I  
just get an error message, the site hasn't been found. Running the  
app locally with http://localhost: works without problems - just  
running it from another computer doesn't work anymore.


I changed nothing on my system and the IP is correct, because I have  
another apache on port 80 running and this site is accessible well,  
so this issue has to be connected with Jetty.


Does someone know, what I can do in order to be able to run my  
compiled GWT project in my lan again?


Thx for help!

Best regards,
Thomas

--
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 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.



Re: [appengine-java] Re: Need help choosing a frontend framework for a GAEj app, GWT seems like overkill

2010-09-09 Thread John Patterson
You might want to look into Sitebricks which is a Google developed web app
framework built on top of Guice.  It is a simple request response processor
with no fancy component abstractions like Wicket or Tapestry.  This model
fits in very well with GWT (or other  client frameworks) which request data
via RPC or small snippets of rendered html to assemble on the client.

It is still very much in active development so you have to be prepared to
dig into the code and figure out the plumbing yourself.  The author, Dhanji,
has built a fantastic API here - simple, powerful and clever.

http://code.google.com/p/google-sitebricks/

John

On 10 September 2010 05:35, tempy fay...@gmail.com wrote:

 Thanks for the explanation Chris!

 Guess I'm learning jquery, golly, I'll be a real web programmer yet.
 =)

 On Sep 9, 7:58 pm, Chris (Google Employee) api.ch...@google.com
 wrote:
  Hi Mike,
 
  I think the reason we don't explicitly publish a list of frontend
  frameworks that play well with App Engine is because there really is
  no technical barrier between front end frameworks that work in the
  browser such as JQuery, etc and the backend (App Engine). Many App
  Engine users make full use of a myriad of front end technologies/
  frameworks for UI creation ranging from HTML5/JS/CSS to flash etc.
 
  JQuery is especially popular for a variety of Web app usages, so if
  that works for you, I'd definitely continue trying it out.
 
  Hope this helps,
  -Chris
 
  On Sep 9, 10:43 am, tempy fay...@gmail.com wrote:
 
 
 
   Hello all,
 
   A little background... I'm mostly new to web frontend development, I
   come from a mostly backend and desktop background.  I have a GAEj app
   that provides the backend for a rather sophisticated desktop/mobile
   app.  This backend will also drive a website in addition to the
   desktop/mobile app.
 
   The website will show a small subset of the data in the system.  I
   started with GWT, but it doesn't seem to be quite right.  The website
   is for presentation of a small subset of the system's data only, and
   users do not interact with the data in any way other than searching
   for it.  As the data is mostly unstructured text and some images, I
   feel most comfortable formatting it with plain old html/css.  In fact,
   the layout of the site will be minimal and look a lot like a blog.  As
   such, the website should certainly not feel like a single-page web
   application a la gmail.  With GWT, I have little use for widgets and
   find myself constantly fighting with it to get a non-application look-
   and-feel.
 
   The only functionality that I thus really need from GWT is the RPC
   component, the page should be AJAX, I don't want to do round trips to
   the server for every navigation event.
 
   So, I'm not quite sure which framework to use with the GAEj backend.
   At first GWT seemed like a natural fit, but now seems like overkill.
   I'm doing some research on jquery, but I haven't seen a list of
   frontend frameworks that play well on GAEj anywhere.
 
   Thanks for any advice,
   Mike

 --
 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.comgoogle-appengine-java%2bunsubscr...@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.



Re: [appengine-java] Re: Need help choosing a frontend framework for a GAEj app, GWT seems like overkill

2010-09-09 Thread John Patterson
BTW, you can use GWT in a manor very similar to JQuery.  Take a look a
GQuery by Ray Cromwell.  He has an incredible benchmark page which
dynamically shows how GQuery out performs JQuery in almost every measure.

On 10 September 2010 05:53, John Patterson jdpatter...@gmail.com wrote:

 You might want to look into Sitebricks which is a Google developed web app
 framework built on top of Guice.  It is a simple request response processor
 with no fancy component abstractions like Wicket or Tapestry.  This model
 fits in very well with GWT (or other  client frameworks) which request data
 via RPC or small snippets of rendered html to assemble on the client.

 It is still very much in active development so you have to be prepared to
 dig into the code and figure out the plumbing yourself.  The author, Dhanji,
 has built a fantastic API here - simple, powerful and clever.

 http://code.google.com/p/google-sitebricks/

 John


 On 10 September 2010 05:35, tempy fay...@gmail.com wrote:

 Thanks for the explanation Chris!

 Guess I'm learning jquery, golly, I'll be a real web programmer yet.
 =)

 On Sep 9, 7:58 pm, Chris (Google Employee) api.ch...@google.com
 wrote:
  Hi Mike,
 
  I think the reason we don't explicitly publish a list of frontend
  frameworks that play well with App Engine is because there really is
  no technical barrier between front end frameworks that work in the
  browser such as JQuery, etc and the backend (App Engine). Many App
  Engine users make full use of a myriad of front end technologies/
  frameworks for UI creation ranging from HTML5/JS/CSS to flash etc.
 
  JQuery is especially popular for a variety of Web app usages, so if
  that works for you, I'd definitely continue trying it out.
 
  Hope this helps,
  -Chris
 
  On Sep 9, 10:43 am, tempy fay...@gmail.com wrote:
 
 
 
   Hello all,
 
   A little background... I'm mostly new to web frontend development, I
   come from a mostly backend and desktop background.  I have a GAEj app
   that provides the backend for a rather sophisticated desktop/mobile
   app.  This backend will also drive a website in addition to the
   desktop/mobile app.
 
   The website will show a small subset of the data in the system.  I
   started with GWT, but it doesn't seem to be quite right.  The website
   is for presentation of a small subset of the system's data only, and
   users do not interact with the data in any way other than searching
   for it.  As the data is mostly unstructured text and some images, I
   feel most comfortable formatting it with plain old html/css.  In fact,
   the layout of the site will be minimal and look a lot like a blog.  As
   such, the website should certainly not feel like a single-page web
   application a la gmail.  With GWT, I have little use for widgets and
   find myself constantly fighting with it to get a non-application look-
   and-feel.
 
   The only functionality that I thus really need from GWT is the RPC
   component, the page should be AJAX, I don't want to do round trips to
   the server for every navigation event.
 
   So, I'm not quite sure which framework to use with the GAEj backend.
   At first GWT seemed like a natural fit, but now seems like overkill.
   I'm doing some research on jquery, but I haven't seen a list of
   frontend frameworks that play well on GAEj anywhere.
 
   Thanks for any advice,
   Mike

 --
 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.comgoogle-appengine-java%2bunsubscr...@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.



Re: [appengine-java] Re: Any ETA for a backup/restore facility?

2010-09-07 Thread John Patterson
Great!  There should be no problem storing objects on the production  
servers using JDO as the RemoteDatastore operates below the low-level  
API.  I use it with Twig to send object data from my desktop to my  
live application and also to backup live object data locally to a file  
using XStream.


On 7 Sep 2010, at 21:18, luka wrote:


Thanks, now it's running smoothly.

Next challenge is integrating it to JDO 

Is it doable ?


On Aug 19, 9:01 pm, John Patterson jdpatter...@gmail.com wrote:

Have you added appengine-testing-1.3.6.jar and appengine-api-
stubs-1.3.6.jar to your project?

On 18 Aug 2010, at 19:50, luka wrote:


Hi John,



The project



http://code.google.com/p/remote-datastore/



No longer compiles, since Google newest SDK removed the following
classes/interfaces:



com.google.appengine.tools.development.ApiProxyLocalFactory
com.google.appengine.tools.development.LocalServerEnvironment



Can you workaround that ?



What older SDK supports this project ?



Thanks
Uri



On Jul 5, 12:32 am, John Patterson jdpatter...@gmail.com wrote:

I have had success uploading data in bulk from Java using this
RemoteDatastore code:



http://code.google.com/p/remote-datastore/


It is very easy to use and because it operates at the binary  
protocol

buffer level it is very fast



Here is an example of using it to upload data:
public class UploadData
{
   public static void main(String[] args)
   {
 // only call install once - often in a static initializer
 RemoteDatastore.install();



 // tell remote datastore where to connect
 
RemoteDatastore.divert(http://myVersion.latest.myApp.appspot.com/remote-datastore
, myApp, myVersion);



 // use standard datastore API to get a datastore service
instance
 DatastoreService service =
DatastoreServiceFactory.getDatastoreService();



 // create some entities
 Entity entity1 = new Entity(myKindName);
 entity1.setProperty(property1, hello);



 Entity entity2 = new Entity(myKindName);
 entity2.setProperty(property1, there);


 // sends the data over http to your remote servlet and  
stores it

in the live datastore
 datastore.put(Arrays.asList(entity1, entity2);
   }



}



--
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-java@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 
.




--
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.



Re: [appengine-java] Security problem with App Engine application

2010-09-03 Thread John Patterson
You can write a local Java application that reads data using the JDBC  
driver and inserts it into your datastore using the RemoteDatastore  
library:


http://code.google.com/p/remote-datastore/

I use this code to read local data from a CSV file and push it to  
either my local App Engine environment for development or the  
production environment.


On 2 Sep 2010, at 22:28, Andy Faulkner wrote:


Hi,

I'm trying to develop an AppEngine application in Java, that will read
some values from a local MSSQL database on our internal network using
Microsoft's JDBC driver, and then insert those values into a reference
spreadsheet in our Google Docs domain.

I'm falling at the first hurdle!

I have Eclipse Helios, with Version 1.3.7 of the App Engine SDK Plugin
installed.

So, I create a new App Engine project (HelloWorld) and when I run
this, it works just fine.

And then, just to get things going, I have modified the doGet method
so that it looks like this (I'm expecting that this will extract some
records from my database, and then print them to the HTML page) - just
want to get things going before I really get to work.


@SuppressWarnings(serial)
public class VisionConnectorServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException {


resp.setContentType(text/plain);

// Declare the JDBC objects.
  Connection con = null;
  Statement stmt = null;
  ResultSet rs = null;

  try {
 // Establish the connection.
 Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver);

 SQLServerDataSource ds = new SQLServerDataSource();
 ds.setUser(DeltekVision);
 ds.setPassword(Password1);
 ds.setServerName(server02);
 ds.setPortNumber(1433);
 ds.setDatabaseName(vision2);
 con = ds.getConnection();

 String SQL = SELECT * FROM CL where status='A';
 stmt = con.createStatement();
 rs = stmt.executeQuery(SQL);

 // Iterate through the data in the result set and display
it.
 while (rs.next()) {
resp.getWriter().println(Client:  + 
rs.getString(Name));
resp.getWriter().println(br/);
 }
  }

  // Handle any errors that may have occurred.
  catch (Exception e) {
 e.printStackTrace();
  }
  finally {
 if (rs != null) try { rs.close(); } catch(Exception e) {}
 if (stmt != null) try { stmt.close(); } catch(Exception e)
{}
 if (con != null) try { con.close(); } catch(Exception e) {}
 System.exit(1);
  }

}

When I run the application the Jetty server fires up as expected (so
everything builds OK) but when I access the web page, kaboom:

java.security.AccessControlException: access denied
(java.net.SocketPermission cc:1433 connect,resolve)
at
java 
.security 
.AccessControlContext.checkPermission(AccessControlContext.java:

323)
at
java.security.AccessController.checkPermission(AccessController.java:
546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:
532)
at com.google.appengine.tools.development.DevAppServerFactory
$CustomSecurityManager.checkPermission(DevAppServerFactory.java:166)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1034)
at
com 
.microsoft 
.sqlserver 
.jdbc 
.SQLServerConnectionSecurityManager 
.checkConnect(SQLServerConnection.java:

3229)
at
com 
.microsoft 
.sqlserver 
.jdbc.ServerPortPlaceHolder.doSecurityCheck(FailOverInfo.java:

144)
at
com 
.microsoft 
.sqlserver.jdbc.ServerPortPlaceHolder.init(FailOverInfo.java:

135)
at
com 
.microsoft 
.sqlserver 
.jdbc 
.SQLServerConnection.primaryPermissionCheck(SQLServerConnection.java:

968)
at
com 
.microsoft 
.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:

800)
at
com 
.microsoft 
.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:

700)
at
com 
.microsoft 
.sqlserver 
.jdbc 
.SQLServerDataSource.getConnectionInternal(SQLServerDataSource.java:

593)
at
com 
.microsoft 
.sqlserver 
.jdbc.SQLServerDataSource.getConnection(SQLServerDataSource.java:

57)
at
com 
.integrity 
.visionconnector 
.VisionConnectorServlet.doGet(VisionConnectorServlet.java:

31)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:806)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:
511)
at org.mortbay.jetty.servlet.ServletHandler
$CachedChain.doFilter(ServletHandler.java:1166)
 

Re: [appengine-java] Re: can we use Web-services in Gooogle app engine

2010-09-03 Thread John Patterson
I needed to call a SOAP service using RPC style which is not supported  
by the Force.com connector.


In the end it wasn't hard to roll my own system which simply uses  
URLFetchService and parses the XML ignoring (or adding) the SOAP  
envelope rubbish.


On 3 Sep 2010, at 15:41, Francois Masurel wrote:


I've successfully used some SOAP Services using the WSC library :
http://code.google.com/p/sfdc-wsc/

Francois

On 3 sep, 10:27, moissinac jcmoissi...@gmail.com wrote:

No true/false response possible.

1) Response time: if a GAE application calls web services, each call
must be ended in the limited response time offered by Google; so if
there is some delay in the response of the called web service, you
need to manage this finely; it could be a bit complex

2) Web service framework: if you implement web services by using a
framework/library (Axis,...), it's possible/common that the framework
uses a database and so that the framework is not directly compatible
with GAE

But, it's POSSIBLE to implement anf use web services with GAE


--
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 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.



Re: [appengine-java] Re: How we can read uncommitted data in same transaction.

2010-09-02 Thread John Patterson


On 2 Sep 2010, at 18:48, Arnold wrote:


Subhash,

You may want to use JDO if that is possible. It appears that you can
read uncommitted data within the same transaction, I presume because
the Entity does not get fetched from the Datastore every time you use
PersisistenceManager.getObjectById().

The same may be applicable to JPA.


Twig also works like this but only for load()s by id.  If you run a  
find() command then it must go to the datastore which will return  
results based on the transaction snapshot.  However, if the find()  
results return an item you have already loaded and modified then Twig  
does not overwrite your modified instance - i.e. you are reading  
uncommitted data.  Because of the use of this session cache you get  
some extra degree of transaction isolation.


--
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.



Re: [appengine-java] Re: favicon.ico weirdness

2010-08-27 Thread John Patterson
On 26 August 2010 05:28, stanlick stanl...@gmail.com wrote:

 I do not have a frameset.


Yes you do - view source on your page.  You have probably set up a naked
domain with your registrar who host this page and include your website as
a frame within that page.  If you cannot modify this container frameset then
I don't think you will be able to define an icon for the page.

 Is that something being injected by GAE?
 Also, why the does this page icon work in 2 out of 3 cases?


The frameset is only used in one case out of the 3

-- 
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.



Re: [appengine-java] favicon.ico weirdness

2010-08-24 Thread John Patterson

When I view source for your frameset there is no link tag like:

link rel=shortcut icon href=/somepath/myicon.ico /

On 25 Aug 2010, at 04:15, stanlick wrote:


I am experiencing some crazy stuff with my browser icon:

1) shows up on development server
2) shows up fine once deployed and accessed from 
http://9.latest.gae-1or2clicks.appspot.com
3) does not show up when accessed from http://1or2clicks.com/

Any clues?

--  
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 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.



Re: [appengine-java] sending HTTP GET with xml payload

2010-08-20 Thread John Patterson


On 20 Aug 2010, at 03:27, jwangatx wrote:


I know it seems logical that GET's should only send a url with QS
(Query String) params to qualify the get, but if I have a complex
subscription/highly-directly query, I would prefer to send all the
parameters as payload/XML.


Why not just use POST?

--
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.



Re: [appengine-java] Re: Any ETA for a backup/restore facility?

2010-08-19 Thread John Patterson
Have you added appengine-testing-1.3.6.jar and appengine-api- 
stubs-1.3.6.jar to your project?


On 18 Aug 2010, at 19:50, luka wrote:


Hi John,

The project

http://code.google.com/p/remote-datastore/

No longer compiles, since Google newest SDK removed the following
classes/interfaces:

com.google.appengine.tools.development.ApiProxyLocalFactory
com.google.appengine.tools.development.LocalServerEnvironment

Can you workaround that ?

What older SDK supports this project ?

Thanks
Uri


On Jul 5, 12:32 am, John Patterson jdpatter...@gmail.com wrote:

I have had success uploading data in bulk from Java using this
RemoteDatastore code:

http://code.google.com/p/remote-datastore/

It is very easy to use and because it operates at the binary protocol
buffer level it is very fast

Here is an example of using it to upload data:
public class UploadData
{
   public static void main(String[] args)
   {
 // only call install once - often in a static initializer
 RemoteDatastore.install();

 // tell remote datastore where to connect
 
RemoteDatastore.divert(http://myVersion.latest.myApp.appspot.com/remote-datastore
, myApp, myVersion);

 // use standard datastore API to get a datastore service  
instance

 DatastoreService service =
DatastoreServiceFactory.getDatastoreService();

 // create some entities
 Entity entity1 = new Entity(myKindName);
 entity1.setProperty(property1, hello);

 Entity entity2 = new Entity(myKindName);
 entity2.setProperty(property1, there);

 // sends the data over http to your remote servlet and stores it
in the live datastore
 datastore.put(Arrays.asList(entity1, entity2);
   }

}


--
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 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.



Re: [appengine-java] Shared Datastore via Multiple App Versions Locally

2010-08-13 Thread John Patterson
Your approach works fine for me on OS X.  But the datastore is held in  
memory so only one app can use it at a time.  If you make changes to  
the datastore you also need to wait until you see the log message  
Time to persist datastore... before shutting down the app.


On 13 Aug 2010, at 09:14, millr wrote:


Hello,

I am aware that it is possible to run different applications that
share the same datastore by using different version strings for the
two applications, as detailed here:
http://googleappengine.blogspot.com/2009/06/10-things-you-probably-didnt-know-about.html

Now that I have found this approach I am wondering how I could pool
the data on the development versions of the app that I am running
locally.

I am using JRuby for a rack app and have found that the datastore data
is stored in /WEB-INF/appengine-generated/local_db.bin, so I tried
creating a symlink from the original app to the same location within
the new app I wish to share the datastore with. This didn't work an
produced the following error:

INFO: Failed to load from the backing store, /WEB-INF/appengine-
generated/local_db.bin
java.io.StreamCorruptedException: invalid stream header: 626F6F6B
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:
783)

Does anyone know of ways I can share this data successfully on my
local versions of apps?

Thanks.

--
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 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.



Re: [appengine-java] Re: HELP: My app is getting lots of HardDeadlineExceededError today.

2010-08-13 Thread John Patterson


On 14 Aug 2010, at 00:24, Ikai L (Google) wrote:
 index and the frequent updates the application needs to make in  
order
 to keep the data current.  71000 CPU to save 100 records seems  
rather

 expensive?.


My App uses 600,000 CPUms to save 100 entities so I don't think that  
is expensive at all!  However updating an existing entity takes much  
less cpu, presumably because the datastore only updates those indexes  
that have changed.  I have split entities into parts that change often  
and parts that don't so updates are cheaper.


--
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.



Re: [appengine-java] Re: urlfetch and embedded gae usage error

2010-08-09 Thread John Patterson


On 9 Aug 2010, at 21:40, alesj wrote:

See an example here which allows running GAE from a normal main()  
method


http://code.google.com/p/remote-datastore/source/browse/src/main/ 
java...


How should appId and warPath look like?
(I see here are no-local-appid-set ands .)
Or what's their purpose?


AppId is... well what ever your app id is.  warPath is normally war  
or target/youapp-1.0 if you are using maven.  In the case of the  
datastore it is the directory relative to which your local_db.bin will  
be created.


--
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.



Re: [appengine-java] appcfg bulkuploading Listkey values from csv

2010-08-04 Thread John Patterson
If you use this: http://code.google.com/p/remote-datastore/ you can  
upload Entities in a main(String[]) using the simple low-level API.   
If your data is in CSV format you'll need to parse the file lines to  
create your Entities.


On 4 Aug 2010, at 16:51, Dani wrote:


Hi, i'm trying to upload to my app an entity with a field which is a
list of keys. How can i do it?

I tryed to separate it with comas and wrap it with double quotes,
like:

key,extensions,name,number
1,34,56,John Doe,699

And the config.yml:

kind: Zone
 connector: csv
 connector_options:
 property_map:
   - property: __key__
 external_name: key
 export_transform:
transform.none_if_empty(transform.key_id_or_name_as_string)

   - property: extensions
 external_name: extensions
 import_transform:
transform.none_if_empty(transform.create_foreign_key('Extension'))
 export_transform: transform.key_id_or_name_as_string
 ...


But it's interpreted like a single Key and not a list of Keys.
Anybody knows?

--
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 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.



Re: [appengine-java] Enter Data using Queues/Task

2010-08-02 Thread John Patterson
There is no way around the 30 second limit yet.  You must break up  
your work into tasks - probably start one task for each for each URL.   
The Deferred library linked to below makes this easy to manage.



On 2 Aug 2010, at 23:13, Sandeep Ghosh wrote:


Hi,
 Twig is good but the problem i am facing is that from the  
browser i am passing a load command as parameter like this

http://localhost:/sbphishlock?load
which tells my code that i need to load the data.
now in the logic i have written few logic to process in a loop
1)Reads a csv file containg a list of URL's(may be 3000)
2)downloads each URL HTML pages and tokenize it
3)Creating a Object and storing in the database

Problem is first 2 points itself takes a lot of time
I think i need to use Task/Queues so that i can start a task for  
each url


But i dont know what i need to do for task/Queues
moreover is there any other way of doing this
Can u help me regarding this

Thanx
Sandeep

On Sun, Aug 1, 2010 at 1:25 AM, John Patterson  
jdpatter...@gmail.com wrote:
I mean bulk put - that is using DatastoreService.put(Iterable) or  
JDO's makePersistentAll(...)


If you do one call with many instances instead of many calls with  
one instance it will be a lot faster.


On 31 Jul 2010, at 14:49, Sandeep Ghosh wrote:


Hi,
 can i do bulk load in Java.
Can you Please give me a sample code.

Thanx
Sandeep

On Fri, Jul 30, 2010 at 6:22 PM, John Patterson jdpatter...@gmail.com 
 wrote:


On 30 Jul 2010, at 18:10, Sandeep Ghosh wrote:

Hi,
 I am facing promlem of entering many data into the Google App
engine database as its taking more then 30 sec time limit.

PersistenceManager pm = PMF.get().getPersistenceManager();
for(;;)
{
EnterData data = new EnterData(key,value,new Text(totaData));//
EnterData is my class Entity
pm.makePersistent(data);
}

How can i use the Tasks/Queues in this scenario

You could try using bulk put rather than making a datastore call  
for every iteration.


You can also do many store operations in parallel if you use Twig  
like this:


for (...)
{
   datastore.store().instance(data).later();
}

this is an non-blocking async call that returns immediately and  
lets you run all your operations in parallel.


Otherwise, to use task queues I would recommend using the Deferred  
library to chain tasks:


http://groups.google.com/group/google-appengine-java/browse_thread/thread/6f736624cc820d5b



--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.





--
Kind words can be short and easy to speak,
but their echoes are truly endless.
Mother Teresa

--
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 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-java@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 
.




--
Kind words can be short and easy to speak,
but their echoes are truly endless.
Mother Teresa

--
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 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.



Re: [appengine-java] Re: Python bulk loader tool with local dev server of GAE Java

2010-08-01 Thread John Patterson
Hi Jan, I have used the Java RemoteDatastore to upload and download  
data in bulk.


It allows you to use the low-level API, JDO, Twig, Objectify or  
whatever to store your data remotely or locally.


http://code.google.com/p/remote-datastore/

On 1 Aug 2010, at 19:49, Jan wrote:


Hi,

I still did not find any solution to use the bulk uploader (now
version 1.3.5) locally with GAE/Java. Communication with the
production server works fine.

As I cannot find any information about this issue, I assume that
nobody else faces this problem. Can someone please post the steps
necessary to make the Python bulk loader tool work locally with a Java
app?

Are there any alternatives available for the Python bulk uploader?

Thank you,

Jan.

--
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 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.



Re: [appengine-java] Re: Python bulk loader tool with local dev server of GAE Java

2010-08-01 Thread John Patterson
You need to check out the source code (or even just copy and past the  
classes) into your own project - no downloads or jars (as stated on  
the project homepage)


http://code.google.com/p/remote-datastore/source/checkout

To insert data locally just call:

RemoteDatastore.install(myAppId, war/);

from a static initializer (or some other place guaranteed to only run  
once) and then you can use the datastore APIs from any Java code e.g.  
from a main(String[]) method.


There is example code on the homepage using the low-level datastore  
API to insert data.  I have used Twig to insert data too and JDO  
should work.  If you need to read data from a CSV file you will need  
to parse the file and create Entities from it - there is an Apache CSV  
file reader you can use for that.


On 2 Aug 2010, at 03:33, emmanuel harel wrote:


John,
could you give more information about how to use your library please ?
I am not sure it is obvious for anyone. What are the dependencies of  
your project : the jar used.

Thanks a lot


2010/8/1 John Patterson jdpatter...@gmail.com
Hi Jan, I have used the Java RemoteDatastore to upload and download  
data in bulk.


It allows you to use the low-level API, JDO, Twig, Objectify or  
whatever to store your data remotely or locally.


http://code.google.com/p/remote-datastore/


On 1 Aug 2010, at 19:49, Jan wrote:

Hi,

I still did not find any solution to use the bulk uploader (now
version 1.3.5) locally with GAE/Java. Communication with the
production server works fine.

As I cannot find any information about this issue, I assume that
nobody else faces this problem. Can someone please post the steps
necessary to make the Python bulk loader tool work locally with a Java
app?

Are there any alternatives available for the Python bulk uploader?

Thank you,

Jan.

--
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 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-java@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 
.




--
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 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.



Re: [appengine-java] Enter Data using Queues/Task

2010-07-31 Thread John Patterson
I mean bulk put - that is using DatastoreService.put(Iterable) or  
JDO's makePersistentAll(...)


If you do one call with many instances instead of many calls with one  
instance it will be a lot faster.


On 31 Jul 2010, at 14:49, Sandeep Ghosh wrote:


Hi,
 can i do bulk load in Java.
Can you Please give me a sample code.

Thanx
Sandeep

On Fri, Jul 30, 2010 at 6:22 PM, John Patterson  
jdpatter...@gmail.com wrote:


On 30 Jul 2010, at 18:10, Sandeep Ghosh wrote:

Hi,
 I am facing promlem of entering many data into the Google App
engine database as its taking more then 30 sec time limit.

PersistenceManager pm = PMF.get().getPersistenceManager();
for(;;)
{
EnterData data = new EnterData(key,value,new Text(totaData));//
EnterData is my class Entity
pm.makePersistent(data);
}

How can i use the Tasks/Queues in this scenario

You could try using bulk put rather than making a datastore call for  
every iteration.


You can also do many store operations in parallel if you use Twig  
like this:


for (...)
{
   datastore.store().instance(data).later();
}

this is an non-blocking async call that returns immediately and lets  
you run all your operations in parallel.


Otherwise, to use task queues I would recommend using the Deferred  
library to chain tasks:


http://groups.google.com/group/google-appengine-java/browse_thread/thread/6f736624cc820d5b



--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.





--
Kind words can be short and easy to speak,
but their echoes are truly endless.
Mother Teresa

--
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 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.



Re: [appengine-java] Enter Data using Queues/Task

2010-07-30 Thread John Patterson


On 30 Jul 2010, at 18:10, Sandeep Ghosh wrote:


Hi,
  I am facing promlem of entering many data into the Google App
engine database as its taking more then 30 sec time limit.

PersistenceManager pm = PMF.get().getPersistenceManager();
for(;;)
{
EnterData data = new EnterData(key,value,new Text(totaData));//
EnterData is my class Entity
pm.makePersistent(data);
}

How can i use the Tasks/Queues in this scenario


You could try using bulk put rather than making a datastore call for  
every iteration.


You can also do many store operations in parallel if you use Twig like  
this:


for (...)
{
datastore.store().instance(data).later();
}

this is an non-blocking async call that returns immediately and lets  
you run all your operations in parallel.


Otherwise, to use task queues I would recommend using the Deferred  
library to chain tasks:


http://groups.google.com/group/google-appengine-java/browse_thread/thread/6f736624cc820d5b


--
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.



Re: [appengine-java] Persistent Local Datastore

2010-07-29 Thread John Patterson


On 30 Jul 2010, at 07:09, Sydney wrote:


I have a question that seems trivial but I can't figure out how to do
it. I would like to be able to test my application but with persistent
data. So I need to create a local environment to store the data. I
read the documentation about unit testing but the default behavior is
to store the data in memory and then wipe out everything. Is there a
way to have an environment where the data would be persistent on the
disk. I don't know if it matters but I am using twig-persist to deal
with the datastore.


private LocalServiceTestHelper helper =
new LocalServiceTestHelper(new  
LocalDatastoreServiceTestConfig().setBackingStoreLocation(DS_PATH));


You could copy the WEB-INF/appegine-generated/local_db.bin file with  
your data next to your test case and in a @Before method, delete the  
old copy and copy a new one to DS_PATH.  You might also want to check  
out LocalDatastoreServiceTestConfig().setNoStrage(true)


--
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.



Re: [appengine-java] Creating and storing unique values

2010-07-28 Thread John Patterson


On 29 Jul 2010, at 04:35, Sven wrote:


I played around with a couple of ways to generate identifiers which do
not look too simple (short integers, such as primary key values), not
to complicated (too long or cryptic) and not too predictable (System
time). My current favorite is to generate a random integer, to convert
it to a alphabetical representation and to prefix it with a primary
key value of a entity I store to the database when creating the
identifier.


You might want to instead use datastore's built in ability to  
efficiently create unique long ids and then when sending them to a  
client muddle them using a reversible hash function so they don't  
appear predictable.  You will find that using long ids results in  
shorter Keys which saves space in the datastore.


You can only guarantee a unique value in the datastore by creating an  
Entity with the value in its key.  This does not need to be your  
main entity - just a special UniqueName type.  Then you can


start transaction
load existing entity - fail if exists
store new entity
commit transaction

Step 4 will fail if another request created an entity with the same key.

when storing an entity with Twig its can check for existing entities  
automatically like:


Transaction txn = datastore.beginTransaction();
datastore.store().instance(myUniqueName).ensureUniqueKey().now();
txn.commit();

The cool thing about .ensureUniqueKey() is that it also works for  
storing multiple instances in bulk.


--
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.



Re: [appengine-java] Re: Highly Frustrated By Entity Groups / Transactions

2010-07-27 Thread John Patterson


On 27 Jul 2010, at 21:18, Bill wrote:



That's the way it is because that's the way we say it has to be is
not an answer.  There is no reason why selecting an object from one
group is going to impact insert or update in a different entity group


It doesn't!  You just cannot do it in the same transaction like you  
are trying to.  Do it outside of the transaction or in a different  
transaction.



In order to insert the LineItem, you have to make sure the Product
exists already.


Not if you know it exists before the transaction and will not be deleted


End of story.  There's no way around this.  In an
RBDMs world, this would be accomplished by foreign key constraints.
The GAE datastore can't do this.  That's fine.  I'm prepared for
that.  That's not what I'm complaining about.

What I'm complaining about is really in three parts:

1.  The LineItem can't contain a direct reference to Product.  Product
is not part of the LineItem entity group.  Not a huge problem, becuase
I can just use a key instead.


If you use Twig it can - it supports unowned direct relationships.  In  
fact in Twig you would probably be best to model the entire LineItem  
collection as @Embed'ded which will fetch the whole bunch in a single  
entity



2.  As such, the underlying datastore has no concept of data
integrity.  Okay, fine, I'll have to do the bounds checking myself.


The reality is that bounds checking is expensive and not friendly to  
distributed environments.



.  I'm asking for
someone to rethink how it's made.  Is that so unreasonable?


Check out the Google I/O talks distributed transactions and   
transactions across data centers - you will see that there might be  
more to this than you assume.


--
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.



Re: [appengine-java] Re: Highly Frustrated By Entity Groups / Transactions

2010-07-26 Thread John Patterson


On 26 Jul 2010, at 19:21, Bill wrote:



Good thought, but unforunately Elements already have a parent key in
this manner.  Elements are hierarchical, so that an Element's parent
is another parent.

Can an entity have more than one parent?  I haven't tried that...


An Entity can only have one parent as it is encoded into its key as a  
path of ancestors leading back to the root entity.


Are all Element trees in the same domain?  If so then you could make  
Domain implement Element and use it as the root of an element  
hierarchy.  But this limits the concurrency of changes to Elements to  
a few writes per second per Domain.


Do you update more than one element in a transaction?  If not then an  
unowned relationship between entities would be fine.


Are domains added and removed often?  If not then is it sufficient to  
check that the domain exists before working on your elements outside  
of the transaction?  Just never delete Domains - mark them as deleted  
instead.


Your original problem Cannot operate on more than one was caused  
by trying to load an element in a different entity group.  Even load  
operations on a non existent entities (e.g. Domain) are included in  
the transaction.  That is how you can guarantee you don't clobber  
existing data when you do a put(...) in a transaction.


You can think of starting a transaction as creating a timestamp on the  
root entity - any changes to any element in the entire entity group  
after that time and before the commit will cause a concurrency  
exception.  I think of transactions on non-existing roots as making a  
kind of temporary place-holder root to which the timestamp is added.   
See this for more details:


http://www.youtube.com/watch?v=tx5gdoNpcZM

If non of those work arounds is sufficient then perhaps you need  
distributed transactions.  The Slim3 project implements distributed  
transactions using the task queue and there was a project with the aim  
of making a generic solution:


http://www.youtube.com/watch?v=IOtBlzsx0m8

Not sure what happened to that though.

It is possible that you need a full RDBMS - in which case you will  
either need to patiently wait for the release of the App Engine one  
recently announced or run your own on a hosted server.  Just don't  
expect the same scalability as you get from the datastore.



--
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.



Re: [appengine-java] Re: Highly Frustrated By Entity Groups / Transactions

2010-07-26 Thread John Patterson


On 27 Jul 2010, at 00:24, Bill wrote:

This would completely disregard my business model.  A Domain is not an
Element, nor vice-versa.  It's something analogous to making both
classes Elephant and Corn implement the same interface because both
have Ears.


Ha ha well you would not actually need to have Domain implement  
Element to set up the same parent hierarchy.  In fact a parent can be  
any  Key - even one that does not exist.  Not sure about JDO, but in  
Twig you can set the parent when you store the Element like this:


datasore.store()
.instances(someElements)
.parent(theDomainOrElement)
.returnKeysNow();

So the parent does not actually need to be referenced by the child or  
visa versa.



And as you say, this limits the concurrency of changes to
Elements to a few writes per second per Domain which would be very
bad in an enterprise system.


It all depends on the granularity of your element groups.  If you can  
break them down sufficiently then you can still use transactions.


I would advise using either the top level Element or a lower level  
element as your root entity.  If you must use a lower level element  
you would need to remove the list of child keys from a Element to stop  
the cascade of updates.  Every child has a reference to its parent  
encoded in its key which can be used to efficiently return the list of  
children using an ancestor query.



Are domains added and removed often?  If not then is it sufficient to
check that the domain exists before working on your elements outside
of the transaction?  Just never delete Domains - mark them as deleted
instead.


No, they're not added and removed often, and as it happens the Domain
does have an active flag.  Nonetheless, I think you're missing the
point.  If I have to interleave a constraint check with transaction
elements inside my destructive operations, I am defeating the
principle of separation of concerns.  I already have to manually
verify foreign key relationships, which is blends concerns badly
enough!


Sounds like you have architected your solution to do too much in a  
single transaction which is just not performant (or possible) with the  
datastore.  Time to re-think how you demarcate transactions.



A succinct explanation for a transaction is that it is supposed to
make different operations involving multiple resources atomic to the
level of isolation specified.  If you can only have one resource, or
one small group of very tightly coupled resources, then transactions
give you almost no benefit.  At this point the only thing I can trust
the transaction layer to do is to provide an optimistic locking
version.  Highly unsatisfactory, this is!


The datastore is not an RDBMS.  There are certain domain models which  
simply will not work on the datastore.  If you cannot break down you  
data into small independent chunks your app will not work.


I appreciate your goal of not compromising your data model and  
architecture for the practicalities of low-level concerns - but it  
just won't work here.  GAE makes it impossible to ignore that fact  
that you are writing for a distributed system.  You have to front up  
to these problems such as sharding and distributed transactions from  
day one.



Even load
operations on a non existent entities (e.g. Domain) are included in
the transaction.


Yeah.  Why on earth?  You can read a record a billion times and the it
will not clobber an update.


The load cannot clobber - its when you depend on the result of that  
load to do a write that you would hit a problem.


In order to check that there is no existing entity with the same key  
before writing an entity the load must be a part of the transaction or  
another request could store an entity with the same key before you  
committed - clobber.



Let me put it this way.  I'm not looking for a way to hack this into
working.  I've already hacked it into working by adding an extra, very
hacky layer to my architecture.  What I would like is some sort of
explanation, and hopefully some indication that at some point this is
going to be fixed.  I'd even be interested in helping out with said
fix.  Google, can you provide me with any answers?


As I pointed out in my earlier reply - there is an RDBMS offering on  
the road map:


http://code.google.com/appengine/business/roadmap.html

That sounds like the fix you are looking for unless you can bash  
your data model into a shape more suited to a distributed system.



--
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.



Re: [appengine-java] Re: How to upload primary key as an id instead of name

2010-07-23 Thread John Patterson
I have used RemoteDatastore to upload and download data in bulk.  You  
can set whatever id you want.


http://code.google.com/p/remote-datastore/

On 23 Jul 2010, at 10:01, Subhash wrote:


Hi Uberto,


Otherwise if all your existing ids are numeric you can change
bulkloader to create the id instead of name.


How I can upload exiting data with id as numeric not with name as
string.

My .yaml file format is given below:

transformers:
- kind:User
 connector: csv
 connector_options:
   encoding: utf-8
   columns: from_header
 property_map:
   - property: __key__
 external_name: UserId
 export_transform: datastore.Key.id
   - property: UserName
 external_name: UserName

Any help/suggestion in this regard will be highly appreciated.

Regards,
Subhash


On Jul 22, 7:04 pm, Uberto Barbini ube...@ubiland.net wrote:
On Thu, Jul 22, 2010 at 3:49 PM, MANISH DHIMAN  
manisd...@gmail.com wrote:



Let me explain once again if I missed something earlier. I have an
existing task management application  wants to shift it now to  
google

app engine. While I tried porting my existing data into google app
engine using BulkLoader 1.3.5 with csv file, all my IDs saved as
string (not as long). Suppose I was having a user withid=1 (long),  
it

uploaded into google app engine withname=1(String). Now when I am
saving new records directly on google app engine using my  
application

running on google app engine, it saves an another record with
id=1(this time it's long). So it's not possible for me to  
identifiy b/

w these two records (one withid=1  another withname=1).


If you want to use names you have to put some logic in your app and
create them also for new objects before saving.

Otherwise if all your existing ids are numeric you can change
bulkloader to create theidinstead ofname.

I think gae behavior is clear, simple and consistent.

cheers

Uberto


--
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 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.



Re: [appengine-java] Invalid handle problem while using Transaction in Remote API.

2010-07-22 Thread John Patterson


On 22 Jul 2010, at 20:53, Subhash wrote:


Hi

I am using Remote API for connecing with my database while running
code on my local machine. While I use transactions, it gives Invalid
handle exception while saving my entity. If I don't use transaction.
same code is running fine. Below is my code:


I haven't used RemoteDatastore with transactions myself.  This error  
looks similar to one thrown when using Iterators that need to fetch  
more data.  It seems that there are some differences in the local and  
production servers that cannot be overcome.  My only advice would be,  
don't use transactions!  Sorry can't be more help.


If this could be fixed with some help from a Googler with the inside  
know-how it would be really great.  For me this is the ideal way to  
work with the datastore remotely - exactly the same way you do locally  
using the same APIs.


--
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.



Re: [appengine-java] Re: Entity relationship table

2010-07-21 Thread John Patterson


On 22 Jul 2010, at 02:53, dmetri333 wrote:



private ListPerson friends = new ArrayListPerson();


You cannot have direct references for unowned relationships in JDO-GAE.

Twig is the only datastore interface I know of that does allow this

http://code.google.com/p/twig-persist/

--
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.



Re: [appengine-java] Re: Length of member variable names contributes to storage space used?

2010-07-20 Thread John Patterson
Yes, the kind name is used in the key along with the id/name and  
ancestor path and all contribute to the size.


Details: http://code.google.com/appengine/articles/storage_breakdown.html

On 20 Jul 2010, at 15:41, Didier Durand wrote:


@John Patterson,
I did not mention the Class / Kind in my answer for the following
reason: when I go to Datastore Viewer in the GAE Console and for
every entity, I see Decoded key and Encoded key

The encoded key is always - at least in my experience - a huge string
whatever the size of the decoded key (including the string for  Kind)
is.

So, does it really matter to have a short Kind name if the encoded
version (probably the one used by Datastore) is huge?

I would be interested to know this if anyone knows.
regards
didier

On Jul 20, 8:27 am, John Patterson jdpatter...@gmail.com wrote:

Also the class name is used in the Key as the kind.  To get the
shortest keys you would need to use short class names and numeric  
long

ids (rather than Strings).  Having small keys is important because
they are stored many times per entity in indexes and more than once
for the entity itself.

I know that both Twig and Objectify have support for defining your  
own

kind names without needing to actually rename your class to something
incomprehensible.

On 20 Jul 2010, at 11:11, Didier Durand wrote:


Hi Mark,



I would say yes: the datastore viewer shows the data with couples
(name,value), name being the origianal attribute name in the java
class.


Moreover the doc says Each persistent field of the class  
represents a

property of the entity, with the name of the property equal to the
name of the field (with case preserved). at
http://code.google.com/appengine/docs/java/datastore/dataclasses.html 
...



regards
didier



On Jul 19, 3:32 pm, Mark mar...@gmail.com wrote:

Hi,


I read in a post that the length of member variable names  
contributes

to the amount of storage space your app uses, example:



class Farm {
private String mFarmersFavoriteCropToPlant;
}



would take more space to store than:



class Farm {
private String m;
}


might not matter for a handful of instances, but if I have  
thousands

of records... is this true?



Thanks



--
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-java@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 
.




--
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.



Re: [appengine-java] Re: is there any solution/idea how blacklist IP in realtime ?

2010-07-19 Thread John Patterson
I believe some people maintain their own request count by ip address  
using memcache and restrict access using a filter.


On 19 Jul 2010, at 20:09, Marcus Brody wrote:



I am missing something ? So you guys are sitting in web console and
watch
how many requests came from given IP address ? This has to be done
automatically ... somehow.

--
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 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.



Re: [appengine-java] Re: rename a app-id

2010-07-18 Thread John Patterson

Yes you can transfer your data efficiently using the remote datastore:

http://code.google.com/p/remote-datastore/

You basically read in bulk from one datastore then write in bulk to  
the other like this


DatastoreService service =  
DatastoreServiceFactory.getDatastoreService();
RemoteDatastore.divert(http://aversion.latest.first-app-id.appsot.com/remote-datastore 
, first-app-id, aversion);

QueryResultIteratable results = service.prepare(...);
RemoteDatastore.bypass();
service.put(results);

You need to use cursors to keep your place between reads and writes

On 18 Jul 2010, at 20:34, aswath satrasala wrote:


Any java tools to do this?

On Sun, Jul 18, 2010 at 6:49 PM, Robert Lancer robert.lan...@gmail.com 
 wrote:

No, you have to create a new one and transfer everything.

On Jul 18, 12:02 am, aswath satrasala aswath.satras...@gmail.com
wrote:
 Hello,
 Is there any way I can rename my app-id.

 -Aswath

--
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 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-java@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 
.


--
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.



Re: [appengine-java] populate datastore with a new kind

2010-07-18 Thread John Patterson



On 18 Jul 2010, at 06:11, emmanuel harel wrote:


Thanks John !
Is it possible to have a svn check out repository address ?
Regards


http://code.google.com/p/remote-datastore/

--
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.



Re: [appengine-java] populate datastore with a new kind

2010-07-18 Thread John Patterson


On 19 Jul 2010, at 01:23, emmanuel harel wrote:

Thank you for the address but my tortoise svn is telling me this is  
not the address of the trunk

Do i have to use TortoiseHG to check out this project ?


Click on the link and all will be revealed

--
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.



Re: [appengine-java] 500 Server Error. Please help

2010-07-17 Thread John Patterson

Look  in the logs to see what is causing the error

On 17 Jul 2010, at 19:37, jayati wrote:


After much difficulty in deploying, (difficulty like:  I was getting
remote host closed connection many times and had to deploy again and
again) It finally deployed correctly. But, I am getting error as
follows:

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 URL of the application is: jayati3644.appspot.com

Could someone tell me why this is happening and what I should do to
remove it. I have tried deploying the application a number of times
and also making another application and deploying my project there but
it doesn't work. Any help appreciated.

--  
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 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.



Re: [appengine-java] Re: memcache best practice or framework

2010-07-16 Thread John Patterson


On 17 Jul 2010, at 08:33, Shawn Brown wrote:

Aaah, stick-cache has dependencies on twig and
http://code.google.com/p/guava-libraries/

The utilities from twig can be pulled out easily but I haven't looked
at guava-libraries/


Sorry the Twig ones slipped in by mistake.  I'e just pushed an update  
to remove them.  Mainly it was a class to help reduce the size of  
serialized instances by no including a class descriptor.  Now it uses  
plain Java serialization.


--
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.



Re: [appengine-java] Re: Or filters cannot be applied to multiple properties

2010-07-15 Thread John Patterson
Yes, it is a replacement for Datanucleus designed specifically for the  
datastore.  There are also other alternative frameworks such as Slim3,  
Objectify and SimpleDS all with their own unique features.


Twig is the only one to support these merged OR queries you asked about.

One more point - Twig executes the two branches of the OR query in  
*parallel* and then merges the results.  It can do this because it has  
support for async (non-blocking) datastore operations.  this means  
that even if you have hundreds of branches to your query they should  
return in roughly the same amount of time.


On 15 Jul 2010, at 13:52, Vikas Hazrati wrote:


Hi John, I quickly skimmed over the twig project, it seems that it
works directly on top of the datastore. Does that mean that I do not
need to use datanucleus or does twig work in conjunction with that and
I would need both.

On Jul 14, 9:30 pm, John Patterson jdpatter...@gmail.com wrote:

Twig Persist has support for OR queries on multiple properties.

http://code.google.com/p/twig-persist/

You example is coded like this:

TypedFindCommand command =
datastore.find().type(Person.class).addFilter)active,  
EQUAL, true);

command.addChildQuery().addFilter(firstName, EQUAL, aFirstName);
command.addChildQuery().addFilter(lastName, EQUAL, aLastName);
IteratorPerson people = command.returnResultsNow();

On 14 Jul 2010, at 19:10, Vikas Hazrati wrote:




Further to my previous question
http://groups.google.com/group/google-appengine/browse_thread/
thread/...
in which we were getting the following error 
'or' filters can only check equality
Now for the sake of datanucleus and datastore we changed the
functionality to be equality for the time being
so the query reads like
@NamedQuery(name=User.findActiveByUsernamePattern,
   query=SELECT DISTINCT user  +
   FROM User as user  +
   WHERE (firstName = :pattern OR
lastName = :pattern)  +
   AND (active = true)  +
   ORDER BY firstName, lastName)
and now I get
org.datanucleus.store.appengine.query.DatastoreQuery
$UnsupportedDatastoreFeatureException: Problem with query SELECT
FROM
User as user WHERE (user.firstName = :pattern OR user.lastName
= :pattern) AND (user.active = true) ORDER BY user.firstName,
user.lastName: Or filters cannot be applied to multiple properties
(found both firstName and lastName).
A search on the net does not show too many results for the problem
that we are facing.
Are we the only ones facing this issue? No one else is trying to  
port

a legacy application to GAE? Isn't this quite a normal routine
query in JPA???
@datanucleus, @gae please respond.
Regards | Vikas
www.inphina.com
www.thoughts.inphina.com



--
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-java@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 
.




--
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.



Re: [appengine-java] Or filters cannot be applied to multiple properties

2010-07-14 Thread John Patterson

Twig Persist has support for OR queries on multiple properties.

http://code.google.com/p/twig-persist/

You example is coded like this:

TypedFindCommand command =
datastore.find().type(Person.class).addFilter)active, EQUAL, true);
command.addChildQuery().addFilter(firstName, EQUAL, aFirstName);
command.addChildQuery().addFilter(lastName, EQUAL, aLastName);
IteratorPerson people = command.returnResultsNow();



On 14 Jul 2010, at 19:10, Vikas Hazrati wrote:


Further to my previous question
http://groups.google.com/group/google-appengine/browse_thread/ 
thread/...

in which we were getting the following error 
'or' filters can only check equality
Now for the sake of datanucleus and datastore we changed the
functionality to be equality for the time being
so the query reads like
@NamedQuery(name=User.findActiveByUsernamePattern,
   query=SELECT DISTINCT user  +
   FROM User as user  +
   WHERE (firstName = :pattern OR
lastName = :pattern)  +
   AND (active = true)  +
   ORDER BY firstName, lastName)
and now I get
org.datanucleus.store.appengine.query.DatastoreQuery
$UnsupportedDatastoreFeatureException: Problem with query SELECT
FROM
User as user WHERE (user.firstName = :pattern OR user.lastName
= :pattern) AND (user.active = true) ORDER BY user.firstName,
user.lastName: Or filters cannot be applied to multiple properties
(found both firstName and lastName).
A search on the net does not show too many results for the problem
that we are facing.
Are we the only ones facing this issue? No one else is trying to port
a legacy application to GAE? Isn't this quite a normal routine
query in JPA???
@datanucleus, @gae please respond.
Regards | Vikas
www.inphina.com
www.thoughts.inphina.com

--
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 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.



Re: [appengine-java] Re: How to upload primary key as an id instead of name

2010-07-13 Thread John Patterson

You can do this now using the RemoteDatastore Java utility

http://code.google.com/p/remote-datastore/

For example, this code runs on your desktop and creates a single  
entity in your live datastore:


   // divert datastore operations to live application
   RemoteDatastore.install();
   RemoteDatastore.divert(http://myVersion.latest.myApp.appspot.com/remote-datastore 
, myApp, myVersion);


   // create an entity with a numeric key
   Key key = KeyFactory.createKey(MyKindName, 35);
   Entity entity1 = new Entity(key);
   entity1.setProperty(property1, hello);

   // put entity to the remote datastore
   DatastoreService service =  
DatastoreServiceFactory.getDatastoreService();

   datastore.put(entity1);

This also works for bulk puts

On 14 Jul 2010, at 03:37, Matthew Blain wrote:


Sorry, this won't be available until 1.3.6. You should be able to do
something like this:

- property: __key__
  external_name: CityId
  export_transform: datastore.Key.id
  import_transform: lambda value: datastore.Key.from_path('City',
int(value))


--Matthew

On Jul 10, 5:53 pm, Pasha pavel.selivers...@gmail.com wrote:

Could you please post an example. Thank you in advance.

On Jun 30, 1:18 pm, Matthew Blain matthew.bl...@google.com wrote:




The 1.3.5 bulkloader client will allow you to specify a numeric key;
you must use the Key constructor explicitly to do this, integers  
will

still be converted into strings.



On Jun 30, 12:12 am, MANISH DHIMAN manisd...@gmail.com wrote:



Hi All
When I upload data using CSV file on G A E. Primary key is stored
there as a name instead of id.
Example.



Format of .yaml is Given below
transformers:
- kind: City
  connector: csv
  connector_options:
encoding: utf-8
columns: from_header
  property_map:
- property: __key__
  external_name: CityId
  export_transform: datastore.Key.id
- property: Name
  external_name: Name



Primary key stored there is:
ID/Name   Name
name=1Delhi
name=2London



Due to uploaded data with name=keyvalue, when I am try to get Key
from any Fetched Entities, then Key contains only name value but id
value is 0 and also name contains long value as a String instance.


Is it possible to store primary key(Using CSV while uploading  
data) in

a format given below :
ID/Name  Name
id=1Delhi
id=2London


When data is stored with id=keyvalue, then Key contains id  
value is

keyvalue as long instance.


--
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 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.



Re: [appengine-java] Re: same application same datastore different subdomain

2010-07-13 Thread John Patterson


On 14 Jul 2010, at 01:39, Shyam Visamsetty wrote:


You definitely cannot share the data store between two applications as
of now.


Technically you actually can share data between applications using  
RemoteDatastore - you can divert datastore operations to a different  
application.


http://code.google.com/p/remote-datastore/

But you need to be careful not to break Googles terms of use by trying  
to spread you load between different applications to avoid fees.


--
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.



Re: [appengine-java] Re: Have to restart server to see changes when using Spring

2010-07-12 Thread John Patterson
JRebel woks well with App Engine to make restarting unnecessary most  
of the time.


On 12 Jul 2010, at 19:53, Marcel Overdijk wrote:


Anytime you change a Java file you have to restart the server to make
the changes effective.



On Jul 12, 7:59 am, decitrig rws...@gmail.com wrote:

I have this controller set up right now, using Spring MVC 3.0:

@Controller
public class HelloController {

  @RequestMapping(/hello.htm)
  public String hello() {
return helloView;
  }

}

It works fine - navigating to that link tries to call up the  
helloView

view. However, if I want to make a change (like switching the return
value to helloView1) I have to stop and restart the process in
Eclipse. Making changes to e.g. index.jsp in the war/ directory are
refreshed just fine. Is there something special I need to do for
Spring? I'm just getting started with it  with GAE, so I'm probably
just doing something blinkered. Everything seems to *work* fine, I
just have to restart for changes to be displayed.

--
decitrig


--
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 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.



Re: [appengine-java] How to upload primary key as an id instead of name

2010-07-12 Thread John Patterson
If you use the RemoteDatastore you have complete control in Java of  
what you key is.


http://code.google.com/p/remote-datastore/

e.g. this code puts an entity with the id set in your remote datastore  
from your local machine:


RemoteDatastore.install();
RemoteDatastore.divert(http://myVersion.latest.myApp.appspot.com/remote-datastore 
, myApp, myVersion);
DatastoreService service =  
DatastoreServiceFactory.getDatastoreService();


Key key = KeyFactory.createKey(MyKindName, 35);
Entity entity1 = new Entity(key);
entity1.setProperty(property1, hello);
datastore.put(Arrays.asList(entity1, entity2);

On 30 Jun 2010, at 14:12, MANISH DHIMAN wrote:


Hi All
When I upload data using CSV file on G A E. Primary key is stored
there as a name instead of id.
Example.

Format of .yaml is Given below
transformers:
- kind: City
 connector: csv
 connector_options:
   encoding: utf-8
   columns: from_header
 property_map:
   - property: __key__
 external_name: CityId
 export_transform: datastore.Key.id
   - property: Name
 external_name: Name

Primary key stored there is:
ID/Name   Name
name=1Delhi
name=2London

Due to uploaded data with name=keyvalue, when I am try to get Key
from any Fetched Entities, then Key contains only name value but id
value is 0 and also name contains long value as a String instance.

Is it possible to store primary key(Using CSV while uploading data) in
a format given below :
ID/Name  Name
id=1Delhi
id=2London

When data is stored with id=keyvalue, then Key contains id value is
keyvalue as long instance.

--
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 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.



Re: [appengine-java] Re: Best performance for deleting and inserting entities

2010-07-10 Thread John Patterson
You can use the RemoteDatastore to do bulk puts directly from your  
desktop to the live datastore.  It is extremely fast as it simply  
forwards on the binary protocol buffer data from one environment to  
another.


http://code.google.com/p/remote-datastore/

On 10 Jul 2010, at 20:06, Robert Lancer wrote:


What I would do is create a servlet that accepts a row or rows of the
spreadsheet as params, and then create a local java app to read from
the spreadsheet and gradually feed the spreadsheet to the servlet, app
engine accepts up to 500 entities in a put.

On Jul 10, 7:56 am, Ice13ill andrei.fifi...@gmail.com wrote:

I want to upload big number of objects (from an xls file) into
datastore. What is the best way (least time consuming) for inserting
and deleting a collection of entities ?


--
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 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.



Re: [appengine-java] Re: Best performance for deleting and inserting entities

2010-07-10 Thread John Patterson
It is about the same speed.  I've just uploaded 500,000 entities in  
about 4 hours (over a very slow connection) but my batch size was only  
50 - perhaps larger batches would be faster.


The new Mapping API sounds like the ideal solution but it is python  
only at the moment.  You could use the Blobstore to roll your own  
using the Deferred class to process a byte range at a time.


On 11 Jul 2010, at 01:35, Peter Ondruska wrote:


John, is Remote Datastore faster than Python bulk insert? I tried to
load millions of entities using Python but had to give up as it took
about an hour to load just 100K. Peter

On Jul 10, 4:22 pm, John Patterson jdpatter...@gmail.com wrote:

You can use the RemoteDatastore to do bulk puts directly from your
desktop to the live datastore.  It is extremely fast as it simply
forwards on the binary protocol buffer data from one environment to
another.

http://code.google.com/p/remote-datastore/

On 10 Jul 2010, at 20:06, Robert Lancer wrote:



What I would do is create a servlet that accepts a row or rows of  
the

spreadsheet as params, and then create a local java app to read from
the spreadsheet and gradually feed the spreadsheet to the servlet,  
app

engine accepts up to 500 entities in a put.



On Jul 10, 7:56 am, Ice13ill andrei.fifi...@gmail.com wrote:

I want to upload big number of objects (from an xls file) into
datastore. What is the best way (least time consuming) for  
inserting

and deleting a collection of entities ?



--
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-java@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 
.




--
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.



Re: [appengine-java] Re: memcache best practice or framework

2010-07-10 Thread John Patterson


On 11 Jul 2010, at 09:12, Shawn Brown wrote:


MemoryCacheString, Hotel mc = new MemoryCacheString, Hotel(50);


but on Jun 22, 2010;  that class was deleted

revision	ded84586e4Delete	/src/main/java/com/vercer/cache/ 
MemoryCache.java


Is it no longer supported?


Try an update now - it is back. 
 


--
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.



Re: [appengine-java] Desarrollo de Aplicaciones con Eclipse

2010-07-09 Thread John Patterson

Es un pregunta muy amplio.  Por eso no podemos ayudar mucho.

On 9 Jul 2010, at 23:57, Edixon Polanco wrote:


Buenas Tardes.

Si quiero desarrollar la aplicación con Google App Engine.

Me pueden ayudar? Gracias por su atención.

Saludos,
Edixon

2010/7/7 Guillermo Schwarz guillermo.schw...@gmail.com
Edixon,


¿Lo quieres hacer en Google Application Engine?

Saludos,
Guillermo.

2010/7/6 Edixon Polanco edixon...@gmail.com
Buenas Tardes.

Como puedo empezar a desarrollar una aplicación que funcione como una
biblioteca en la cual pueda subir mis archivos o libros y poder buscar
dentro de ellos

Nota: Espero me puedan dar alguna idea

Gracias.

--
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 at http://groups.google.com/group/google-appengine-java?hl=en 
.





--
Saludos cordiales,

Guillermo Schwarz
Sun Certified Enterprise Architect

--
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 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-java@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 
.


--
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.



Re: [appengine-java] Error: The API package 'urlfetch' or call 'Fetch()' was not found.

2010-07-07 Thread John Patterson
This RemoteDatastore  code does what you are after to allow you to  
upload and download data from the datastore from a normal JAva  
application.  You can copy the Environment stuff from there:


http://code.google.com/p/remote-datastore/source/browse/src/main/java/com/vercer/engine/proxy/RemoteDatastore.java#29

Line 29 sets the dummy environment

On 7 Jul 2010, at 20:33, [jake] wrote:


I'm using jetty outside of the dev_appserver.sh environment.

When I try to use com.google.appengine.api.urlfetch package, I get the
following error:

The API package 'urlfetch' or call 'Fetch()' was not found.
 [Thrown class com.google.apphosting.api.ApiProxy
$CallNotFoundException]

I don't get any errors trying to import
com.google.appengine.api.urlfetch so I think the problem lies in how I
set up an ApiProxy Environment.  I'm probably missing the relevant
entries to enable urlfetch.

Any tips on how to make this service available outside of the
dev_appserver.sh environment?

[jake]

--
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 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.



Re: [appengine-java] Re: Any ETA for a backup/restore facility?

2010-07-04 Thread John Patterson
I have had success uploading data in bulk from Java using this  
RemoteDatastore code:


http://code.google.com/p/remote-datastore/

It is very easy to use and because it operates at the binary protocol  
buffer level it is very fast


Here is an example of using it to upload data:
public class UploadData
{
  public static void main(String[] args)
  {
// only call install once - often in a static initializer
RemoteDatastore.install();

// tell remote datastore where to connect
RemoteDatastore.divert(http://myVersion.latest.myApp.appspot.com/remote-datastore 
, myApp, myVersion);


// use standard datastore API to get a datastore service instance
DatastoreService service =  
DatastoreServiceFactory.getDatastoreService();


// create some entities
Entity entity1 = new Entity(myKindName);
entity1.setProperty(property1, hello);

Entity entity2 = new Entity(myKindName);
entity2.setProperty(property1, there);

// sends the data over http to your remote servlet and stores it  
in the live datastore

datastore.put(Arrays.asList(entity1, entity2);
  }
}

--
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.



Re: [appengine-java] Jetty binds to localhost and not my wireless IP

2010-07-01 Thread John Patterson
Try -bindAddress 0.0.0.0  It works for connecting to GWT from a  
different machine but I never had a problem connecting to the servlet  
engine.



On 2 Jul 2010, at 03:25, keyeslabs wrote:


I'm running GAE eclipse dev environment (GAE installed via the eclipse
update mechanism).  When I run my GAE application locally, it starts
jetty, which seems to bind to localhost (127.0.0.1) rather than my
machine's IP associated with my wireless card.  When I try to connect
to the running GAE app from another machine using, for example,
http://192.168.1.100:, the connection fails.  Things work from the
machine on which the app is running by using http://localhost:.

So... my question is, how can I make jetty bind to more than one IP,
or perhaps to a different IP?  Are there command-line params that I
can pass to the Eclipse target?

Thanks for the help!

--
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 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.



Re: [appengine-java] Jetty binds to localhost and not my wireless IP

2010-07-01 Thread John Patterson

Try -bindAddress 0.0.0.0 - it works for GWT, not sure about Jetty.

On 2 Jul 2010, at 03:25, keyeslabs wrote:


I'm running GAE eclipse dev environment (GAE installed via the eclipse
update mechanism).  When I run my GAE application locally, it starts
jetty, which seems to bind to localhost (127.0.0.1) rather than my
machine's IP associated with my wireless card.  When I try to connect
to the running GAE app from another machine using, for example,
http://192.168.1.100:, the connection fails.  Things work from the
machine on which the app is running by using http://localhost:.

So... my question is, how can I make jetty bind to more than one IP,
or perhaps to a different IP?  Are there command-line params that I
can pass to the Eclipse target?

Thanks for the help!

--  
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 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.



  1   2   3   >