Re: [appengine-java] Lightweight Best performing MVC framework - Recommendation

2011-01-03 Thread Maxim Veksler
http://vosao.org/ are using Apache Velocity, have no personal experience
with the framework (am not a gui developer) but it seems to work for them.


On Wed, Dec 29, 2010 at 4:08 PM, Sree sreeju...@gmail.com wrote:

 Hello,

 I am new to Java and App Engine, and coming from ASP.NET C# and
 Windows Azure world. I am looking for a lightweight  best performing
 java based MVC framework.  I would like to migrate my ASP.NET MVC
 project to App Engine (Java).

 It would be great if you can share your experience.  I am open to
 Python as well, but learning Java is faster than Python, since I am
 good at C#.

 Thanks in Advance.

 Regards
 Sree

 --
 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] no async queries on AsyncDatastoreService for 1.4.0?

2010-12-07 Thread Maxim Veksler
Hi Max,

Could you please provide input on the following design:

We design for DataSource redundancy. For this we've built a flow which
obtains data from 2 sources: First from GAE DataSource using PreparedQuery
and if that fails (0.5sec timeout) from our backup service feed which we
access using URLFetch (auto scaled EC2 nodes).

We strive for maximum performance, So we plan to issue async call to each of
the data sources and later when the data becomes required poll the 2
sources, using the first one available.

As for the URLFetch service, we will use this patten:
FutureHTTPResponse f = fetchService.fetchAsync(request);
...
if(f.isDone()) { ... }

But for PreparedQuery.asIterator(), I'm not sure how this is implement on
your side. I would love an answer confirming that this code will not block
on hasNext() (While datasource is asynchronously getting results)?

IteratorEntity iterator =
getAsyncDatastoreService().prepare(findGeoIP).asIterator();

if(iterator.hasNext()) { ... }



Thanks for the insights.

Maxim.

On Mon, Nov 29, 2010 at 9:08 PM, Max Ross (Google) 
maxr+appeng...@google.com maxr%2bappeng...@google.com wrote:

 Hi Luke,

 First the awesome news:
 As of 1.4.0, many queries are implicitly asynchronous.  When you call
 PreparedQuery.asIterable() or PreparedQuery.asIterator(), we initiate the
 query in the background and then immediately return.  This lets you do work
 while the first batch of results is being fetched.  And, when the first
 batch has been consumed we immediately request the next batch.  If you're
 performing a significant amount of work with each Entity as you iterate you
 will probably see a latency win as a result of this.

 Now the less awesome news:
 We didn't get around to making the List returned by PreparedQuery.asList()
 work this same magic, but you can expect this in a future release.

 Some deeper thoughts:
 The underlying RPCs between your app and the datastore fetch results in
 batches.  We fetch an initial batch of results, and once that batch has been
 consumed we fetch the next batch.  But, there's nothing in the API that maps
 to these batches - it's either a List containing the entire result set or an
 Iterable/Iterator that returns Entities one at a time.  An API that provides
 async access to the individual results returned by an Iterable/Iterator
 (IteratorFutureEntity) doesn't really make sense since you don't know
 which call to hasNext() is going to require a new batch to be fetched, and
 without that knowledge, the knowledge of what is going to trigger something
 expensive, you can't really make appropriate use of an asynchronous API.

 Going forward, we're definitely interested in exposing these batches
 directly, and an explicitly async API for these batches makes a lot of sense
 since fetching these batches would map directly to something expensive on
 the server side.

 Hope this helps,
 Max

 On Fri, Nov 26, 2010 at 4:41 PM, Luke lvale...@gmail.com wrote:

 i was taking a look at the 1.4.0 javadoc for AsyncDatastoreService.  i
 see the get, put and delete operations return a Future, but the
 prepare methods return a naked PreparedQuery object, and it doesn't
 look like PreparedQuery has any async get methods.

 does the AsyncDatastoreService not support asynchronous queries, or is
 there something i'm missing?

 glad to see at lets the get and put methods are async, hoping to get
 async queries too (as well as async interfaces to more services).

 --
 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.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] no async queries on AsyncDatastoreService for 1.4.0?

2010-12-07 Thread Maxim Veksler
Thank you for the information.

We kinda expected that the current implementation will block...
In case anyone wonders our current worked out design is as following: Do
async get to EC2 (takes ~270ms) and right after that do blocking get to
datastore (with timeout of 300ms).

Because we know URLFetch to ec2 takes ~270ms and is async we get to enjoy
both worlds even with a blocking DataStore:

Option A: Datastore has no problems, meaning that it will reply to
PreparedQuery with 15ms. In this case we don't bother with the async call we
just did and just continue normal flow.
Option B: Datastore has problems, and will block. In this case the 300ms
query will time out, after which we will attempt to access the Future.get()
of URLFetch where we expect to have a result.

So... If today we did (at maximum) 500ms datastore get + 270ms URLFetch get
= total of 770ms just for the query after I get implemented we should be
doing (at maximum) query in 300ms.

Kinda of cool.


Maxim.

On Tue, Dec 7, 2010 at 3:39 PM, Alfred Fuller
arfuller+appeng...@google.comarfuller%2bappeng...@google.com
 wrote:

 Currently hasNext() will block on the first batch of results. There is
 currently no way to do what you are asking in Java.

 On Tue, Dec 7, 2010 at 2:40 AM, Maxim Veksler ma...@vekslers.org wrote:

 Hi Max,

 Could you please provide input on the following design:

 We design for DataSource redundancy. For this we've built a flow which
 obtains data from 2 sources: First from GAE DataSource using PreparedQuery
 and if that fails (0.5sec timeout) from our backup service feed which we
 access using URLFetch (auto scaled EC2 nodes).

 We strive for maximum performance, So we plan to issue async call to each
 of the data sources and later when the data becomes required poll the 2
 sources, using the first one available.

  As for the URLFetch service, we will use this patten:
 FutureHTTPResponse f = fetchService.fetchAsync(request);
 ...
 if(f.isDone()) { ... }

 But for PreparedQuery.asIterator(), I'm not sure how this is implement on
 your side. I would love an answer confirming that this code will not block
 on hasNext() (While datasource is asynchronously getting results)?

 IteratorEntity iterator =
 getAsyncDatastoreService().prepare(findGeoIP).asIterator();
 
 if(iterator.hasNext()) { ... }



  Thanks for the insights.

 Maxim.

 On Mon, Nov 29, 2010 at 9:08 PM, Max Ross (Google) 
 maxr+appeng...@google.com maxr%2bappeng...@google.com wrote:

 Hi Luke,

 First the awesome news:
 As of 1.4.0, many queries are implicitly asynchronous.  When you call
 PreparedQuery.asIterable() or PreparedQuery.asIterator(), we initiate the
 query in the background and then immediately return.  This lets you do work
 while the first batch of results is being fetched.  And, when the first
 batch has been consumed we immediately request the next batch.  If you're
 performing a significant amount of work with each Entity as you iterate you
 will probably see a latency win as a result of this.

 Now the less awesome news:
 We didn't get around to making the List returned by
 PreparedQuery.asList() work this same magic, but you can expect this in a
 future release.

 Some deeper thoughts:
 The underlying RPCs between your app and the datastore fetch results in
 batches.  We fetch an initial batch of results, and once that batch has been
 consumed we fetch the next batch.  But, there's nothing in the API that maps
 to these batches - it's either a List containing the entire result set or an
 Iterable/Iterator that returns Entities one at a time.  An API that provides
 async access to the individual results returned by an Iterable/Iterator
 (IteratorFutureEntity) doesn't really make sense since you don't know
 which call to hasNext() is going to require a new batch to be fetched, and
 without that knowledge, the knowledge of what is going to trigger something
 expensive, you can't really make appropriate use of an asynchronous API.

 Going forward, we're definitely interested in exposing these batches
 directly, and an explicitly async API for these batches makes a lot of sense
 since fetching these batches would map directly to something expensive on
 the server side.

 Hope this helps,
 Max

 On Fri, Nov 26, 2010 at 4:41 PM, Luke lvale...@gmail.com wrote:

 i was taking a look at the 1.4.0 javadoc for AsyncDatastoreService.  i
 see the get, put and delete operations return a Future, but the
 prepare methods return a naked PreparedQuery object, and it doesn't
 look like PreparedQuery has any async get methods.

 does the AsyncDatastoreService not support asynchronous queries, or is
 there something i'm missing?

 glad to see at lets the get and put methods are async, hoping to get
 async queries too (as well as async interfaces to more services).

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

[appengine-java] Is warm up requests enabled or disabled by default? (Documentation disagrees)

2010-12-05 Thread Maxim Veksler
Hello Guys,

This page
http://code.google.com/appengine/docs/java/config/appconfig.html#Warming_Requests
says
*Warming requests are also enabled by default if you configured your Java
application with app.yaml. For details, please refer to Java Application
Configuration Using
app.yamlhttp://code.google.com/appengine/docs/java/configyaml/appconfig_yaml.html#Warming_Requests
.*

This page
http://code.google.com/appengine/docs/java/configyaml/appconfig_yaml.html#Warming_Requests
says
*In Java applications configured with app.yaml, warming requests are
disabled by default. To enable them, add the warmup argument to the
inbound_servicesdirective:*

So which of the two is it?

I'm configuration my application with app.yaml and warm ups are one of our
definitely wanted features. Logic says it's enabled by default, but lets be
sure. Please don't do the mistake of allowsing different default behaviour
based on configuration method for the same functionality. This will confuse
the hell out of people jumping between appengine-web.xml  app.yaml.

Thanks,
Maxim.

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



[appengine-java] Understanding appengine-java-sdk jars

2010-11-21 Thread Maxim Veksler
Hello,

I'm trying to figure out the purpose of the various jars that are shipped
with the SDK, mainly the ones that I should be interested at as SDK user.

Generally, what I'm currently holding in my classpath are the following
jars. Not sure this is the correct approach but it seems to be working. This
allows me to run local unit tests using the SDK provided stub environment
and also seems to OK for deployment to GAE production:

impl/appengine-api-labs.jar
impl/appengine-api-stubs.jar
impl/appengine-api.jar
impl/appengine-local-runtime.jar
testing/appengine-testing.jar


As for the shipped libraries, here is a quick analysis. I would appreciate
if people could contribute more knowledge.

