Re: [appengine-java] Lightweight Best performing MVC framework - Recommendation
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?
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?
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)
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
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?
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?
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?
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
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
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
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
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?
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
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
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) ?
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) ?
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) ?
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?
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
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.
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.
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.
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?
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 ?
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?
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 ?
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
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 ?
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
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 ?
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
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.
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 ?
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?)
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?)
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?)
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?)
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
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?)
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
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)
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.