ma...@maxim-desktop:~/Downloads/appengine-java-sdk-1.4.0/lib$ tree
.
|-- agent
|   |-- appengine-agentimpl.jar - Not relevant, class loading while/black
list implementation
|   `-- appengine-agent.jar - Not relevant, agent interface
|-- appengine-tools-api.jar - SDK framework, some interesting 3rd party jars
are repacked here (google.common, google.cron, google.io, google.net,
google.protobuf, yamlbeans, antlr, joda, mortbay.jetty and some utilities
such as utils.glob, the .class enhancer, gwt launcher and some more stuff).
|-- impl
|   |-- agent
|   |   `-- appengine-agentruntime.jar - Yet another agent impl, not sure
the difference from the agent/appengine-agentimpl.jar ?
|   |-- appengine-api.jar - GAE API: com.google.appengine.api.*,
(google.common, google.io, google.net, google.protobuf (again?)), appstats
utility api, the remoteapi servlet, the various servlet implementations
(MultipartMimeUtils, ParseBlobUploadFilter, SessionCleanupSevlet,
TransactionCleanupFilter, *WarmupServlet *!), storage.onestore ? and some
J2EE dependency stuff (javax.activation, javax.mail) + some nice utilities
such as org.apache.geronimo.mail.util.Base64Encoder
|   |-- appengine-api-labs.jar - GAE labs API:
com.google.appengine.api.labs.taskqueue, resources for appstats (why here?),
repackaged.org.json
|   |-- appengine-api-stubs.jar - Stub *implementations(?)* of appengine-api
(+ appengine-api-labs)?, some 3rd party libraries such as:
org.apache.common.codec, org.apache.common.httpclient,
org.apache.common.logging,
org.quartz (scheduler).
|   `-- appengine-local-runtime.jar - repackaged.com.google.(common, cron,
io, net, protobuf) again?, some 3rd party utilities: yamlbeans,
org.apache.tools.ant, mortbay.jetty
|-- shared
|   |-- appengine-local-runtime-shared.jar - Implementation for local _ah
admin console?
|   |-- el-api.jar - (tomcat?)
|   |-- jsp (tomcat?)
|   |   |-- LICENSE
|   |   |-- repackaged-appengine-ant-1.7.1.jar
|   |   |-- repackaged-appengine-ant-launcher-1.7.1.jar
|   |   |-- repackaged-appengine-jasper-6.0.29.jar (tomcat!)
|   |   |-- repackaged-appengine-jasper-el-6.0.29.jar (tomcat!)
|   |   `-- repackaged-appengine-tomcat-juli-6.0.29.jar (tomcat!)
|   |-- jsp-api.jar (tomcat?)
|   |-- LICENSE
|   `-- servlet-api.jar (tomcat?)
|-- testing
|   `-- appengine-testing.jar - The mock environment setup utilities
(Local*ServiceTestConfig) + the regular repacked.com.google.*,
|-- tools
|   |-- jsp (tomcat)
|   |   |-- LICENSE
|   |   |-- repackaged-appengine-jakarta-jstl-1.1.2.jar
|   |   |-- repackaged-appengine-jakarta-standard-1.1.2.jar
|   |   `-- repackaged-appengine-jasper-jdt-6.0.29.jar
|   `-- orm
|   |-- asm-3.1.jar
|   |-- datanucleus-core-1.1.5.jar
|   |-- datanucleus-enhancer-1.1.4.jar
|   |-- datanucleus-jpa-1.1.5.jar
|   |-- geronimo-jpa_3.0_spec-1.1.1.jar
|   |-- geronimo-jta_1.1_spec-1.1.1.jar
|   `-- jdo2-api-2.3-eb.jar
`-- user
|-- appengine-api-1.0-sdk-1.4.0.jar - Implementation of the
appengine-api.jar, not sure if this is the code that actually runs on GAE. I
can verify that uploading the application without this jar does not break
runtime environment. I think it's here to allow local environment runtime.
Would appreciate more info. Just guessing...
|-- appengine-api-labs-1.4.0.jar - Implementation of the
appengine-api-labs, same caveats as appengine-api-1.0-sdk-1.4.0.jar apply
here.
|-- appengine-jsr107cache-1.4.0.jar - Google implementation of jsr107.
|-- jsr107cache-1.1.jar - jsr107 api's.
`-- orm - boring...
|-- datanucleus-appengine-1.0.7.final.jar  - boring...
|-- datanucleus-core-1.1.5.jar - boring...
|-- datanucleus-jpa-1.1.5.jar - boring...
|-- geronimo-jpa_3.0_spec-1.1.1.jar - boring...
|-- geronimo-jta_1.1_spec-1.1.1.jar - boring...
`-- jdo2-api-2.3-eb.jar - boring...

11 directories, 41 files

Finally, after this quick (30min) analysis. I can certainly say that I don't
understand the jar directory organization structure.

What is the meaning of the name user directory?
Is impl/appengine-local-runtime.jar an API jar or an implementation? and
more generally, why the API jars are kept in the impl direcotry?


Anyways, I think that my initial jar selection to be included in the
classpath was correct 

[appengine-java] Does that datastore mains sort order for list properties?

2010-11-15 Thread Maxim Veksler
Hello,

We are using the low level API, it unclear from the documentation if the
sort order is maintained in list properties?

So for example, if I serialize int[] intArray = { 1, 2, 3}, can I always
expect to receive back {1 , 2, 3} or is it possible that the order will be
randomized?


Thank you,
Maxim.

-- 
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: Does that datastore mains sort order for list properties?

2010-11-15 Thread Maxim Veksler
It does, thank you very much.

On Mon, Nov 15, 2010 at 4:47 PM, Didier Durand durand.did...@gmail.comwrote:

 Hi,

 Even though an array is not a Collection per say, it seems that
 because of

 http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/Entity.html#setProperty%28java.lang.String,%20java.lang.Object%29
 ,
 you have to be careful with the order of items in an array as it says

 All Collections are prone to losing their sort order and their
 original types as they are stored in the datastore. For example, a
 TreeSet may be returned as a List from getProperty(java.lang.String),
 with an arbitrary re-ordering of elements. 

 Hope it helps
 didier

 On Nov 15, 3:21 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hello,
 
  We are using the low level API, it unclear from the documentation if the
  sort order is maintained in list properties?
 
  So for example, if I serialize int[] intArray = { 1, 2, 3}, can I always
  expect to receive back {1 , 2, 3} or is it possible that the order will
 be
  randomized?
 
  Thank you,
  Maxim.

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



[appengine-java] Sorting by multiple properties in code example?

2010-11-15 Thread Maxim Veksler
Hi,

In an effort to squeeze the very last bit of performance from AppEngine I'm
moving the our application to use getDatastoreService().get(ListKey) type
of fetch operations instead of current implementation which uses Query
 SortDirection.
This leads to to having to sort in memory, which is fine because the result
set is relatively small results and is cached after initial fetch.

Question is how to do the in memory sort elegantly, should I go with
Arrays.sort(T[] a, Comparator? super T) or do you know some lightweight
framework that is build specifically for
these purposes (think collations sorting order) ?
I would appreciate example or two for code that does multiple property
sorting with DataStore objects.

Thank you,
Maxim.

-- 
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: mapreduce - passing filters

2010-11-10 Thread Maxim Veksler
Don't think Google would mind if you submit a patch, you have the source
code under SVN available from here
http://code.google.com/p/appengine-mapreduce/source/browse/

On Wed, Nov 10, 2010 at 6:08 PM, Nacho Coloma icol...@gmail.com wrote:

 Is there any option to contribute to this project? I am using hacks to
 do the filtering, and it seems easy to implement.

 I would love to discuss things first, but appengine-mapreduce seems
 like a read-only project to me. It's fine but I would like to help it
 move forward.

 On Nov 8, 10:11 pm, Ikai Lan (Google) 
 ikai.l+gro...@google.comikai.l%2bgro...@google.com
 
 wrote:
  There was talk about supporting it, but the priority is getting out the
  shuffle/reduce steps first.
 
  appengine-mapreduce is an open source project. You can probably just
  edit/subclass DatastoreInputFormat.java and add the filter functionality:
 
  http://www.google.com/codesearch/p?hl=en#XwsseYUY0Ps/trunk/java/src/c...
 
  --
  Ikai Lan
  Developer Programs Engineer, Google App Engine
  Blogger:http://googleappengine.blogspot.com
  Reddit:http://www.reddit.com/r/appengine
  Twitter:http://twitter.com/app_engine
 
 
 
 
 
 
 
  On Mon, Nov 8, 2010 at 12:28 PM, Brad bseef...@finallythebasics.com
 wrote:
   Ikai,
 
   Are there any plans to support filter functionality in the future? I
   have a similar situation where I want to iterate over a collection
   that is big enough to be used by the mapper framework, but much
   smaller than the actual collection size of all entities of that kind.
 
   Brad
 
   On Nov 8, 11:56 am, Ikai Lan (Google) 
   ikai.l+gro...@google.comikai.l%2bgro...@google.com
 ikai.l%2bgro...@google.com ikai.l%252bgro...@google.com
 
   wrote:
No, the mapper will go over everything. If the number of entities is
   small,
you are better off placing an indexed property on ONLY these fields,
 then
just iterating over them with a cursor and either a local client
 making
multiple HTTP calls to your App Engine app or chained task queues.
 
--
Ikai Lan
Developer Programs Engineer, Google App Engine
Blogger:http://googleappengine.blogspot.com
Reddit:http://www.reddit.com/r/appengine
Twitter:http://twitter.com/app_engine
 
On Sun, Nov 7, 2010 at 5:58 AM, aswath satrasala 
   aswath.satras...@gmail.com
 
 wrote:
 Hello,
 I want to perform few aggregations on entities of a kind that are
   filtered
 by the property.
 The entities I want to perform the aggregation is small compared to
 the
 complete entity set.
 Is there any way to pass the filters to the mapper, so that only
 those
 entities are retrieved and aggregation is performed
 
 *Regards
 -Aswath
http://vs-accounting.appspot.com
 Accounting for Indian markets.*
 
 --
 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.comgoogle-appengine-java%2B
 unsubscr...@googlegroups.comgoogle-appengine-java%2B
   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.comgoogle-appengine-java%2bunsubscr...@googlegroups.comgoogle-appengine-java%2B
 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.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] GAE or EC2

2010-11-09 Thread Maxim Veksler
Hi Ikai,

I would like to tackle the question from a different angel.


Is GAE ready for real time web applications? What would your suggestion be
for a startup such as ours, where the service *must* be online 24/7 and
every minute of downtime costs our clients money (law suits... let's not
get into that). Can we base our business model on GAE? Do you consider the
system production ready? Would you advise we have an ready for execution
exit strategy?

I understand these are though questions to answer being a Google employee.

Judging by past month pingdom monitoring history of our POC - the error rate
is relatively high (HTTP 500,  30sec reply timeouts and co.). Please don't
get me wrong we are happy with GAE, our company communication is running on
Google Apps Premium and we would gladly signup for Google App Engine for
Business SLA (b.t.w, if any early testers access is available - Please let
me know).

I would appreciate comments on the above.

Also, a note about EC2 as it came up in this thread. We run our rendering 
analytics on EC2. Works cool as long as you don't need autoscale (manual,
before job submission scale is super easy -- Just API fire up as many
instances as you need).

Maxim.

On Tue, Nov 9, 2010 at 4:50 AM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 I'm biased, naturally, but here's my piece:

 They're both great, young platforms, and successful businesses have been
 built on both Google App Engine as well as Amazon EC2. Amazon's lower level
 access appeals to some, whereas Google App Engine's abstractions appeal to
 the folks in this group.

 Have you actually used EC2 before? If not, new accounts can sign up for a
 free micro instance. You'll want to check this out before you make any
 decisions. Since you're already looking at EC2, why not look at VPS
 solutions? I personally prefer a provider such as Slicehost or Linode to EC2
 for anything I can't currently do on Google App Engine.

 --
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 Blogger: http://googleappengine.blogspot.com
 Reddit: http://www.reddit.com/r/appengine
 Twitter: http://twitter.com/app_engine



 On Mon, Nov 8, 2010 at 5:59 PM, JY jy2...@gmail.com wrote:

 I want to ask fellow GAE users whether you think GAE is good choice to
 build real business on?
 I have used GAE for some personal projects, and right now help a
 friend on a tiny start up (but with big dream). The project is related
 to social network - I am thinking of two options:
 1, GAE
 The benefits are obvious. However, it is also locking you inyou
 don't have much control over it. If you are unhappy later, you will
 have to redo the persistence layer and migrate data etc.
 2, EC2
 You have much more control, and if the start-up gets funding, it is
 easy to migrate to dedicated hosting or even its own data center. The
 down side is developer (me, and only me) will have to spend quite some
 time to take care of the infrastructure (although I like this kind of
 work...)

 I think my biggest concern of GAE is over the quality of service, and
 the data-store - if I go EC2, I probably will use a NoSQL solution
 like MogoDb, or Cassandra. The development efforts might be similar -
 all products are sort of young, hot, and limited.

 Thanks.

 JY

 --
 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.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] Task Queue on other App Servers

2010-11-06 Thread Maxim Veksler
Hi Andrew,

We would be interested in sharing info about moving to/from appengine. Guess
the biggest trouble would be the datastore implementation, we don't
currently use the task queue api.

Are you aware of http://code.google.com/p/appscale/ ?


Maxim.

-- Sent from my Nexus.
On Oct 26, 2010 4:24 PM, andrew aute...@gmail.com wrote:
 Anyone out there got an implementation of the TaskQueue working on
 other app servers (jetty, tomcat)?

 We would like this as an option to ensure portability of our
 application between app engine and other options.

 Either the same Google TaskQueue code configured to run on another
 server, or a compatible implementation.

 If not, anyone else looking for the same - who is interested in
 sharing the effort of getting that running?

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



[appengine-java] Re: [google-appengine] Re: Setting a lower request timeout

2010-11-04 Thread Maxim Veksler
That's awesome, do we have this functionality in Java?

On Thu, Nov 4, 2010 at 3:42 AM, Rafael Sierra rafaeljs...@gmail.com wrote:

 I think this is enough for me:


 http://code.google.com/appengine/docs/python/datastore/functions.html#create_rpc

 On Wed, Nov 3, 2010 at 11:02 PM, Rafael Sierra rafaeljs...@gmail.com
 wrote:
  Is it possible to set my DeadlineExceededError lower than 30 seconds?
  I wish to run some process and ensure that it will run below 5
  seconds.
 
  A decorator like @run_within(seconds=5) would be awesome too, but
  this I know that does not exists (yet?)
 
  Anoter question (related): When a DeadlineExceededError occurs,
  appengine rollback all transactions made?
 
  --
  Rafael Sierra
  http://blog.rafaelsdm.com
 



 --
 Rafael Sierra
 http://blog.rafaelsdm.com

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



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



[appengine-java] Debugging against production datastore?

2010-11-02 Thread Maxim Veksler
Hi,

I'm looking for a method to access the datastore remotly, solving this would
allow me to debug my development code using production data.

I was thinking about remote_api but I don't really know if it has a pull
interface (remote api push is used in bulk upload).

Are there any known methods to debug code against production? Be it a
configuration switch at the sdk level or a custom hack?

Any other work around for this problem?

Thanks,
Maxim.

-- Sent from my Nexus.

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



[appengine-java] Eclipse plugin insists on copying DataNucleus jars to war/WEB-INF/lib

2010-10-26 Thread Maxim Veksler
Hello,

My project needs only 2 jars from GAE/J:
appengine-api-1.0-sdk-1.3.8.jar
appengine-api-labs-1.3.8.jar

The rest of the jars supplied by the plugin are API's that are not used by
our application and thus not required as part of the deployment:
appengine-jsr107cache-1.3.8.jar
datanucleus-appengine-1.0.7.final.jar
datanucleus-core-1.1.5.jar
datanucleus-jpa-1.1.5.jar
geronimo-jpa_3.0_spec-1.1.1.jar
geronimo-jta_1.1_spec-1.1.1.jar
jdo2-api-2.3-eb.jar
jsr107cache-1.1.jar


I've tried to delete these jars and deployed the app to GAE/J -- It works
great and the application is running happily ever after.

The thing is GAE Eclipse plugin insists on recopying the jars to the project
war/WEB-INF/lib folder (* it's unclear the when it decides to do so).
I even tried to edit the values of filesCopiedToWebInfLib from the settings
file .settings/com.google.appengine.eclipse.core.prefs which also did not
help (further more -- The plugin just updated this entry back to it's
original state... why put a configuration option if you ignore it?)

I want these jars removed for 2 reasons:
- 1. It makes the project lighter, removes clutter and is generally better
to pull small project over wire.
- 2. I remember reading in the mailing list that fewer jars help improve the
application cold start times. I'm not talking about projects like spring
that have large startup penalty but simply having jar flles in the
classpath. Don't know if this is true and I haven't done any benchmarks to
verify this. OTOH to be on the safe side -- Why test if I can simply not
upload the unwanted jars and be done with it?

So, in conclusion - What is the proper method (if any) to instruct GAE
Eclipse Plugin to skip checking and copying of jar's that are basic GAE sdk
jars into my WEB-LIB/lib folder?


Thanks for reading,
Maxim.

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



[appengine-java] Re: Jetty binds to localhost and not my wireless IP

2010-10-20 Thread Maxim Veksler
For eclipse do the following:

Click on the the [project name]  Debug As  Debug Configurations...
Go to Web Application  [project name]
Here under tab named Arguments add the following: --address=0.0.0.0,
so that your Arguments look like this: --port= --address=0.0.0.0 /
home/maxim/workspace/[project name]/war
Click apply.

From now on, your Jetty should start on 0.0.0.0:, you can verify
this by running lsof -i -P on Linux, the output should look like this:
ma...@maxim-desktop:~$ lsof -i -P | grep

java  17717 maxim   75r  IPv6 365614  0t0  TCP *: (LISTEN)


For reference, these are the options this command accepts:

Usage: dev-appserver [options] war directory

Options:
 --help, -h Show this help message and exit.
 --server=SERVERThe server to use to determine the latest
  -s SERVER   SDK version.
 --address=ADDRESS  The address of the interface on the local
machine
  -a ADDRESS  to bind to (or 0.0.0.0 for all
interfaces).
 --port=PORTThe port number to bind to on the local
machine.
  -p PORT
 --sdk_root=rootOverrides where the SDK is located.
 --disable_update_check Disable the check for newer SDK versions.


HTH

On Aug 14, 3:06 am, Jason Proctor juvat...@gmail.com wrote:
 in your build.xml, in the runserver target, add an address
 attribute to the dev_appserver tag --

 dev_appserver
   war=war
   address=0.0.0.0
 /

 works for me!

 On Jul 1, 3:13 pm, John Patterson jdpatter...@gmail.com wrote:







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

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



Re: [appengine-java] Problem with DNS resolution to appspot.com from 8.8.8.8 (Google DNS) ?

2010-10-19 Thread Maxim Veksler
Hi Ikai,

Please note that the DNS resolver is 8.8.8.8, not Netex (which is btw a
really crappy service).

Anyways, it seems like (even though unlikely) that it was a Google issue
because checking later that day the issue was fixed for me, the fix was
8.8.8.8 giving a different resolution for appspot.com.

I would be interested in a follow up, just to make sure these issues won't
happen again.

For more details (the dig before and after) please see this discussion on
the local linux mailing list http://article.gmane.org/gmane.linux.region.was
8.8.8.8 giving a different resolution for appspot.com. I would be
intisrael/41395 http://article.gmane.org/gmane.linux.region.israel/41395


http://article.gmane.org/gmane.linux.region.israel/41395Thank you for the
reply,
Maxim.

On Tue, Oct 19, 2010 at 8:03 PM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 Looks like you are with Bezeq international. Users have reported issues
 before. Some users have reported that calling Beseq and asking to remove the
 Netex service has worked:


 http://groups.google.com/group/google-appengine/browse_thread/thread/a31babca25e769e9/d36129bb094e070b?lnk=gstq=beseq#d36129bb094e070b

 --
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 Blogger: http://googleappengine.blogspot.com
 Reddit: http://www.reddit.com/r/appengine
 Twitter: http://twitter.com/app_engine



 On Sun, Oct 17, 2010 at 11:47 PM, Maxim Veksler ma...@vekslers.orgwrote:

 Hello,

 Starting today I'm Having problems reaching appspot.com from the
 following IP:

 maximveks...@maximveksler-desktop:~$ wget -q -O - checkip.dyndns.org|sed
 -e 's/.*Current IP Address: //' -e 's/.*$//'
 84.108.229.170

 Please note that my DNS resolver is 8.8.8.8.

 Tested as following:

 maximveks...@maximveksler-desktop:~$ dig appspot.com

 ;  DiG 9.7.1-P2  appspot.com
 ;; global options: +cmd
 ;; Got answer:
 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 11940
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

 ;; QUESTION SECTION:
 ;appspot.com.   IN  A

 ;; ANSWER SECTION:
 appspot.com.245 IN  A   173.194.36.141

 ;; Query time: 89 msec
 ;; SERVER: 8.8.8.8#53(8.8.8.8)
 ;; WHEN: Mon Oct 18 08:42:27 2010
 ;; MSG SIZE  rcvd: 45

 maximveks...@maximveksler-desktop:~$ wget appspot.com
 --2010-10-18 08:42:31--  http://appspot.com/
 Resolving appspot.com... 173.194.36.141
 Connecting to appspot.com|173.194.36.141|:80... connected.
 HTTP request sent, awaiting response... 404 Not Found
  2010-10-18 08:42:32 ERROR 404: Not Found.

 maximveks...@maximveksler-desktop:~$ dig appengine.google.com

 ;  DiG 9.7.1-P2  appengine.google.com
 ;; global options: +cmd
 ;; Got answer:
 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 55756
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

 ;; QUESTION SECTION:
 ;appengine.google.com.  IN  A

 ;; ANSWER SECTION:
 appengine.google.com.   85115   IN  CNAME   www3.l.google.com.
 www3.l.google.com.  300 IN  A   173.194.36.100

 ;; Query time: 97 msec
 ;; SERVER: 8.8.8.8#53(8.8.8.8)
 ;; WHEN: Mon Oct 18 08:42:37 2010
 ;; MSG SIZE  rcvd: 75

 maximveks...@maximveksler-desktop:~$ wget appengine.google.com
 --2010-10-18 08:42:45--  http://appengine.google.com/
 Resolving appengine.google.com... 173.194.36.100
 Connecting to appengine.google.com|173.194.36.100|:80... connected.
 HTTP request sent, awaiting response... 302 Found
 Location:
 https://www.google.com/accounts/ServiceLogin?service=ahcontinue=https://appengine.google.com/_ah/login%3Fcontinue%3Dhttps://appengine.google.com/ltmpl=aesig=c24697718eec1be75b7ab8f8a0c02416[following]
 --2010-10-18 08:42:46--
 https://www.google.com/accounts/ServiceLogin?service=ahcontinue=https://appengine.google.com/_ah/login%3Fcontinue%3Dhttps://appengine.google.com/ltmpl=aesig=c24697718eec1be75b7ab8f8a0c02416
 Resolving www.google.com... 173.194.36.104
 Connecting to www.google.com|173.194.36.104|:443... connected.
 HTTP request sent, awaiting response... 200 OK
  Length: 13852 (14K) [text/html]
 Saving to: `index.html.1'

 100%[==]
 13,852  --.-K/s   in 0.1s

 2010-10-18 08:42:46 (99.4 KB/s) - `index.html.1' saved [13852/13852]

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

Re: [appengine-java] Problem with DNS resolution to appspot.com from 8.8.8.8 (Google DNS) ?

2010-10-19 Thread Maxim Veksler
Just wanted to report that this happened again...

I have no Netex nor nothing on my local network, the workstation is Ubuntu
10.10.
Important fact: Please note the IP address to which appspot.comwas
resolved to: 72.14.234.141 -- It was resolved using **google dns**
(see
the dig output below).

I don't know, is it possible that this IP is not active within current
google AS setup?

maximveks...@maximveksler-desktop:~$ date; wget appspot.com; dig
appspot.com

Wed Oct 20 01:45:04 IST 2010


--2010-10-20 01:45:04--  http://appspot.com/


Resolving appspot.com... 72.14.234.141


Connecting to appspot.com|72.14.234.141|:80... connected.


HTTP request sent, awaiting response... 404 Not Found


2010-10-20 01:45:05 ERROR 404: Not Found.








;  DiG 9.7.1-P2  appspot.com


;; global options: +cmd


;; Got answer:


;; -HEADER- opcode: QUERY, status: NOERROR, id: 2044


;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0





;; QUESTION SECTION:
;appspot.com.   IN  A

;; ANSWER SECTION:
appspot.com.300 IN  A   72.14.234.141

;; Query time: 136 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Oct 20 01:45:05 2010
;; MSG SIZE  rcvd: 45


On Tue, Oct 19, 2010 at 9:34 PM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 My understanding of the Netex service was that it was a WAN optimizer -
 proxy, not a DNS provider, so the choice of DNS provider wouldn't have made
 a difference. Of course, I could be wrong, and if anyone can provide
 details, I'd be more than happy to explore it. Given the history of
 connectivity from Bezeq, I would lean towards that and not Google DNS.


 --
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 Blogger: http://googleappengine.blogspot.com
 Reddit: http://www.reddit.com/r/appengine
 Twitter: http://twitter.com/app_engine



 On Tue, Oct 19, 2010 at 12:28 PM, Maxim Veksler ma...@vekslers.orgwrote:

 Hi Ikai,

 Please note that the DNS resolver is 8.8.8.8, not Netex (which is btw a
 really crappy service).

 Anyways, it seems like (even though unlikely) that it was a Google issue
 because checking later that day the issue was fixed for me, the fix was
 8.8.8.8 giving a different resolution for appspot.com.

 I would be interested in a follow up, just to make sure these issues won't
 happen again.

 For more details (the dig before and after) please see this discussion on
 the local linux mailing list http://article.gmane.org/gmane.linux.region.was
 8.8.8.8 giving a different resolution for appspot.com. I would be
 intisrael/41395http://article.gmane.org/gmane.linux.region.israel/41395


 http://article.gmane.org/gmane.linux.region.israel/41395Thank you for
 the reply,
 Maxim.


 On Tue, Oct 19, 2010 at 8:03 PM, Ikai Lan (Google) 
 ikai.l+gro...@google.com ikai.l%2bgro...@google.com wrote:

 Looks like you are with Bezeq international. Users have reported issues
 before. Some users have reported that calling Beseq and asking to remove the
 Netex service has worked:


 http://groups.google.com/group/google-appengine/browse_thread/thread/a31babca25e769e9/d36129bb094e070b?lnk=gstq=beseq#d36129bb094e070b

 --
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 Blogger: http://googleappengine.blogspot.com
 Reddit: http://www.reddit.com/r/appengine
 Twitter: http://twitter.com/app_engine



 On Sun, Oct 17, 2010 at 11:47 PM, Maxim Veksler ma...@vekslers.orgwrote:

 Hello,

 Starting today I'm Having problems reaching appspot.com from the
 following IP:

 maximveks...@maximveksler-desktop:~$ wget -q -O - checkip.dyndns.org|sed
 -e 's/.*Current IP Address: //' -e 's/.*$//'
 84.108.229.170

 Please note that my DNS resolver is 8.8.8.8.

 Tested as following:

 maximveks...@maximveksler-desktop:~$ dig appspot.com

 ;  DiG 9.7.1-P2  appspot.com
 ;; global options: +cmd
 ;; Got answer:
 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 11940
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

 ;; QUESTION SECTION:
 ;appspot.com.   IN  A

 ;; ANSWER SECTION:
 appspot.com.245 IN  A   173.194.36.141

 ;; Query time: 89 msec
 ;; SERVER: 8.8.8.8#53(8.8.8.8)
 ;; WHEN: Mon Oct 18 08:42:27 2010
 ;; MSG SIZE  rcvd: 45

 maximveks...@maximveksler-desktop:~$ wget appspot.com
 --2010-10-18 08:42:31--  http://appspot.com/
 Resolving appspot.com... 173.194.36.141
 Connecting to appspot.com|173.194.36.141|:80... connected.
 HTTP request sent, awaiting response... 404 Not Found
  2010-10-18 08:42:32 ERROR 404: Not Found.

 maximveks...@maximveksler-desktop:~$ dig appengine.google.com

 ;  DiG 9.7.1-P2  appengine.google.com
 ;; global options: +cmd
 ;; Got answer:
 ;; -HEADER- opcode: QUERY, status: NOERROR, id: 55756
 ;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

 ;; QUESTION SECTION:
 ;appengine.google.com.  IN  A

 ;; ANSWER SECTION:
 appengine.google.com.   85115   IN  CNAME   www3.l.google.com.
 www3

[appengine-java] Problem with DNS resolution to appspot.com from 8.8.8.8 (Google DNS) ?

2010-10-18 Thread Maxim Veksler
Hello,

Starting today I'm Having problems reaching appspot.com from the following
IP:

maximveks...@maximveksler-desktop:~$ wget -q -O - checkip.dyndns.org|sed -e
's/.*Current IP Address: //' -e 's/.*$//'
84.108.229.170

Please note that my DNS resolver is 8.8.8.8.

Tested as following:

maximveks...@maximveksler-desktop:~$ dig appspot.com

;  DiG 9.7.1-P2  appspot.com
;; global options: +cmd
;; Got answer:
;; -HEADER- opcode: QUERY, status: NOERROR, id: 11940
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;appspot.com.   IN  A

;; ANSWER SECTION:
appspot.com.245 IN  A   173.194.36.141

;; Query time: 89 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Oct 18 08:42:27 2010
;; MSG SIZE  rcvd: 45

maximveks...@maximveksler-desktop:~$ wget appspot.com
--2010-10-18 08:42:31--  http://appspot.com/
Resolving appspot.com... 173.194.36.141
Connecting to appspot.com|173.194.36.141|:80... connected.
HTTP request sent, awaiting response... 404 Not Found
2010-10-18 08:42:32 ERROR 404: Not Found.

maximveks...@maximveksler-desktop:~$ dig appengine.google.com

;  DiG 9.7.1-P2  appengine.google.com
;; global options: +cmd
;; Got answer:
;; -HEADER- opcode: QUERY, status: NOERROR, id: 55756
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;appengine.google.com.  IN  A

;; ANSWER SECTION:
appengine.google.com.   85115   IN  CNAME   www3.l.google.com.
www3.l.google.com.  300 IN  A   173.194.36.100

;; Query time: 97 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Mon Oct 18 08:42:37 2010
;; MSG SIZE  rcvd: 75

maximveks...@maximveksler-desktop:~$ wget appengine.google.com
--2010-10-18 08:42:45--  http://appengine.google.com/
Resolving appengine.google.com... 173.194.36.100
Connecting to appengine.google.com|173.194.36.100|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location:
https://www.google.com/accounts/ServiceLogin?service=ahcontinue=https://appengine.google.com/_ah/login%3Fcontinue%3Dhttps://appengine.google.com/ltmpl=aesig=c24697718eec1be75b7ab8f8a0c02416[following]
--2010-10-18 08:42:46--
https://www.google.com/accounts/ServiceLogin?service=ahcontinue=https://appengine.google.com/_ah/login%3Fcontinue%3Dhttps://appengine.google.com/ltmpl=aesig=c24697718eec1be75b7ab8f8a0c02416
Resolving www.google.com... 173.194.36.104
Connecting to www.google.com|173.194.36.104|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 13852 (14K) [text/html]
Saving to: `index.html.1'

100%[==]
13,852  --.-K/s   in 0.1s

2010-10-18 08:42:46 (99.4 KB/s) - `index.html.1' saved [13852/13852]

-- 
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] Running both Python and Java at the same time?

2010-10-17 Thread Maxim Veksler
You absolutely can.

Just make sure you use different versions of the application.

Then you will hit your application like:

http://j-0-0-17.latest.APPNAME.appspot.com/
http://p-0-0-17.latest.APPNAME.appspot.com/

Pay attention to the little drop down box in the console at
appengine.google.com, logs from the application will vary based on the
version (I was wondering why I don't see logs from the staging version I
just deployed...)

Also pay attention to the fact that you will always have single default
version available from APPNAME.appspot.com, this too can vary from python to
java.

HTH


Maxim.

On Sun, Oct 17, 2010 at 7:23 PM, Dieter Krachtus 
dieter.krach...@googlemail.com wrote:

 I run Python code on appengine. Now I would like to add some
 functionality written in Java. I guess I cannot run this on the same
 appengine?

 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-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] [SOLVED] Re: Strange exception with my app

2010-10-16 Thread Maxim Veksler
I would very much appreciate if Google would make the effort to release the
Dev SDK a week before pushing it into production service. For all I care,
mark it a backwards comparability check release, and then after a week
release another one that actually allows pushing new versions with this SDK
the are possibly using the new API that were added in this release.

All to make sure our application does not get hit by these corner cases.

For us, have 5 min of downtime carries huge consequences.


Maxim.

On Fri, Oct 15, 2010 at 10:44 AM, nicanor.babula
nicanor.bab...@gmail.comwrote:

 Solved. Looks like appengine sandbox banned sun.dc.* classes too.
 Changed the namespace and now it's up and running.

 On 14 Ott, 18:07, nicanor.babula nicanor.bab...@gmail.com wrote:
  Hi google appengine team,
 
  Since today, I have been getting continuously the exception reported
  below. Yesterday I am not sure, but the day before yesterday it worked
  for sure. I have more apps that use the same library and all of them
  keep throwing the same exception. You can reproduce it uploading this
  xsl file:http://www.4shared.com/file/uefUC7KX/simple.html
  on this servlet:http://almaoffice0.appspot.com/testPDF.jsp
  app id:
  almaoffice0 and domodentweb.
 
  In the development server, everything works fine (just like before).
 
  I need information about the issue pretty fast because the second app
  is a production one and I need to know what decision to take.
 
  Thanks in advance.
 
  Uncaught exception from servlet
  java.lang.NoClassDefFoundError: sun/dc/path/PathException
  at
  org.apache.xmlgraphics.java2d.GraphicContext.init(GraphicContext.java:
  93)
  at
 
 org.apache.fop.render.intermediate.IFGraphicContext.init(IFGraphicContext
 .java:
  42)
  at
  org.apache.fop.render.intermediate.IFRenderer.init(IFRenderer.java:
  127)
  at
 
 org.apache.fop.render.RendererFactory.createRendererForDocumentHandler(Rend
 ererFactory.java:
  313)
  at
 
 org.apache.fop.render.RendererFactory.tryIFDocumentHandlerMaker(RendererFac
 tory.java:
  290)
  at
 
 org.apache.fop.render.RendererFactory.createRenderer(RendererFactory.java:
  270)
  at
 org.apache.fop.area.RenderPagesModel.init(RenderPagesModel.java:
  69)
  at
  org.apache.fop.area.AreaTreeHandler.setupModel(AreaTreeHandler.java:
  130)
  at
 org.apache.fop.area.AreaTreeHandler.init(AreaTreeHandler.java:
  102)
  at
 
 org.apache.fop.render.RendererFactory.createFOEventHandler(RendererFactory.
 java:
  359)
  at org.apache.fop.fo.FOTreeBuilder.init(FOTreeBuilder.java:105)
  at org.apache.fop.apps.Fop.createDefaultHandler(Fop.java:100)
  at org.apache.fop.apps.Fop.init(Fop.java:78)
  at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:254)
  at org.apache.fop.apps.FopFactory.newFop(FopFactory.java:231)
  at
 
 cri.domodentweb.server.servlets.GenUserCalendarMemoPDF.doGet(GenUserCalenda
 rMemoPDF.java:
  166)
  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)
  at
 
 com.google.apphosting.utils.servlet.ParseBlobUploadFilter.doFilter(ParseBlo
 bUploadFilter.java:
  97)
  at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1157)
  at
 
 com.google.apphosting.runtime.jetty.SaveSessionFilter.doFilter(SaveSessionF
 ilter.java:
  35)
  at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1157)
  at
 
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(Trans
 actionCleanupFilter.java:
  43)
  at org.mortbay.jetty.servlet.ServletHandler
  $CachedChain.doFilter(ServletHandler.java:1157)
  at
  org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:
  388)
  at
  org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:
  216)
  at
  org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:
  182)
  at
  org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:
  765)
  at
 org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:
  418)
  at
 
 com.google.apphosting.runtime.jetty.AppVersionHandlerMap.handle(AppVersionH
 andlerMap.java:
  238)
  at
  org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:
  152)
  at org.mortbay.jetty.Server.handle(Server.java:326)
  at
 org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:
  542)
  at org.mortbay.jetty.HttpConnection
  $RequestHandler.headerComplete(HttpConnection.java:923)
  at
 
 

Re: [appengine-java] Re: GAE and Log4j - A little solution to make things easier.

2010-10-13 Thread Maxim Veksler
That's an interesting point. I did not know j.u.l was so slow.

We need google here, to tell us if their implementation of java.util.logging
performance is the same as the vanilla Sun's JVM (don't speak the O name).
If this is the case then It's wise to use logback and live with ERROR / INFO
only, otherwise I think that a wrapper for logback could be developed that
will offload to j.u.l for the log levels.

Maxim.

On Wed, Oct 13, 2010 at 10:54 AM, NickA nick.julie.armstr...@gmail.comwrote:

  Just configuring properly log4j/logback to log to System.err or
  System.out should be enough to see messages properly in the AppEngine
  console.

 That's exactly what I used to do but if you read Eurig's blog, that
 solution doesn't display the correct log levels in the console.

 The trouble that I've had is that if you want to make full use of the
 nice log highlighting GAE supports in its console then all stdout /
 stderr messages will come through as a warning.

 --
 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: GAE and Log4j - A little solution to make things easier.

2010-10-13 Thread Maxim Veksler
Hi Nacho,

The this configuration of logback works for you?

I've tried to do the same, with the following versions of
logback: logback-classic-0.9.24.jar, logback-core-0.9.24.jar,
slf4j-api-1.6.1.jar

With the following configuration of backlog.xml:

cat WEB-INF/classes/logback.xml
configuration
 appender name=STDOUT class=ch.qos.logback.core.ConsoleAppender
  encoder
   !-- pattern%-5level %logger{0} - %msg%n/pattern  --
   pattern%-5level %logger{36} - %msg%n/pattern

  /encoder
  filter class=ch.qos.logback.classic.filter.LevelFilter
   levelERROR/level
   onMatchDENY/onMatch
   onMismatchACCEPT/onMismatch
  /filter
 /appender

 appender name=STDERR class=ch.qos.logback.core.ConsoleAppender
  targetSystem.err/target
  encoder
   pattern%-5level %logger{0} - %msg%n/pattern
  /encoder
  filter class=ch.qos.logback.classic.filter.LevelFilter
   levelERROR/level
   onMatchACCEPT/onMatch
   onMismatchDENY/onMismatch
  /filter
 /appender

 root level=INFO
  appender-ref ref=STDOUT /
  appender-ref ref=STDERR /
 /root


And I'm getting the following exception when my code tries to create a new
Logger:

Failed to instantiate [ch.qos.logback.classic.LoggerContext]
Reported exception:
java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class.
Please see the Google  App Engine developer's guide for more details.
 at
com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
at
ch.qos.logback.core.util.ContextUtil.getLocalHostName(ContextUtil.java:30)
 at
ch.qos.logback.core.util.ContextUtil.addHostNameAsProperty(ContextUtil.java:39)
at
ch.qos.logback.classic.joran.action.ConfigurationAction.begin(ConfigurationAction.java:47)
 at
ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:273)
at
ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
 at
ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:127)
at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:40)
 at ch.qos.logback.core.joran.spi.Interpreter.play(Interpreter.java:332)
at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:126)
 at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:93)
at
ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
 at
ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
at
ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
 at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
at org.slf4j.impl.StaticLoggerBinder.clinit(StaticLoggerBinder.java:55)
 at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
 at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
 at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
at ..clinit(.)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
 at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
 at java.lang.Class.newInstance0(Class.java:355)
at java.lang.Class.newInstance(Class.java:308)
 at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
at
org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
 at
org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
 at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at
com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
 at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
 at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at
com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
 at
org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
 at
org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
 at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
 at
com.google.apphosting.utils.jetty.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:70)
at 

Re: [appengine-java] Re: GAE and Log4j - A little solution to make things easier.

2010-10-13 Thread Maxim Veksler
I have opened a bug in backlog JIRA on this issue, which contains a work
around for this exception.
People are encouraged to vote on this issue
http://jira.qos.ch/browse/LBCORE-171

Maxim.

On Wed, Oct 13, 2010 at 6:18 PM, Maxim Veksler ma...@vekslers.org wrote:

 Hi Nacho,

 The this configuration of logback works for you?

 I've tried to do the same, with the following versions of
 logback: logback-classic-0.9.24.jar, logback-core-0.9.24.jar, 
 slf4j-api-1.6.1.jar

 With the following configuration of backlog.xml:

 cat WEB-INF/classes/logback.xml
 configuration
  appender name=STDOUT class=ch.qos.logback.core.ConsoleAppender
   encoder
!-- pattern%-5level %logger{0} - %msg%n/pattern  --
pattern%-5level %logger{36} - %msg%n/pattern

   /encoder
   filter class=ch.qos.logback.classic.filter.LevelFilter
levelERROR/level
onMatchDENY/onMatch
onMismatchACCEPT/onMismatch
   /filter
  /appender

  appender name=STDERR class=ch.qos.logback.core.ConsoleAppender
   targetSystem.err/target
   encoder
pattern%-5level %logger{0} - %msg%n/pattern
   /encoder
   filter class=ch.qos.logback.classic.filter.LevelFilter
levelERROR/level
onMatchACCEPT/onMatch
onMismatchDENY/onMismatch
   /filter
  /appender

   root level=INFO
   appender-ref ref=STDOUT /
   appender-ref ref=STDERR /
  /root


 And I'm getting the following exception when my code tries to create a new
 Logger:

 Failed to instantiate [ch.qos.logback.classic.LoggerContext]
 Reported exception:
 java.lang.NoClassDefFoundError: java.net.InetAddress is a restricted class.
 Please see the Google  App Engine developer's guide for more details.
  at
 com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:51)
 at
 ch.qos.logback.core.util.ContextUtil.getLocalHostName(ContextUtil.java:30)
  at
 ch.qos.logback.core.util.ContextUtil.addHostNameAsProperty(ContextUtil.java:39)
 at
 ch.qos.logback.classic.joran.action.ConfigurationAction.begin(ConfigurationAction.java:47)
  at
 ch.qos.logback.core.joran.spi.Interpreter.callBeginAction(Interpreter.java:273)
 at
 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:145)
  at
 ch.qos.logback.core.joran.spi.Interpreter.startElement(Interpreter.java:127)
 at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:40)
  at ch.qos.logback.core.joran.spi.Interpreter.play(Interpreter.java:332)
 at
 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:126)
  at
 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:93)
 at
 ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:52)
  at
 ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:77)
 at
 ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85)
 at org.slf4j.impl.StaticLoggerBinder.clinit(StaticLoggerBinder.java:55)
  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:121)
 at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:111)
  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:268)
 at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:241)
  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:254)
 at ..clinit(.)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at
 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
  at
 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
 at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
  at java.lang.Class.newInstance0(Class.java:355)
 at java.lang.Class.newInstance(Class.java:308)
  at org.mortbay.jetty.servlet.Holder.newInstance(Holder.java:153)
 at
 org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:428)
  at
 org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
 at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
  at
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
 at
 com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:58)
  at
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
 at
 com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:43)
  at
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
 at
 com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:122)
  at
 org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
 at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
  at
 org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216

Re: [appengine-java] Is MemcacheService obtained from getMemcacheService(namespace) thread safe?

2010-10-12 Thread Maxim Veksler
Great, thank you for clarifying this.

Perhaps It would be helpful to mention this in the javadoc ?
Or maybe introduce some kind of @ThreadSafe annotation
with RetentionPolicy.SOURCE ?


Thanks,
Maxim.

On Mon, Oct 11, 2010 at 9:10 PM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 Yes. It's just a client.

 If you're really worried about this, you don't really save much by doing
 this, however, since the only real cost is object allocation.

 --
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 Blogger: http://googleappengine.blogspot.com
 Reddit: http://www.reddit.com/r/appengine
 Twitter: http://twitter.com/app_engine



 On Mon, Oct 11, 2010 at 5:01 AM, Maxim Veksler ma...@vekslers.org wrote:

 Hi,

 Well the title pretty much says it all.

 Is the memcache low level interface of AppEngine Java SDK thread safe? I
 would like to hold a reference to it in a static class level reference
 field.


 Thanks,
 Maxim.

 --
 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.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: API CRUD interface for application ?

2010-10-11 Thread Maxim Veksler
Hi Didler,

This is a bit off topic from the main discussion I was hoping to have on
this thread but still: Objectify is an over kill *for our needs*. It's
faster for us to simply wrap calls to low level DataStore in
LowLevelDataStore.java calls we make (which return an
Entity, ListKey, IterableEntity and co.) in a Repository.java that
transforms them into application POJO then use Objectify for this which we
will need to register the classes and pass through the Objectify
abstraction.

Objectify, Twig itself are great libraries and we are using them in GUI apps
that are running on the app engine.

Maxim.

On Mon, Oct 11, 2010 at 10:01 AM, Didier Durand durand.did...@gmail.comwrote:

 Hi Maxim,

 When you say Objectify is overkill,what do you mean ? Did you
 benchmark it ?

 I switched ito it from JDO and I am pretty satisfied: slick and fast.
 What is bad about it from your perspective ?
 regards
 didier

 On Oct 10, 11:28 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hello,
 
  The application we run is a backend online service and has no GUI.
  We some how need to be able to upload new content / update existing
  datastore entity records.
 
  The database model is relatively simple: 1 to many relationships on all
 of
  the kinds.
 
  I would be happy to use learn about a library / some API configuration
  option to expose an interface so that external code can do the CRUD
 logic.
  Is there any support for this in GAE / other library that runs on GAE?
 
  If this plays any role in your suggestions:
  We're super focused on response times so: We currently use low level
 data
  store API.
  I actually tried Objectify but found even it to be an over kill for our
  needs.
  I also deleted all the jars the were added by GAE eclipse plugin but are
 not
  used by the code.
 
  Actually the list of jars used by the application consists of:
 
  ls war/WEB-INF/lib/
  appengine-api-1.0-sdk-1.3.7.jar  appengine-jsr107cache-1.3.7.jar
   jackson-core-asl-1.6.0.jarjsr107cache-1.1.jar
  appengine-api-labs-1.3.7.jar EyeViewUtils-1.0.1-SNAPSHOT.jar
   jackson-mapper-asl-1.6.0.jar  log4j-1.2.16.jar
 
  Any recommendations / personal experience with this issue / pointers
 about
  correct design of the interface / what technology to use and co. are
 highly
  welcome and appreciated.
 
  Thank you,
  Maxim.

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



[appengine-java] Is MemcacheService obtained from getMemcacheService(namespace) thread safe?

2010-10-11 Thread Maxim Veksler
Hi,

Well the title pretty much says it all.

Is the memcache low level interface of AppEngine Java SDK thread safe? I
would like to hold a reference to it in a static class level reference
field.


Thanks,
Maxim.

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



[appengine-java] API CRUD interface for application ?

2010-10-10 Thread Maxim Veksler
Hello,

The application we run is a backend online service and has no GUI.
We some how need to be able to upload new content / update existing
datastore entity records.

The database model is relatively simple: 1 to many relationships on all of
the kinds.

I would be happy to use learn about a library / some API configuration
option to expose an interface so that external code can do the CRUD logic.
Is there any support for this in GAE / other library that runs on GAE?


If this plays any role in your suggestions:
We're super focused on response times so: We currently use low level data
store API.
I actually tried Objectify but found even it to be an over kill for our
needs.
I also deleted all the jars the were added by GAE eclipse plugin but are not
used by the code.

Actually the list of jars used by the application consists of:

ls war/WEB-INF/lib/
appengine-api-1.0-sdk-1.3.7.jar  appengine-jsr107cache-1.3.7.jar
 jackson-core-asl-1.6.0.jarjsr107cache-1.1.jar
appengine-api-labs-1.3.7.jar EyeViewUtils-1.0.1-SNAPSHOT.jar
 jackson-mapper-asl-1.6.0.jar  log4j-1.2.16.jar



Any recommendations / personal experience with this issue / pointers about
correct design of the interface / what technology to use and co. are highly
welcome and appreciated.

Thank you,
Maxim.

-- 
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: App Engine and IP Addresses

2010-10-10 Thread Maxim Veksler
Exactly.

Use https://addons.mozilla.org/en-US/firefox/addon/6647/ to see what headers
your browser send as part of the HTTP GET request and emulate them in C
code.

Should work :).

On Sat, Oct 9, 2010 at 11:45 PM, Peter Ondruska peter.ondru...@gmail.comwrote:

 When connecting to IP address you need to use HTTP host header so that
 GAE knows which application/virtual server you want.

 On Oct 9, 6:26 pm, Benjamin bsaut...@gmail.com wrote:
  I've been working on a challenge over the past couple of days and I
  could really use a knowledge transfer on App Engine, Domains and IP
  addresses. I seem to be missing something.
 
  I'm trying to write a library for Arduino Micro-controllers to do HTTP
  Posts to a servlet hosted on appengine. For example The URL of the
  servlet is
 
  http://nimbits1.appspot.com/service/currentvalue?point=testformat=json
 
  Do to limitations on the Arduino device, i need to get an IP Address
  that will resolve to nimbits1.appspot.com first, before doing my post
  to /service/currentvalue?point=testformat=json
 
  I have the C code to request an IP from DNS of a domain which works
  without a problem. So far so good. My problem is my requests seem to
  hit a brick wall when I try to use the IP instead of the Domain in my
  requests.
 
  Let's say I ping nimbits1.appspot.com - I get 74.125.113.121 or
  72.14.204.141 back from the DNS Server. This takes me to Google
  servers, but not my app. I'm guessing that the server want the
  subdomain in the request but i'm not provided one.
 
  I registered a new domain: nimbits.org on godaddy and followed Nick
  Johnson's fine tutorial on mapping naked domains to have nimbits.org
  redirect to nimbits1.appspot.com (As a permanent redirect without
  masking)
 
  http://blog.notdot.net/2009/12/Naked-domains-on-App-Engine
 
  if i navigate tohttp://nimbits.org I redirect ok tohttp://
 nimbits1.appspot.com
 
  Further, if i do a wget in a linux terminal I can see the IP's i'm
  resolving to:
 
  benja...@ben-ubws01:~$ wget nimbits.org
  --2010-10-09 12:20:43--  http://nimbits.org/
  Resolving nimbits.org... 64.202.189.170
  Connecting to nimbits.org|64.202.189.170|:80... connected.
  HTTP request sent, awaiting response... 301 Moved Permanently
  Location:http://nimbits1.appspot.com[following]
  --2010-10-09 12:20:44--  http://nimbits1.appspot.com/
  Resolving nimbits1.appspot.com... 64.233.169.141
  Connecting to nimbits1.appspot.com|64.233.169.141|:80... connected.
  HTTP request sent, awaiting response... 200 OK
  Length: unspecified [text/html]
  Saving to: `index.html.10'
 
  [ =   ] 3,376   --.-K/s   in
  0.003s
 
  2010-10-09 12:20:44 (1.18 MB/s) - `index.html.10' saved [3376]
 
  If i try and navigate to any of the above IP Addresses i.ehttp://
 64.233.169.141
  I endup on google or godaddy, but not my app.
 
  Any help would be greatly appriciated. I may have to resort to having
  users point their arduino to an internal web server that can forward
  the request, but having arduino devices post directly to app engine
  would be very cool.
 
  -Ben

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



[appengine-java] Is DatastoreService thread safe ?

2010-10-05 Thread Maxim Veksler
Hi,

Can I do something like this:

public class LowLevelDataStore {
private static DatastoreService datastore;
 private static FetchOptions LIMIT_1 = FetchOptions.Builder.withLimit(1);
static {
 datastore = DatastoreServiceFactory.getDatastoreService(withReadPolicy(new
ReadPolicy(Consistency.EVENTUAL)));
}

public static IterableEntity getFOO(...) {
Query query... =
 new Query(...)
.addFilter(..., FilterOperator.EQUAL, ...)
 .addSort(..., SortDirection.ASCENDING);
 return datastore.prepare(query...).asIterable();
 }
}

Assuming I won't be using transactions ?
Assuming I will be using transactions?

Couldn't find any clues in the javadoc / googling does not give meaningful
results as well.


Thank you,
Maxim.

-- 
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 Maxim Veksler
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

http://code.google.com/appengine/docs/python/tools/uploadingdata.htmlShould
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 ?


Thank you for the help,
Maxim.

On Mon, Oct 4, 2010 at 10:03 PM, Peter Ondruska peter.ondru...@gmail.comwrote:

 Just define entity properties with indexed=False, e.g.

 class Authorization(db.Model):
  domain = db.StringProperty(required=True)
  code = db.StringProperty(required=True, indexed=False)   # 
  update = db.DateTimeProperty(required=True, auto_now_add=True)

 and then bulkload

 On Oct 4, 6:26 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hello,
 
  I would like to disable indexing for properties I know I won't be using
 for
  query filtering to save storage space.
 
  I have used bulkuploader to push ~500mb of data into the datastore. These
  Entities contain lot's of properties which won't be used for filtering,
 for
  ex. CountryName
  I would like to exclude these properties from the indexing, and purge the
  existing index.
 
  Not sure about how datastore works, so I'll ask all my questions at once:
 
  Can I disable indexing for properties or does single property indexes
 always
  created without me being able to control it?
  Can tell app engine to truncate existing index and not recreate it (to
  reclaim the disk space) ?
  Can I retrospectively upload an index.yaml file (I did not had this file
  before) to delete the unneeded indexes created?
  Will this index.yaml configuration will take effect on my next bulkupload
  operation as well?
 
  Thanks for helping,
  Maxim.
 
  [1]
 http://code.google.com/appengine/docs/java/configyaml/indexconfig.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.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: Is DatastoreService thread safe ?

2010-10-05 Thread Maxim Veksler
Thank you.

On Tue, Oct 5, 2010 at 3:55 PM, Didier Durand durand.did...@gmail.comwrote:

 Hello,

 See
 http://groups.google.com/group/google-appengine-java/browse_thread/thread/e19b792042b2ff9b

 and
 http://groups.google.com/group/google-appengine-java/tree/browse_frm/month/2010-04/8de23dea7100c586

 didier

 On Oct 5, 2:38 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hi,
 
  Can I do something like this:
 
  public class LowLevelDataStore {
  private static DatastoreService datastore;
   private static FetchOptions LIMIT_1 = FetchOptions.Builder.withLimit(1);
  static {
   datastore =
 DatastoreServiceFactory.getDatastoreService(withReadPolicy(new
  ReadPolicy(Consistency.EVENTUAL)));
 
  }
 
  public static IterableEntity getFOO(...) {
  Query query... =
   new Query(...)
  .addFilter(..., FilterOperator.EQUAL, ...)
   .addSort(..., SortDirection.ASCENDING);
   return datastore.prepare(query...).asIterable();
   }
 
  }
 
  Assuming I won't be using transactions ?
  Assuming I will be using transactions?
 
  Couldn't find any clues in the javadoc / googling does not give
 meaningful
  results as well.
 
  Thank you,
  Maxim.

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



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

2010-10-04 Thread Maxim Veksler
Hello,

I would like to disable indexing for properties I know I won't be using for
query filtering to save storage space.

I have used bulkuploader to push ~500mb of data into the datastore. These
Entities contain lot's of properties which won't be used for filtering, for
ex. CountryName
I would like to exclude these properties from the indexing, and purge the
existing index.

Not sure about how datastore works, so I'll ask all my questions at once:

Can I disable indexing for properties or does single property indexes always
created without me being able to control it?
Can tell app engine to truncate existing index and not recreate it (to
reclaim the disk space) ?
Can I retrospectively upload an index.yaml file (I did not had this file
before) to delete the unneeded indexes created?
Will this index.yaml configuration will take effect on my next bulkupload
operation as well?

Thanks for helping,
Maxim.

[1] http://code.google.com/appengine/docs/java/configyaml/indexconfig.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] GAE and Log4j - A little solution to make things easier.

2010-10-03 Thread Maxim Veksler
That's wonderful. Thank you.
On Oct 3, 2010 6:14 PM, Eurig Jones eurigjo...@gmail.com wrote:
 Hey,

 I've written a Log4j appender which passes on log4j severity levels to
 GAE's JUL framework so you can view your log4j events (or the events
 your chosen framework provides) if you need to.


http://androidisland.blogspot.com/2010/10/gae-and-log4j-getting-them-to-work-bit.html

 This is a quick implementation of this Appender for me and so far it
 works, but I'd love to hear some feedback about what it doesn't do (or
 doesn't do properly) as I've not used it in anger.

 Regards,
 Eurig Jones

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



[appengine-java] How to do Mocking on GAE development server ?

2010-09-19 Thread Maxim Veksler
Hello,

I've tried to do this:

package com.FOO.madservice.servlet.mock;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import static org.mockito.Mockito.*;

@SuppressWarnings(serial)
public class BAR2ServletMock extends HttpServlet {
 ...
protected HttpServletRequest requestFilter(HttpServletRequest req) {
 HttpServletRequest servletRequest = spy(req);

doReturn(gzip,
deflate).when(servletRequest).getHeader(header-name-goes-here);
 doReturn(174.30.216.4).when(servletRequest).getRemoteAddr();
 return servletRequest;
 }
 ...
}

I'm trying to mock the data in the HTTPRequest object.

On Eclipse using GAE Eclipse pluging 1.3.7, this fails with the following
error:

java.lang.NoClassDefFoundError: sun.reflect.ReflectionFactory is a
restricted class. Please see the Google  App Engine developer's guide for
more details.


Can I disable checking for classes white list on development server?
What other mocking alternatives should I examine?


Thank you,
Maxim.

-- 
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: Does AppEngine recycle threads (Is using ThreadLocal considered good practice on the GAE?)

2010-09-16 Thread Maxim Veksler
I didn't say multi threaded.

ThreadLocal gives access to the cached object of the current thread.
I'm doing an assumption here that appengine/j is implemented with thread per
incoming request.

What I would like to know is if these threads are recycled (in which case
ThreadLocal is a good approach) or not.

Thanks,
Maxim.

On Thu, Sep 16, 2010 at 6:17 AM, Didier Durand durand.did...@gmail.comwrote:

 Hi Maxim,

 Multi-threading is not the way to go under GAEJ, see
 http://code.google.com/appehttp://code.google.com/appengine/docs/java/runtime.html#The_Sandbox

*I didn't say multi threaded. *

ngine/docs/java/runtime.html#The_Sandboxhttp://code.google.com/appengine/docs/java/runtime.html#The_Sandbox

 The right way to go is Tasks:
 http://code.google.com/appengine/docs/java/taskqueue/overview.html

 regards

 didier

 On Sep 15, 2:00 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hello,
 
  I'm wondering (after some internal discussion we had) is using
 ThreadLocal
  for applications running on the AppEngine is performance beneficial ?
 
  For this to work AppEngine should recycle threads, right?
 
  Another question is how many threads does the appengine allows per JVM ?
  Such ThreadLocal based approach would (probably) be inefficient if the
 JVM
  allowed 2 threads.
 
  Help is appreciated.
  Maxim.

 --
 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: Does AppEngine recycle threads (Is using ThreadLocal considered good practice on the GAE?)

2010-09-16 Thread Maxim Veksler
I would like to cache a not thread safe object, I'm hoping to improve
performance by caching it instead of instantiating new instance per request.

Thanks,
Maxim.

On Thu, Sep 16, 2010 at 8:12 AM, Guillaume Laforge glafo...@gmail.comwrote:

 What kind of data or information do you want to share through thread-locals
 between threads/requests?

 On Thu, Sep 16, 2010 at 08:04, Maxim Veksler ma...@vekslers.org wrote:

 I didn't say multi threaded.

 ThreadLocal gives access to the cached object of the current thread.
 I'm doing an assumption here that appengine/j is implemented with thread
 per incoming request.

 What I would like to know is if these threads are recycled (in which case
 ThreadLocal is a good approach) or not.

 Thanks,
 Maxim.

 On Thu, Sep 16, 2010 at 6:17 AM, Didier Durand 
 durand.did...@gmail.comwrote:

 Hi Maxim,

 Multi-threading is not the way to go under GAEJ, see
 http://code.google.com/appehttp://code.google.com/appengine/docs/java/runtime.html#The_Sandbox

 *I didn't say multi threaded. *

 ngine/docs/java/runtime.html#The_Sandboxhttp://code.google.com/appengine/docs/java/runtime.html#The_Sandbox

 The right way to go is Tasks:
 http://code.google.com/appengine/docs/java/taskqueue/overview.html

 regards

 didier

 On Sep 15, 2:00 pm, Maxim Veksler ma...@vekslers.org wrote:
  Hello,
 
  I'm wondering (after some internal discussion we had) is using
 ThreadLocal
  for applications running on the AppEngine is performance beneficial ?
 
  For this to work AppEngine should recycle threads, right?
 
  Another question is how many threads does the appengine allows per JVM
 ?
  Such ThreadLocal based approach would (probably) be inefficient if the
 JVM
  allowed 2 threads.
 
  Help is appreciated.
  Maxim.

 --
 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/google-appengine-java?hl=en.




 --
 Guillaume Laforge
 Groovy Project Manager
 Head of Groovy Development at SpringSource
 http://www.springsource.com/g2one

 --
 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: Does AppEngine recycle threads (Is using ThreadLocal considered good practice on the GAE?)

2010-09-16 Thread Maxim Veksler
Thank you Ikai.

It's perfectly clear the JVM's spin up / down (and to the sides at some
strange corner cases :)

Is it possible to share the amount of threads a typical JVM running on up
appengine is configured to launch?
That would help me plan better, because if I have a class that eats 0.5MB of
heap (theoretically, I'm more like 1-5k) . Then if each JVM has a maximum of
2000 threads it's OK but if each JVM get's 2 threads then this design
won't do.

Appreciate your comments.

Thank you,
Maxim.

On Thu, Sep 16, 2010 at 4:07 PM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 You can store data in ThreadLocal as a cache, but it will be extremely
 volatile, especially if we spin up/spin down instances. It's fine to use
 this to cache data that you can easily regenerate. Just be aware that if you
 hit memory limits, we will cull and restart that instance.


 On Thu, Sep 16, 2010 at 12:50 PM, Francois Masurel fm2...@mably.comwrote:

 Each app instance runs in its own JVM.  So it should be safe to cache
 data in ThreadLocal.

 On 16 sep, 09:08, Maxim Veksler ma...@vekslers.org wrote:
  I would like to cache a not thread safe object, I'm hoping to improve
  performance by caching it instead of instantiating new instance per
 request.
 
  Thanks,
  Maxim.
 
  On Thu, Sep 16, 2010 at 8:12 AM, Guillaume Laforge glafo...@gmail.com
 wrote:
 
 
 
   What kind of data or information do you want to share through
 thread-locals
   between threads/requests?
 
   On Thu, Sep 16, 2010 at 08:04, Maxim Veksler ma...@vekslers.org
 wrote:
 
   I didn't say multi threaded.
 
   ThreadLocal gives access to the cached object of the current thread.
   I'm doing an assumption here that appengine/j is implemented with
 thread
   per incoming request.
 
   What I would like to know is if these threads are recycled (in which
 case
   ThreadLocal is a good approach) or not.
 
   Thanks,
   Maxim.
 
   On Thu, Sep 16, 2010 at 6:17 AM, Didier Durand 
 durand.did...@gmail.comwrote:
 
   Hi Maxim,
 
   Multi-threading is not the way to go under GAEJ, see
  http://code.google.com/appe
 http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox
 
   *I didn't say multi threaded. *
 
   ngine/docs/java/runtime.html#The_Sandbox
 http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox
 
   The right way to go is Tasks:
  http://code.google.com/appengine/docs/java/taskqueue/overview.html
 
   regards
 
   didier
 
   On Sep 15, 2:00 pm, Maxim Veksler ma...@vekslers.org wrote:
Hello,
 
I'm wondering (after some internal discussion we had) is using
   ThreadLocal
for applications running on the AppEngine is performance
 beneficial ?
 
For this to work AppEngine should recycle threads, right?
 
Another question is how many threads does the appengine allows per
 JVM
   ?
Such ThreadLocal based approach would (probably) be inefficient if
 the
   JVM
allowed 2 threads.
 
Help is appreciated.
Maxim.
 
   --
   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.comgoogle-appengine-java%2B
 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.comgoogle-appengine-java%2B
 unsubscr...@googlegroups.com
   .
   For more options, visit this group at
  http://groups.google.com/group/google-appengine-java?hl=en.
 
   --
   Guillaume Laforge
   Groovy Project Manager
   Head of Groovy Development at SpringSource
  http://www.springsource.com/g2one
 
   --
   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.comgoogle-appengine-java%2B
 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

Re: [appengine-java] Re: Does AppEngine recycle threads (Is using ThreadLocal considered good practice on the GAE?)

2010-09-16 Thread Maxim Veksler
Agreed.

Thanks for the help.


Maxim.

On Thu, Sep 16, 2010 at 4:38 PM, Ikai Lan (Google)
ikai.l+gro...@google.comikai.l%2bgro...@google.com
 wrote:

 No, there's no control over this. It's a bit of an overoptimization right
 now, wouldn't you say? I'd put it into production first before seeing how
 much I'd need it.

 On Thu, Sep 16, 2010 at 9:36 AM, Maxim Veksler ma...@vekslers.org wrote:

 Thank you Ikai.

 It's perfectly clear the JVM's spin up / down (and to the sides at some
 strange corner cases :)

 Is it possible to share the amount of threads a typical JVM running on up
 appengine is configured to launch?
 That would help me plan better, because if I have a class that eats 0.5MB
 of heap (theoretically, I'm more like 1-5k) . Then if each JVM has a maximum
 of 2000 threads it's OK but if each JVM get's 2 threads then this design
 won't do.

 Appreciate your comments.

 Thank you,
 Maxim.

 On Thu, Sep 16, 2010 at 4:07 PM, Ikai Lan (Google) 
 ikai.l+gro...@google.com ikai.l%2bgro...@google.com wrote:

 You can store data in ThreadLocal as a cache, but it will be extremely
 volatile, especially if we spin up/spin down instances. It's fine to use
 this to cache data that you can easily regenerate. Just be aware that if you
 hit memory limits, we will cull and restart that instance.


 On Thu, Sep 16, 2010 at 12:50 PM, Francois Masurel fm2...@mably.comwrote:

 Each app instance runs in its own JVM.  So it should be safe to cache
 data in ThreadLocal.

 On 16 sep, 09:08, Maxim Veksler ma...@vekslers.org wrote:
  I would like to cache a not thread safe object, I'm hoping to improve
  performance by caching it instead of instantiating new instance per
 request.
 
  Thanks,
  Maxim.
 
  On Thu, Sep 16, 2010 at 8:12 AM, Guillaume Laforge 
 glafo...@gmail.comwrote:
 
 
 
   What kind of data or information do you want to share through
 thread-locals
   between threads/requests?
 
   On Thu, Sep 16, 2010 at 08:04, Maxim Veksler ma...@vekslers.org
 wrote:
 
   I didn't say multi threaded.
 
   ThreadLocal gives access to the cached object of the current
 thread.
   I'm doing an assumption here that appengine/j is implemented with
 thread
   per incoming request.
 
   What I would like to know is if these threads are recycled (in
 which case
   ThreadLocal is a good approach) or not.
 
   Thanks,
   Maxim.
 
   On Thu, Sep 16, 2010 at 6:17 AM, Didier Durand 
 durand.did...@gmail.comwrote:
 
   Hi Maxim,
 
   Multi-threading is not the way to go under GAEJ, see
  http://code.google.com/appe
 http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox
 
   *I didn't say multi threaded. *
 
   ngine/docs/java/runtime.html#The_Sandbox
 http://code.google.com/appengine/docs/java/runtime.html#The_Sandbox
 
   The right way to go is Tasks:
  http://code.google.com/appengine/docs/java/taskqueue/overview.html
 
   regards
 
   didier
 
   On Sep 15, 2:00 pm, Maxim Veksler ma...@vekslers.org wrote:
Hello,
 
I'm wondering (after some internal discussion we had) is using
   ThreadLocal
for applications running on the AppEngine is performance
 beneficial ?
 
For this to work AppEngine should recycle threads, right?
 
Another question is how many threads does the appengine allows
 per JVM
   ?
Such ThreadLocal based approach would (probably) be inefficient
 if the
   JVM
allowed 2 threads.
 
Help is appreciated.
Maxim.
 
   --
   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.comgoogle-appengine-java%2B
 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.comgoogle-appengine-java%2bunsubscr...@googlegroups.comgoogle-appengine-java%2B
 unsubscr...@googlegroups.com
   .
   For more options, visit this group at
  http://groups.google.com/group/google-appengine-java?hl=en.
 
   --
   Guillaume Laforge
   Groovy Project Manager
   Head of Groovy Development at SpringSource
  http://www.springsource.com/g2one
 
   --
   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.comgoogle-appengine-java%2B
 unsubscr

[appengine-java] [IDEA] Circumventing app engine cold start with a warm up

2010-09-16 Thread Maxim Veksler
Hey Guys,

Just a quick 2.5cent idea.

The current situation for applications running on the app engine is that a
request that causes instance spin up (be it first request, or the unlucky
one in high load) is usually cancelled because of timeout (30s). I'm
observing this situation even for virgin applications that do nothing more
then return Hello World.

Now, what if application developers could define a special API call (much
like mail delivery to the application is handled by GAE) that will be called
when GAE decides to spin yet another instance. This could solve the problem
of requests being canceled in high load while the new JVM instance is
loading. The GAE could allocate a finite amount of time from the warm up
call to the start of request delivery to the new jvm (something like 60
seconds?). The application developers could take advantage of this call
(that will go to the InitServlet) to do start up logic (population of
MemCache, loading static maps from DataStore and co..)

This could be poor's men solution for applications that *should* not lose
requests, even if it's 1/10.

I know about the planned reserved instances feature, don't really see the
logic in this though as this approach doesn't seem to scale well: Say I'm
holding 5 reserved instances. What happens if my requests get a peak... a
truly massive slashdot peak which in theory should require yet another (well
just for ex.) 100 instances? If GAE launches them and instantly starts
forwarding requests to them then, assuming each instance takes 15sec to load
- ~(15sec*95instances*amount of traffic coming in 1 sec)*0.40 requests are
timed out. That's bad.


Comments?

Maxim.

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



[appengine-java] Does AppEngine recycle threads (Is using ThreadLocal considered good practice on the GAE?)

2010-09-15 Thread Maxim Veksler
Hello,

I'm wondering (after some internal discussion we had) is using ThreadLocal
for applications running on the AppEngine is performance beneficial ?

For this to work AppEngine should recycle threads, right?

Another question is how many threads does the appengine allows per JVM ?
Such ThreadLocal based approach would (probably) be inefficient if the JVM
allowed 2 threads.


Help is appreciated.
Maxim.

-- 
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] Random HTTP 500 errors with the RemoteApiServlet

2010-09-15 Thread Maxim Veksler
Hi,

The upload process is problematic (for large data sets) but using splitting
into smaller chunks becomes reasonably bearable.

I'm attaching an email I've sent internally(= raw format) after playing with
bulkupload a bit on Unbuntu 10.04 64bit.
Note: I've used Python 2.6 (It's possibly that this is the root cause of the
problems, as the python sdk designed to work with python 2.5).

-- Forwarded message --
From: Maxim Veksler ma...@vekslers.org
Date: Wed, Sep 1, 2010 at 5:00 PM
Subject: Loading MaxMind GeoIP Country database
To:  ...


Provides below summary of the steps that were required to upload the content
of Maxmind *Country* database to AppEngine data store.

Provided for future reference.
*
*
*Download DB in CSV format from MaxMind*
Download CSV from http://www.maxmind.com/app/geoip_country

*Split the CSV file*
Then we need to split this file into chunks, so we do something like this:

$ mkdir /home/maxim/Downloads/GeoIPCountryWhois_SPLIT
$ mkdir /home/maxim/Downloads/GeoIPCountryWhois_SPLIT/processed
$ cd /home/maxim/Downloads/GeoIPCountryWhois_SPLIT

$ wc -l /home/maxim/Downloads/GeoIPCountryWhois.csv
131578 /home/maxim/Downloads/GeoIPCountryWhois.csv

$ cat /home/maxim/Downloads/GeoIPCountryWhois.csv | chunksplit.sh
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT
WRITING:
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT_001-0001000.csv
WRITING:
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT_0001001-0002000.csv
WRITING:
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT_0002001-0003000.csv
...
...
...
WRITING:
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT_0130001-0131000.csv
WRITING:
/home/maxim/Downloads/GeoIPCountryWhois_SPLIT/SPLIT_0131001-0132000.csv


chunksplit is this little utility script:

$ cat /home/maxim/bin/chunksplit.sh
#!/bin/bash

DST_TEMPLATE=$1

__line_counter=0
BLOCKSIZE=1000

while read line; do
if [[ $(( $__line_counter % $BLOCKSIZE )) == 0 ]]; then
TARGET=$(printf %s_%015d-%015d.csv $DST_TEMPLATE
$((${__line_counter}+1)) $((${__line_counter} + $BLOCKSIZE)))
echo WRITING: $TARGET
#
TARGET=${DST_TEMPLATE}_$((${__line_counter}+1))-$((${__line_counter} +
$BLOCKSIZE)).csv
fi

echo $line  $TARGET
__line_counter=$(($__line_counter + 1))
done

*Upload the file to DataStore*
*
*
*Next we upload the file to our application data store.*
*Note: This is not a stable process: Google sometimes will return
JavaException errors, the script can hang or it's possible that your request
will timeout. Therefor it's important to continue rerunning this command
until all files are moved from /**home/maxim/Downloads/GeoIPCountryWhois_SPLIT
to home/maxim/Downloads/GeoIPCountryWhois_SPLIT/processed*
*
*
*The actual command to execute is:*
*
*

for split in $(find /home/maxim/Downloads/GeoIPCountryWhois_SPLIT/ -maxdepth
1 -name 'SPLIT*' -type f); do
echo WORKING ON $split
 appcfg.py upload_data \
--num_threads=30 --batch_size=100 --bandwidth_limit=500
--rps_limit=50 --http_limit=1000 \
 --config_file=/home/maxim/workspace/FooBar-Python/bulkloader.yaml \
--kind=GeoIPCountryZone \
--filename=$split --url=http://FooBar-staging.appspot.com/remote_api  mv
$split /home/maxim/Downloads/GeoIPCountryWhois_SPLIT/processed;
done

The yaml we are using for the bulkuploader looks like this:

$ cat /home/maxim/workspace/FooBar-Python/bulkloader.yaml
python_preamble:
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.db
- import: re
- import: base64

transformers:
- kind: GeoIPCountryZone
  connector: csv
  connector_options:
column_list: [ip_range_start, ip_range_end, ip_range_n_start,
ip_range_n_end, country_code, country_name]
  property_map:
- property: __key__
  import_template: %(ip_range_start)s-%(ip_range_end)s
- property: ip_range_start
  external_name: ip_range_start
- property: ip_range_end
  external_name: ip_range_end
- property: ip_range_n_start
  external_name: ip_range_n_start
  import_transform: long
- property: ip_range_n_end
  external_name: ip_range_n_end
  import_transform: long
- property: country_code
  external_name: country_code
- property: country_name
  external_name: country_name


-- Forwarded message --
From: Maxim Veksler ma...@vekslers.org
Date: Wed, Sep 1, 2010 at 5:46 PM
Subject: Re: Loading MaxMind GeoIP Country database


Also forgot to mention,

A little hack to keep the sdk for asking you for username  password on each
call to appcfg

ma...@maxim-desktop:/tmp/appengine-python-sdk-1.3.7$ diff -Naur -x '*.pyc'
google_appengine/ /home/maxim/Desktop/sdk/appengine-python-sdk-1.3.7/
diff -Naur -x '*.pyc' google_appengine/google/appengine/tools/bulkloader.py
/home/maxim/Desktop/sdk/appengine-python-sdk-1.3.7/google/appengine/tools/bulkloader.py
--- google_appengine/google/appengine

[appengine-java] Drools Expert 5.1 (http://jboss.org/drools/drools-expert.html)

2010-09-13 Thread Maxim Veksler
Can I run Drools on app engine ?

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