Re: [google-appengine] Re: Google Checkout

2011-03-06 Thread Duong BaTien
Yes, I also applied for the beta program immediately seeing the link. Thanks

BaTien


On Sat, Mar 5, 2011 at 11:14 PM, Jeff Schnitzer j...@infohazard.org wrote:

 Wow, thanks for that link!  This explains why Google Checkout seems
 like abandonware - they're about to roll out a whole new system.  I've
 applied for the beta program.

 Jeff

 On Sat, Mar 5, 2011 at 11:38 AM, Kaan Soral kaanso...@gmail.com wrote:
  Google bought Social Gold, Social Gold was the greatest payment system
  ever, even other payment providers used them, although they could
  implement credit card processing and Paypal themselves
 
  I hope Google In-App Payments keep the simplicity and excellence.
 
 http://checkout.google.com/support/sell/bin/request.py?contact_type=inapp_payment
 
  I have spent a lot of time reading Paypal services, each service was
  missing something for me. Some of them didn't accept credit cards
  directly, some of them didn't support subscriptions, some of them are
  only available to US/Canada companies etc.
  I have filled the form more than a week ago, I also have a very big
  application to show off but I didn't received any reply yet.
 
  On Mar 5, 9:21 am, anton savchuk anton.antoh...@gmail.com wrote:
  Yes, more likely PayPal will be decision.. He really does work..
 
  --
  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-appengine@googlegroups.com.
  To unsubscribe from this group, send email to
 google-appengine+unsubscr...@googlegroups.com.
  For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.
 
 

 --
 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-appengine@googlegroups.com.
 To unsubscribe from this group, send email to
 google-appengine+unsubscr...@googlegroups.com.
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.




-- 
Dr. Duong BaTien
DBGROUPS  BudhNet

-- 
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-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Google Checkout

2011-03-04 Thread Duong BaTien
Hi Jeff:

I will soon have to deal with this issue. It would be nice if you can
document your lesion learned, especially the best practice in regard to
local persistence with Ocjectify. Thanks for your effort and recently
released objectify-3.0x

Duong BaTien
DBGROUPS and BudhNet


On Fri, Mar 4, 2011 at 5:44 PM, Jeff Schnitzer j...@infohazard.org wrote:

 I'm about 80% through with both Google Checkout and Paypal integration
 for a pure-digital service.  I must say, Google Checkout is VERY
 disappointing - it seems to be an abandoned product.

  * The Java SDK doesn't even compile.
  * The binaries don't run on GAE (jaxb issues).
  * The documentation is not very helpful.

 Basically you have to do your own XML processing.  The fact that the
 server must submit to a valid HTTPS callback makes testing a pain in
 the ass - this requirement exists even for the sandbox.  I had to
 proxy through appengine *and* a cloud host ssh tunnel just to get the
 @#$%! payload to my Eclipse dev system.  Overall the whole experience
 feels janky and utterly fails to inspire trust.

 Say what you will about Paypal's evil eye and their confusing product
 line, at least the integration is going fairly smoothly.  It feels
 like 1990s technology but it works.  The most helpful advice I can
 offer:  Forget everything else on their stupid overmarketed website
 and go straight for Web Payments Standard.

 Tirade over.

 Jeff

 On Fri, Mar 4, 2011 at 11:22 AM, Chris Copeland ch...@cope360.com wrote:
  I just recently completed a Google Checkout integration for my GAE app.
 The
  fact that you are on GAE makes no difference except that if you do a
 level 2
  integration you will have to use your app-name.appspot.com URL for the
  callbacks since Google Checkout requires the callback URL to be secure.
 
  All that said, if I had it to do over, I would definitely go with Pay Pal
  (or someone else).  Checkout seems to be an abandoned product within
  Google.  There are long-standing bugs that prevent some users from paying
  and support (even for merchants) is almost nonexistent.
 
  -Chris
 
  On Fri, Mar 4, 2011 at 1:01 PM, anton savchuk anton.antoh...@gmail.com
  wrote:
 
  I see.. thank you. Could you recommend some third-party libraries?
 
  --
  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-appengine@googlegroups.com.
  To unsubscribe from this group, send email to
  google-appengine+unsubscr...@googlegroups.com.
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
  --
  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-appengine@googlegroups.com.
  To unsubscribe from this group, send email to
  google-appengine+unsubscr...@googlegroups.com.
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 

 --
 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-appengine@googlegroups.com.
 To unsubscribe from this group, send email to
 google-appengine+unsubscr...@googlegroups.com.
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.




-- 
Dr. Duong BaTien
DBGROUPS  BudhNet

-- 
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-appengine@googlegroups.com.
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Should I switch to the low level datastore api?

2010-09-11 Thread Duong BaTien
Hi Jeff:

Which version of Objectify you use? I am also happy with Objectify and
it works for me at version 2.2. I start from GAE sample guestbook and
build from there up with Objectify rather than with JDO. I have some
issue with version 2.2.1 and do not have enough time to dig into it. 

Thanks.

Duong BaTien
DBGROUPS and BudhNet

On Sat, 2010-09-11 at 00:58 -0400, Jeff Schwartz wrote:
 I am also using Objectify having switched from the low level api
 because I wanted to codify my schemas (records) in pojos. I have to
 say that I am very happy with both its api and performance. And the
 Objectify commiters are really a nice bunch and very responsive when
 having posted to their board.
 
 On Fri, Sep 10, 2010 at 6:37 PM, mscwd01 mscw...@gmail.com wrote:
 Thanks for your replies.
 
 I took a closer a look at the requests using AppStats and
 found I was
 inadvertently querying entities in a loop. I rectified this
 and now
 request times are anything between 200ms and 450ms with the
 average
 request being about 350ms. I'm guessing this is not too bad?
 
 Also when checking the request time on the main dashboard, the
 times
 are always longer than that given by AppStats, why is this?
 
 Thanks again.
 
 On 10 Sep, 21:59, Ikai L (Google) ika...@google.com wrote:
  I think I can't type today. What I meant to say in my first
 email was there
  may be some performance benefit by switching to the
 low-level API, but the
  overhead introduced by JDO/JPA should be minimal in terms of
 queries and
  writes.
 
 
 
 
 
 
  On Fri, Sep 10, 2010 at 1:50 PM, gholler
 georgehol...@gmail.com wrote:
   I'm on a team that built a JDO app engine project that was
 fairly slow
   and then built a similar project using Objectify.  We were
 very
   pleased with the performance. We were also careful to only
 index
   fields we queried and also let Objectify doing caching for
 us
   automatically.
 
   G
 
   --
   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%2Bunsubscrib
 e...@googlegroups.com
 
   .
   For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
  --
  Ikai Lan
  Developer Programs Engineer, Google App Engine
  Blog:http://googleappengine.blogspot.com
  Twitter:http://twitter.com/app_engine
  Reddit:http://www.reddit.com/r/appengine
 
 --
 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.com.
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.
 
 
 
 
 
 -- 
 --
 Jeff
 
 
 -- 
 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.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 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.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.



Re: [google-appengine] Re: Should I switch to the low level datastore api?

2010-09-11 Thread Duong BaTien
On Sat, 2010-09-11 at 12:32 -0400, Jeff Schwartz wrote:
 They have applied numerous patches since releasing 2.2.1 so you might
 want to download their source, build it  use that lib in your
 projects.

Thanks. will do and Share with the community my finding and/or
debugging.

BaTien

 
 On Sat, Sep 11, 2010 at 11:01 AM, Duong BaTien
 duong.bat...@gmail.com wrote:
 Hi Jeff:
 
 Which version of Objectify you use? I am also happy with
 Objectify and
 it works for me at version 2.2. I start from GAE sample
 guestbook and
 build from there up with Objectify rather than with JDO. I
 have some
 issue with version 2.2.1 and do not have enough time to dig
 into it.
 
 Thanks.
 
 Duong BaTien
 DBGROUPS and BudhNet
 
 On Sat, 2010-09-11 at 00:58 -0400, Jeff Schwartz wrote:
  I am also using Objectify having switched from the low level
 api
  because I wanted to codify my schemas (records) in pojos. I
 have to
  say that I am very happy with both its api and performance.
 And the
  Objectify commiters are really a nice bunch and very
 responsive when
  having posted to their board.
 
  On Fri, Sep 10, 2010 at 6:37 PM, mscwd01 mscw...@gmail.com
 wrote:
  Thanks for your replies.
 
  I took a closer a look at the requests using
 AppStats and
  found I was
  inadvertently querying entities in a loop. I
 rectified this
  and now
  request times are anything between 200ms and 450ms
 with the
  average
  request being about 350ms. I'm guessing this is not
 too bad?
 
  Also when checking the request time on the main
 dashboard, the
  times
  are always longer than that given by AppStats, why
 is this?
 
  Thanks again.
 
  On 10 Sep, 21:59, Ikai L (Google)
 ika...@google.com wrote:
   I think I can't type today. What I meant to say in
 my first
  email was there
   may be some performance benefit by switching to
 the
  low-level API, but the
   overhead introduced by JDO/JPA should be minimal
 in terms of
  queries and
   writes.
  
  
  
  
  
 
   On Fri, Sep 10, 2010 at 1:50 PM, gholler
  georgehol...@gmail.com wrote:
I'm on a team that built a JDO app engine
 project that was
  fairly slow
and then built a similar project using
 Objectify.  We were
  very
pleased with the performance. We were also
 careful to only
  index
fields we queried and also let Objectify doing
 caching for
  us
automatically.
  
G
  
--
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%
 2Bunsubscrib
  e...@googlegroups.com
 
.
For more options, visit this group at
  
 http://groups.google.com/group/google-appengine?hl=en.
  
   --
   Ikai Lan
   Developer Programs Engineer, Google App Engine
   Blog:http://googleappengine.blogspot.com
   Twitter:http://twitter.com/app_engine
   Reddit:http://www.reddit.com/r/appengine
 
  --
  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.com.
  For more options, visit this group at
 
 http://groups.google.com/group/google-appengine?hl=en

Re: [google-appengine] objectify-2.2.1 with GAE-1.3.6

2010-09-05 Thread Duong BaTien
Thanks.

I will repost it in the Objectify group after trying the new GAE-1.3.7
with objectify-2.2.1. The persistence is done on the entity Greeting
which extends the GenericDAO which extends the Objectify DAONase. I do
not even override the DAOBase constructor with OjectifyOpts.

Do not answer this post. Please give me few hours and suggestions in
Objectify group.

BaTien
DBGROUPS and BudhNet

On Sat, 2010-09-04 at 23:06 -0700, Jeff Schnitzer wrote:
 1) Jeff is right, you should post this to the objectify list.  The
 objectify developers don't consistently monitor this list.
 2) When you do, you should post your entity code, not  your generic dao code.
 3) Somehow you're trying to persist a field of type ObjectifyOpts.
 You can't do that.
 
 Jeff
 
 On Sat, Sep 4, 2010 at 6:59 PM, Jeff Schwartz jefftschwa...@gmail.com wrote:
  I believe you should try posting your question at
  objectify-appeng...@googlegroups.com.
 
  On Sat, Sep 4, 2010 at 4:23 PM, Duong BaTien duong.bat...@gmail.com wrote:
 
  Hi:
 
  I upgrade to Objectify-2.1.1 with GAE-1.3.6 and retest the guestbook
  tutorial. I get the exception while persisting the greeting object to
  the datastore. I notice the ObjectifyOpts is new in this 2.1.1 version.
 
  [java] WARNING: /sign
  [java] java.lang.IllegalArgumentException: opts:
  com.googlecode.objectify.ObjectifyOpts is not a supported property type.
  [java] at
 
  com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184)
  [java] at
 
  com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:157)
  [java] at
 
  com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:123)
  [java] at
 
  com.google.appengine.api.datastore.Entity.setUnindexedProperty(Entity.java:300)
  [java] at
 
  com.googlecode.objectify.impl.save.FieldSaver.setEntityProperty(FieldSaver.java:156)
  [java] at
 
  com.googlecode.objectify.impl.save.LeafFieldSaver.saveValue(LeafFieldSaver.java:94)
  [java] at
  com.googlecode.objectify.impl.save.FieldSaver.save(FieldSaver.java:139)
  [java] at
  com.googlecode.objectify.impl.save.ClassSaver.save(ClassSaver.java:110)
  [java] at
  com.googlecode.objectify.impl.Transmog.save(Transmog.java:342)
  [java] at
 
  com.googlecode.objectify.impl.EntityMetadata.toEntity(EntityMetadata.java:230)
  [java] at
  com.googlecode.objectify.impl.ObjectifyImpl.put(ObjectifyImpl.java:195)
  [java] at
  com.budhnet.aas.service.process.GenericDao.put(GenericDao.java:140)
  [java] at
  com.budhnet.aas.service.process.Greeting.storeGreeting(Greeting.java:104)
  [java] at
 
  com.budhnet.aas.service.process.SignGuestbookServlet.doPost(SignGuestbookServlet.java:50)
 
  My constructors of genericDAO are:
 
   @SuppressWarnings(unchecked)
   public GenericDao(){ // DAO without transaction
 super();
 clazz = ((Class) ((ParameterizedType)
  getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
   }
 
   @SuppressWarnings(unchecked)
   public GenericDao(boolean transactional){ // DAO with transaction
 super(transactional);
 clazz = ((Class) ((ParameterizedType)
  getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
   }
 
  and constructors for the greeting are:
 
 public Greeting() { super(); }
 public Greeting(boolean transactional) { super(transactional); }
 
 public Greeting(User author, String content, Date date) {
 this.author = author;
 this.content = content;
 this.date = date;
 clazz = ((Class) ((ParameterizedType)
  getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
 }
 
  The sigGuestbookServlet has:
 
 Greeting greeting = new Greeting(user, content, new Date());
 greeting.storeGreeting();
 
 resp.sendRedirect(/guestbook.jsp);
 
  Any suggested solution?
 
  Thanks
  BaTien
  DBGROUPS and BudhNet
 
 
  --
  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.com.
  For more options, visit this group at
  http://groups.google.com/group/google-appengine?hl=en.
 
 
 
 
  --
  --
  Jeff
 
  --
  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.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 group.
To post to this group, send email to google-appeng...@googlegroups.com

Re: [google-appengine] objectify-2.2.1 with GAE-1.3.6

2010-09-05 Thread Duong BaTien
Thnaks.

I will repost it in the Objectify group after trying the new GAE-1.3.7
with objectify-2.2.1. The persistence is done on the entity Greeting
which extends the GenericDAO which extends the Objectify DAONase. I do
not even override the DAOBase constructor with OjectifyOpts.

Do not answer this post. Please give me few hours and suggestions in
Objectify group.

BaTien
DBGROUPS and BudhNet




On Sat, 2010-09-04 at 21:59 -0400, Jeff Schwartz wrote:
 I believe you should try posting your question at
 objectify-appeng...@googlegroups.com.
 
 On Sat, Sep 4, 2010 at 4:23 PM, Duong BaTien duong.bat...@gmail.com
 wrote:
 Hi:
 
 I upgrade to Objectify-2.1.1 with GAE-1.3.6 and retest the
 guestbook
 tutorial. I get the exception while persisting the greeting
 object to
 the datastore. I notice the ObjectifyOpts is new in this 2.1.1
 version.
 
 [java] WARNING: /sign
 [java] java.lang.IllegalArgumentException: opts:
 com.googlecode.objectify.ObjectifyOpts is not a supported
 property type.
 [java] at
 
 com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184)
 [java] at
 
 com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:157)
 [java] at
 
 com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:123)
 [java] at
 
 com.google.appengine.api.datastore.Entity.setUnindexedProperty(Entity.java:300)
 [java] at
 
 com.googlecode.objectify.impl.save.FieldSaver.setEntityProperty(FieldSaver.java:156)
 [java] at
 
 com.googlecode.objectify.impl.save.LeafFieldSaver.saveValue(LeafFieldSaver.java:94)
 [java] at
 
 com.googlecode.objectify.impl.save.FieldSaver.save(FieldSaver.java:139)
 [java] at
 
 com.googlecode.objectify.impl.save.ClassSaver.save(ClassSaver.java:110)
 [java] at
 com.googlecode.objectify.impl.Transmog.save(Transmog.java:342)
 [java] at
 
 com.googlecode.objectify.impl.EntityMetadata.toEntity(EntityMetadata.java:230)
 [java] at
 
 com.googlecode.objectify.impl.ObjectifyImpl.put(ObjectifyImpl.java:195)
 [java] at
 com.budhnet.aas.service.process.GenericDao.put(GenericDao.java:140)
 [java] at
 
 com.budhnet.aas.service.process.Greeting.storeGreeting(Greeting.java:104)
 [java] at
 
 com.budhnet.aas.service.process.SignGuestbookServlet.doPost(SignGuestbookServlet.java:50)
 
 My constructors of genericDAO are:
 
  @SuppressWarnings(unchecked)
  public GenericDao(){ // DAO without transaction
super();
clazz = ((Class) ((ParameterizedType)
 getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
  }
 
  @SuppressWarnings(unchecked)
  public GenericDao(boolean transactional){ // DAO with
 transaction
super(transactional);
clazz = ((Class) ((ParameterizedType)
 getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
  }
 
 and constructors for the greeting are:
 
public Greeting() { super(); }
public Greeting(boolean transactional)
 { super(transactional); }
 
public Greeting(User author, String content, Date date) {
this.author = author;
this.content = content;
this.date = date;
clazz = ((Class) ((ParameterizedType)
 getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
 
 The sigGuestbookServlet has:
 
Greeting greeting = new Greeting(user, content, new
 Date());
greeting.storeGreeting();
 
resp.sendRedirect(/guestbook.jsp);
 
 Any suggested solution?
 
 Thanks
 BaTien
 DBGROUPS and BudhNet
 
 
 --
 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.com.
 For more options, visit this group at
 http://groups.google.com/group/google-appengine?hl=en.
 
 
 
 
 -- 
 --
 Jeff
 
 
 -- 
 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

[google-appengine] objectify-2.2.1 with GAE-1.3.6

2010-09-04 Thread Duong BaTien
Hi:

I upgrade to Objectify-2.1.1 with GAE-1.3.6 and retest the guestbook
tutorial. I get the exception while persisting the greeting object to
the datastore. I notice the ObjectifyOpts is new in this 2.1.1 version.

 [java] WARNING: /sign
 [java] java.lang.IllegalArgumentException: opts:
com.googlecode.objectify.ObjectifyOpts is not a supported property type.
 [java] at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedSingleValue(DataTypeUtils.java:184)
 [java] at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:157)
 [java] at
com.google.appengine.api.datastore.DataTypeUtils.checkSupportedValue(DataTypeUtils.java:123)
 [java] at
com.google.appengine.api.datastore.Entity.setUnindexedProperty(Entity.java:300)
 [java] at
com.googlecode.objectify.impl.save.FieldSaver.setEntityProperty(FieldSaver.java:156)
 [java] at
com.googlecode.objectify.impl.save.LeafFieldSaver.saveValue(LeafFieldSaver.java:94)
 [java] at
com.googlecode.objectify.impl.save.FieldSaver.save(FieldSaver.java:139)
 [java] at
com.googlecode.objectify.impl.save.ClassSaver.save(ClassSaver.java:110)
 [java] at
com.googlecode.objectify.impl.Transmog.save(Transmog.java:342)
 [java] at
com.googlecode.objectify.impl.EntityMetadata.toEntity(EntityMetadata.java:230)
 [java] at
com.googlecode.objectify.impl.ObjectifyImpl.put(ObjectifyImpl.java:195)
 [java] at
com.budhnet.aas.service.process.GenericDao.put(GenericDao.java:140)
 [java] at
com.budhnet.aas.service.process.Greeting.storeGreeting(Greeting.java:104)
 [java] at
com.budhnet.aas.service.process.SignGuestbookServlet.doPost(SignGuestbookServlet.java:50)

My constructors of genericDAO are:

  @SuppressWarnings(unchecked)
  public GenericDao(){ // DAO without transaction
super();
clazz = ((Class) ((ParameterizedType)
getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
  }

  @SuppressWarnings(unchecked)
  public GenericDao(boolean transactional){ // DAO with transaction
super(transactional);
clazz = ((Class) ((ParameterizedType)
getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
  }

and constructors for the greeting are:

public Greeting() { super(); }
public Greeting(boolean transactional) { super(transactional); }

public Greeting(User author, String content, Date date) {
this.author = author;
this.content = content;
this.date = date;
clazz = ((Class) ((ParameterizedType)
getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}

The sigGuestbookServlet has:

Greeting greeting = new Greeting(user, content, new Date());
greeting.storeGreeting();

resp.sendRedirect(/guestbook.jsp);

Any suggested solution?

Thanks
BaTien
DBGROUPS and BudhNet


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



[google-appengine] paypalx-gae-toolkit with SDK 1.3.5

2010-07-19 Thread Duong BaTien
Hi:

I am trying to compile and runserver of sample PicMart in
paypalx=gae-toolkit with the latest SDK 1.3.5. The comile target is ok
except a warning, the runserver target has error and the access via
http://localhost:8080/ has 403 error Problem accessing FORBIDDEN. Does
anyone have the answer?

Thanks
Duong BaTien
DBGROUPS and BudhNet

Warning for ant javc: 

[javac] /data/picMart/build.xml:112: warning: 'includeantruntime' was
not set, defaulting to build.sysclasspath=last; set to false for
repeatable builds
[javac] Compiling 2 source files
to /data/picMart/war/WEB-INF/classes

BUILD SUCCESSFUL

Error for ant runserver:

datanucleusenhance:
  [enhance] DataNucleus Enhancer (version 1.1.4) : Enhancement of
classes
  [enhance] DataNucleus Enhancer completed with success for 0 classes.
Timings : input=241 ms, enhance=0 ms, total=241 ms. Consult the log for
full details
  [enhance] DataNucleus Enhancer completed and no classes were enhanced.
Consult the log for full details

runserver:
 [java] Jul 19, 2010 8:11:35 AM
com.google.appengine.tools.info.LocalVersionFactory getVersion
 [java] INFO: Could not find API version
from /data/picMart/war/WEB-INF/lib/.svn
 [java] java.util.zip.ZipException: error in opening zip file
 [java] at java.util.zip.ZipFile.open(Native Method)
 [java] at java.util.zip.ZipFile.init(ZipFile.java:114)
 [java] at java.util.jar.JarFile.init(JarFile.java:135)
 [java] at java.util.jar.JarFile.init(JarFile.java:99)
 [java] at
com.google.appengine.tools.util.ApiVersionFinder.findApiVersion(ApiVersionFinder.java:37)
 [java] at
com.google.appengine.tools.info.LocalVersionFactory.getVersion(LocalVersionFactory.java:65)
 [java] at
com.google.appengine.tools.info.UpdateCheck.getLocalVersion(UpdateCheck.java:116)
 [java] at
com.google.appengine.tools.info.UpdateCheck.checkForUpdates(UpdateCheck.java:95)
 [java] at
com.google.appengine.tools.info.UpdateCheck.doNagScreen(UpdateCheck.java:168)
 [java] at
com.google.appengine.tools.info.UpdateCheck.maybePrintNagScreen(UpdateCheck.java:136)
 [java] at com.google.appengine.tools.development.DevAppServerMain
$StartAction.apply(DevAppServerMain.java:150)
 [java] at com.google.appengine.tools.util.Parser
$ParseResult.applyArgs(Parser.java:48)
 [java] at
com.google.appengine.tools.development.DevAppServerMain.init(DevAppServerMain.java:113)
 [java] at
com.google.appengine.tools.development.DevAppServerMain.main(DevAppServerMain.java:89)
 [java] Jul 19, 2010 8:11:38 AM
com.google.apphosting.utils.jetty.JettyLogger info
 [java] INFO: Logging to JettyLogger(null) via
com.google.apphosting.utils.jetty.JettyLogger
 [java] Jul 19, 2010 8:11:38 AM
com.google.apphosting.utils.config.AppEngineWebXmlReader
readAppEngineWebXml
 [java] INFO: Successfully
processed /data/picMart/war/WEB-INF/appengine-web.xml
 [java] Jul 19, 2010 8:11:38 AM
com.google.apphosting.utils.config.AbstractConfigXmlReader readConfigXml
 [java] INFO: Successfully
processed /data/picMart/war/WEB-INF/web.xml
 [java] Jul 19, 2010 8:11:41 AM
com.google.appengine.tools.development.DevAppServerImpl start
 [java] INFO: The server is running at http://localhost:8080/


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



Re: [google-appengine] Re: Google Apps and BigTable

2010-05-24 Thread Duong BaTien
Hi:

This is an interesting topic. I am a retired entrepreneur, professional
software developer, professional economist, economic professor and
professional engineer. I am planning to use cloud technology to
democratize the AwakeningBudh or Innate Intelligence in living persons.

All emotions are conditioned driven by your view (Understanding) and
motive (Volitional Formation) which are driven by Binding Thoughts.
There is binding and detachment-born thought in a sense that once a
thought and its action is completed, there is No Hanging Effect known by
many Loving-Kindness Samaritan while the binding though will
continuously haunt one's conscience (which is a part of the Innate Budh)
until one's Innate Budh is awaken and do something about it. Binding
Thought is a slavery pattern (fears, phobias, innumerable unmanageable
desires of the grasper and the grasped, etc) while detachment-born
thought enables one see Thing As It Is, outside the conditioned box of
slavery bounded in the Name of Anything. Thought is conditioned. When I
call your name you can answer right away. When I ask if you know so and
so over 40 years ago, you may take some time to recall. If thought is
conditioned, what is the Source of Thought?

That is the Innate Budh (Intelligence) that we prove it is a Sine Qua
Non of Living, since without some form of Intelligence, there is No
Living. It is an Observable Truth or mathematical axiom. From that
Observable Truth like Newton Third Law of Action and Reaction, one can
discover a process according to natural laws (like gravity force)
leading the Right Living toward Happiness and Evolution where
Dependent Nature is a part of the natural laws governing all processes
from gross manifestations to minute level of a thought. That Dependent
Nature enables one see Thing As It Is where 1 + 1  2 (a win-win
Strategic Moment), symbolized in 2 Knights on the same horse in the
symbol of Knights Templar. Greed and Passion are transformed into
Sharing Happiness - Mitigating Sufferings called ComPassion (or Common
Vibration of Energy) of one's Inner Circle and circles of inner circles.

Via democratizing the AwakeningBudh, one can see the Inner Dignity of
Living and have the Right Understanding and Right Thought to be a part
of the Crowd Wisdom that no tyranny and extreme dark force of violence,
of To me Through Me and Only Me in the past can be repeated. Software
open source is a movement toward that direction.

Hope each one of us can be a soldier of Sharing Happiness - Mitigating
Sufferings that go beyond the symbol of Tao's Yin-Yang of Evolution then
Degeneration.

Duong BaTien
DBGROUPS and BudhNet



On Mon, 2010-05-24 at 04:57 -0700, gops wrote:
 @keren,
 
 i may not have economical expertise , but one thing is sure , as long
 as this world is running from greed and passion of people ( imho, 2
 holiest emotion ) , the economy is not going to down
 for sure.
 
 On May 24, 4:52 pm, gops patelgo...@gmail.com wrote:
  @hawkett  last line was the perfect answer to @keren.
 
  instead of making a central system on cloud , designing a software
  that is very highly distributed using highest encryption standard is a
  way to go.
 
  on some level , people athttp://www.joindiaspora.com/are doing that
  thing at social networking level. ( personally i dont think doing this
  on top of other http or https protocol is good idea. even
  though creating/defining protocol is hard work , it should be done
  directly on top of tcp/ip level. )
 
  that way, i own my own server at my own location with my own data
  fully encrypted and accessible only to me. then i delegate
  data through defined protocol to other person or system ( be it a
  company , a bank , a friend , a community etc.. ) with different level
  of data and security access. same way, other system,
  users and bank etc will delegate their data to my server to similar
  encryption channels.
 
  distributing data this way will remove scalability need altogether.
  and application complexity will reduce dramatically as they do not
  have to take care of 1000's of connection or users. but it will arise
  problem for myself to maintain my server , will force to learn a new
  software etc and learn the system, may be your own private virtual
  server is a new commodity of the future.
 
  my two cents. :D
 
  On May 24, 4:08 pm, hawkett hawk...@gmail.com wrote:
 
   A small issue if the economy goes down the drain on the scale you are
   talking about is that an internet where everyone has the capability to
   connect to a cloud system is going to be difficult to maintain. It's
   not going to be easy for google to make money, for individuals to pay
   their internet bills, for internet companies to continue to deliver
   access - indeed you may find it difficult for yourself to make money
   or pay for the developers you are proposing to hire.  What value will
   money have? How will google pay its employees to continue to deliver
   app engine - ad revenues

[appengine-java] Open Source FullText Search in Objectify Example

2010-05-06 Thread Duong BaTien
I got it. It may happen at googlecode maintenance time.

Thanks
BaTien

Thanks for sharing your code. I try to get the source code, but get the
following error:

[bat...@dev2 restSearch]$ svn co http://fulltext-search-in-
objectify.googlecode.com/svn/trunk/ fullTextSearch
svn: PROPFIND request failed on '/svn/!svn/bln/7'
svn: PROPFIND of '/svn/!svn/bln/7': 502 Bad Gateway (http://fulltext-
search-in-objectify.googlecode.com)

Let us know when it is fixed.

Duong BaTien
DBGROUPS and BudhNet

On Wed, 2010-05-05 at 17:06 -0300, nicolas melendez wrote:
 This a migration from JDO to Objectify for the fulltext search example
 from this post:
 
 
 http://googleappengine.blogspot.com/2010/04/making-your-app-
 searchable-using-self.html?
 utm_source=feedburnerutm_medium=feedutm_campaign=Feed:
 +GoogleAppEngineBlog+(Google+App+Engine+Blog)
 
 
 The idea and CORE CODE is from: Nico Güttler, Dominic Jansen, Raphael
 Bauer (http://corporate.scisurfer.com/)
 
 
 I only MIGRATED it to OBJECTIFY Framework, thats my colaboration.
 Thats the open source magic :)
 
 
 here the url :
 
 
 http://code.google.com/p/fulltext-search-in-objectify/
 
 
 
 
 Nicolás Meléndez
 
 -- 
 You received this message 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.



-- 
You received this message 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] Open Source FullText Search in Objectify Example

2010-05-05 Thread Duong BaTien
Hi:

Thanks for sharing your code. I try to get the source code, but get the
following error:

[bat...@dev2 restSearch]$ svn co http://fulltext-search-in-
objectify.googlecode.com/svn/trunk/ fullTextSearch
svn: PROPFIND request failed on '/svn/!svn/bln/7'
svn: PROPFIND of '/svn/!svn/bln/7': 502 Bad Gateway (http://fulltext-
search-in-objectify.googlecode.com)

Let us know when it is fixed.

Duong BaTien
DBGROUPS and BudhNet

On Wed, 2010-05-05 at 17:06 -0300, nicolas melendez wrote:
 This a migration from JDO to Objectify for the fulltext search example
 from this post:
 
 
 http://googleappengine.blogspot.com/2010/04/making-your-app-
 searchable-using-self.html?
 utm_source=feedburnerutm_medium=feedutm_campaign=Feed:
 +GoogleAppEngineBlog+(Google+App+Engine+Blog)
 
 
 The idea and CORE CODE is from: Nico Güttler, Dominic Jansen, Raphael
 Bauer (http://corporate.scisurfer.com/)
 
 
 I only MIGRATED it to OBJECTIFY Framework, thats my colaboration.
 Thats the open source magic :)
 
 
 here the url :
 
 
 http://code.google.com/p/fulltext-search-in-objectify/
 
 
 
 
 Nicolás Meléndez
 
 -- 
 You received this message 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.

-- 
You received this message 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: JAXB

2010-04-30 Thread Duong BaTien
This may be the one you are looking for. It works with JAXB 2.2, Jersey
and GAE http://tugdualgrall.blogspot.com/ 

Duong BaTien
DBGROUPS and BudhNet


On Fri, 2010-04-30 at 15:38 +0430, Łukasz Woźniczka wrote:
 This link is useful. 
 http://stackoverflow.com/questions/1955396/whats-the-easiest-way-to-
 persist-java-objects
 But i'm looking for implementation on google 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.

-- 
You received this message 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: JAXB

2010-04-30 Thread Duong BaTien
Please share your example if you can. We will share our solution at the
right time for using: (1) GAE, Guice, Objectify, Jersey REST and JAXB at
server side, (2) Jersey REST client, JSONP in GWT 2.

Thanks.
BaTien

On Fri, 2010-04-30 at 22:41 +0900, seleronm wrote:
 Hi,
 
 That's great information
 
 I tried to create a simple example
 though this can't begin to compete with that link
 
 Hope some of this helps
 
 thanks.
 
 
 This may be the one you are looking for. It works with JAXB 2.2, Jersey
 and GAE http://tugdualgrall.blogspot.com/ 
 
 Duong BaTien
 DBGROUPS and BudhNet
 
 
  This link is useful. 
  http://stackoverflow.com/questions/1955396/whats-the-easiest-way-to-
  persist-java-objects
  But i'm looking for implementation on google 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.
 
 -- 
 You received this message 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.
 

-- 
You received this message 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: Why should app startup times be a problem.

2010-04-01 Thread Duong BaTien
Hi:

On Wed, 2010-03-31 at 22:51 -0700, Jeff Schnitzer wrote:
 On Wed, Mar 31, 2010 at 6:41 PM, jd jdpatter...@gmail.com wrote:
 
  On Apr 1, 3:14 am, Jeff Schnitzer j...@infohazard.org wrote:
  What does Twig do when someone issues a type-less query?
 
  datastore.find().addFilter(color, EQUAL, green). returnResultsNow()
 
  The expression above is actually not possible to enter using the
  fluent commands.  You can only set a filter on the interface that is
  returned from calling FindCommand.type(Class?)
 
  It is also illegal according to the datastore docs for a Query with no
  kind:
 
  Currently the only operations supported on a kind-less query are
  filter by __key__, ancestor, and order by __key__ ascending
 
 In other words, Twig cannot perform the simple query:
 
 IterableObject foo = ofy.query().ancestor(yourobject);
 

This is the required pattern shown in Google IO scalable application for
GAE.

Duong BaTien
DBGROUPS and BudhNet

 If you ever want to support something like this, you will need a
 registration process.
 
 If you ever want to support true polymorphic queries, you will need a
 registration process.
 
 Don't claim this short-sightedness as a feature.
 
 Jeff
 

-- 
You received this message 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] Objectify-Appengine 2.1 released, supports Partial Indexes

2010-03-25 Thread Duong BaTien
Hi:

Congratulation and thank for tremendous efforts from the Objectify Team.

By the way, has any one attempted Objectify with possible very large
index of subscribers and publishers of web-hook pub-sub (Google
PubSubHubbub of Atom or short message twitter style).

Thanks
Duong BaTien
DBGROUPS and BudhNet


On Thu, 2010-03-25 at 13:45 -0700, Jeff Schnitzer wrote:
 Today we released Objectify v2.1, the latest version of our opensource
 replacement for JDO/JPA on the Google App Engine datastore.
 
 This version includes a major new feature, Partial Indexes.  If you
 aren't sure what partial indexes are, the Wikipedia page
 (http://en.wikipedia.org/wiki/Partial_index) describes them so:
 
 A partial index, also known as filtered index is a database index
 which has some condition applied to it such that it only includes a
 portion of the rows in the table.  This can allow the index to remain
 small even though the table may be rather large, and have fairly
 extreme selectivity.
 
 Here is an example of an Objectify entity using partial indexes:
 
 public class Player {
 @Id Long id;
 
 // Simple conditions:  IfFalse, IfTrue, IfZero, IfNull, etc
 @Unindexed(IfFalse.class) boolean admin;
 
 // Smarter - sensitive to the actual default value
 @Unindexed(IfDefault.class) Team team = Team.NOTCHOSEN;
 
 // You can make your own conditions
 @Unindexed(IfCustomCondition.class) Status status;
 
 static class IfCustomCondition extends ValueIfStatus {
 public boolean matches(Status value) {
 return (value == Status.DEAD || value == Status.RETIRED);
 }
 }
 }
 
 Why should you care about optimizing indexes?
 
 All queries in the datastore require indexes, which are a sort of
 reverse-mapping from value to key.  These indexes occupy space and
 consume cpu resources whenever an entity is written to the datastore.
 With the addition of just a few indexes, this cost quickly doubles or
 triples the cost of storing the original entity:
 
  * A basic entity with no indexes costs 48 api_cpu_ms to store.
  * Each single-property indexed field adds an additional 17 api_cpu_ms.
 
 This number appears stable and consistent; appengine seems to have a
 static formula for computing datastore costs.  Storage size costs are
 harder to measure, but from watching mailing list traffic it seems
 quite easy to double or triple your storage size with unnecessary
 indexes.
 
 When should you care about optimizing indexes?
 
  * Removing unnecessary indexes will not make writes faster, it will
 make them /cheaper/.  All indexes are written in parallel, so indexes
 do not add latency to writes.  Instead, indexes add $ to the bill you
 get at the end of the week - and push you closer to your quota limits.
 
  * If your application has relatively small quantities of relatively
 static data, index optimization is probably pointless.  On the other
 hand, if you have large data volumes or heavy write loads, you must
 carefully choose your indexes (or be very rich).
 
 Do I need partial indexes, as opposed to just declaring whole fields
 indexed or not?
 
 It depends on your dataset and your queries.  In the Player example
 above, partial indexes can be extremely effective:
 
  * You only ever filter on the admin field for actual admins, and most
 players are not admins.
  * You only ever filter on the team field for players who have chosen
 a team, and the bulk of players are not associated with a team.
  * You only ever filter on the status field for players who have
 active statuses, and you have a large number of inactive players.
 
 Objectify's support for partial indexes also has the ability to
 determine index behavior based on the whole entity.  This allows you
 to perform certain kinds of limited multiple-property queries
 (including double inequality queries) without creating a
 multi-property index.  As an example, it is very easy to model this
 index from the Wikipedia page:
 
 create index partial_salary on employee(age) where salary  2100;
 
 An example of this is documented in the Objectify manual.
 
 Thanks,
 The Objectify Team
 Jeff, Scott, and Matt
 
 -- 
 You received this message 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.
 

-- 
You received this message 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] Objectify - Twig - approaches to persistence

2010-03-14 Thread Duong BaTien
Hi Jeff and John:

Wow! This is the spirit of open source where we can focus on what we are
interesting in to Share our unique comparative advantages while learning
and leveraging on others for the benefits of the Whole.

Thanks guys.

Duong BaTien
DBGROUPS and BudhNet


On Sun, 2010-03-14 at 19:27 +0700, John Patterson wrote:
 On 13 Mar 2010, at 11:00, Jeff Schnitzer wrote:
  since you can (and IMNSHO probably should) always disable automatic
  activation and refresh the graph manually.
 
 Although I dislike premature optimisations such as this note that you  
 can configure Activation to not activate any Objects by default.
 
  After you explained the concept of uninitialized entities (the brief
  blurb in your docs really isn't enough), I actually rather like your
  solution!  I might even implement something similar in Objectify.  But
  I really think you need to document the hell out of the issues
  surrounding them.  It is very very easy to corrupt data.
 
 Despite all the talk about differences in philosophy and the down  
 playing of the features in Twig I can see from the Objectify mailing  
 list that discussion has already started on how it would be possible  
 to add support for direct references and async parallel commands.
 
 Be very careful not to end up with an API that bulges with features  
 that are tacked on as an after thought.  The Objectify Query API as it  
 is now would need to explode with permutations.  Perhaps it is best to  
 stick to the goal of being a more usable object capable interface to  
 the low-level API?  Objectify does this very well.
 
 When Twig started as not much more than a thin wrapper around the low- 
 level interface and grew in complexity as more high level Object  
 oriented features were added it became obvious that mixing direct  
 references and low-level Keys and Queries in the same API is just not  
 manageable.  So I stripped out almost all the low-level references and  
 the result is a very clean, focused API.
 
 Adding a collection of helper functions to Objectify for things like  
 merging OR queries would very soon become unorganised and make  
 exploring the API difficult.
 
 You should probably make a decision about the design goals of  
 Objectify and stay true to it.  There is always the option of building  
 a higher-level interface on top of Objectify - now that would be  
 interesting!  In Twig you have the option to drop down to use the low- 
 level datastore service if you really need to - but the necessity for  
 this has decreased a lot with the final release 1.0
 
 Although this our-answer-to-the-great-question-is-the-only-logical-one  
 banter is terrific fun it might make sense to work on some  
 functionality in common.  Scott and I briefly mentioned making a  
 common profiling ApiProxy to help understand the performance of your  
 app.  I've made a quick start on this but it really is a feature that  
 makes sense not just for Twig.
 
 If the feature sets of Twig and Objectify end up converging over time  
 - albeit with differences in default settings - it begs the question  
 if there might be some way to cooperate on higher level functionality  
 also.
 
  OR queries haven't been a pain point.  Maybe they will
  be in the future, in which case we'll consider adding the feature.  We
  are content to wait for the request.
 
 

-- 
You received this message 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] What is the purpose of keyName? (Low-level API)

2010-02-22 Thread Duong BaTien
Hi Jeff and Max:

Sorry to jump in this debate on the use of system generated Long id and
user-provided long id and String name. I found the discussion is useful
from best practice.

I leverage Objectify and try to re-do our data model. Originally, i
chose the route of String name for user, role and group to enforce the
unique name of the entity Key, plus long id provided from a simple
ConcurrentHashMap Singleton. But i feel that the home-grown
ConcurrentHashMap Singleton may not be as robust and scalable as the
generated Long id, recognizing that the generated id is not contiguous.
So i decided the use of String name of natural uniqueness such as email
for user lock-in and generated Long id is for others.

Please comment and/or siggestion.

Duong BaTien
DBGROUPS and BudhNet

On Mon, 2010-02-22 at 13:52 -0800, Jeff Schnitzer wrote:
 On Mon, Feb 22, 2010 at 1:19 PM, Max Ross (Google)
 maxr+appeng...@google.com wrote:
 
  user-defined long-id keys are not quite as easily used.  You either need to
  commit to not letting the datastore generate ids for that kind or you need
  to reserve a batch of ids using the DatastoreService.allocateIds method.
  Otherwise you run the risk of a silent collision.  There is no such risk
  with user-defined string keys.
 
 Right, but if the user has a natural key (long, String, whatever) they
 won't be using the generator anyways.  There are plenty of natural
 long keys in the world... facebook userid being a popular one.
 
 FWIW, Objectify makes the distinction between ids of type Long, which
 can be null and thus autogenerated, and long (the primitive) which
 cannot be autogenerated.  I really hadn't intended to plug Objectify
 here, really!
 
  Valid point about renaming, but going back to the example I provided, the
  datastore does not distinguish between inserts and updates.  The only way
  you can guarantee that an entity was inserted, and therefore the only way
  you can guarantee the uniqueness of the name, is to use a user-defined key.
  If you're mapping id to name it will be possible to create two entities with
  the same name.  It's of course up to you to decide how important this is to
  defend against, but without the ability to provide your own id you wouldn't
  get to make this choice, and without the ability to provide your own string
  id you wouldn't be able to add some application-specific meaning to this
  choice.
 
 I totally agree with you WRT user-defined vs generated values, I just
 don't see anything wrong with using the long id as a user-defined
 value.  Just make sure you never ask for a generated one.  Seems
 pretty straightforward.
 
 Jeff
 

-- 
You received this message 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] What is the purpose of keyName? (Low-level API)

2010-02-22 Thread Duong BaTien
On Mon, 2010-02-22 at 15:13 -0800, Jeff Schnitzer wrote:
 It sounds like you were trying to generate long ids from an in-memory
 singleton, which is a perilous thing to do... there is never a
 guarantee that there is only a single instance of your application
 running on a single machine in appengine.
 
 In general... if you have a natural key, use it, otherwise use the
 generator.  Most data modelers say you shouldn't even use natural keys
 (like email), since what you think is a natural key today turns out to
 be a mutable field tomorrow (ie, new requirement: users can change
 email addresses).  I'm pretty partial to that philosophy myself, and
 rarely use natural keys - facebook userid being my main exception.
 
 Jeff

Yes, i am aware of this. Google uses it and calls the unique name within
the system the canonical name whether the name is an email or just a
convenient id like the Wave id. I copy google idea. Any comment?

Thanks
BaTien

 
 On Mon, Feb 22, 2010 at 2:46 PM, Duong BaTien duong.bat...@gmail.com wrote:
  Hi Jeff and Max:
 
  Sorry to jump in this debate on the use of system generated Long id and
  user-provided long id and String name. I found the discussion is useful
  from best practice.
 
  I leverage Objectify and try to re-do our data model. Originally, i
  chose the route of String name for user, role and group to enforce the
  unique name of the entity Key, plus long id provided from a simple
  ConcurrentHashMap Singleton. But i feel that the home-grown
  ConcurrentHashMap Singleton may not be as robust and scalable as the
  generated Long id, recognizing that the generated id is not contiguous.
  So i decided the use of String name of natural uniqueness such as email
  for user lock-in and generated Long id is for others.
 
  Please comment and/or siggestion.
 
  Duong BaTien
  DBGROUPS and BudhNet
 
  On Mon, 2010-02-22 at 13:52 -0800, Jeff Schnitzer wrote:
  On Mon, Feb 22, 2010 at 1:19 PM, Max Ross (Google)
  maxr+appeng...@google.com wrote:
  
   user-defined long-id keys are not quite as easily used.  You either need 
   to
   commit to not letting the datastore generate ids for that kind or you 
   need
   to reserve a batch of ids using the DatastoreService.allocateIds method.
   Otherwise you run the risk of a silent collision.  There is no such risk
   with user-defined string keys.
 
  Right, but if the user has a natural key (long, String, whatever) they
  won't be using the generator anyways.  There are plenty of natural
  long keys in the world... facebook userid being a popular one.
 
  FWIW, Objectify makes the distinction between ids of type Long, which
  can be null and thus autogenerated, and long (the primitive) which
  cannot be autogenerated.  I really hadn't intended to plug Objectify
  here, really!
 
   Valid point about renaming, but going back to the example I provided, the
   datastore does not distinguish between inserts and updates.  The only way
   you can guarantee that an entity was inserted, and therefore the only way
   you can guarantee the uniqueness of the name, is to use a user-defined 
   key.
   If you're mapping id to name it will be possible to create two entities 
   with
   the same name.  It's of course up to you to decide how important this is 
   to
   defend against, but without the ability to provide your own id you 
   wouldn't
   get to make this choice, and without the ability to provide your own 
   string
   id you wouldn't be able to add some application-specific meaning to this
   choice.
 
  I totally agree with you WRT user-defined vs generated values, I just
  don't see anything wrong with using the long id as a user-defined
  value.  Just make sure you never ask for a generated one.  Seems
  pretty straightforward.
 
  Jeff
 
 
  --
  You received this message 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.
 
 
 
 -- 
 You received this message 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.
 

-- 
You received this message 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: Building Scalable Complex App

2010-02-01 Thread Duong BaTien
Please see the answer i sent out yesterday for a proper solution.

Duong BaTien
DBGROUPS and BudhNet

On Sat, 2010-01-30 at 01:14 -0800, digitalsam007 wrote:
 I failed to make this code work. It seems that the MessageIndex object
 is not getting persisted when i call tx.commit().
 
 Any help in this regard will be appreciated.
 
 Thanks
 
 On Jan 17, 12:26 am, Duong BaTien duong.bat...@gmail.com wrote:
  Hi:
 
  Following is my sketch for the Message and MessageIndex. Please advise
  and if possible, sketch out the Java version of set intersection from
  the presentation. Have not time to try anything yet; but the design is
  very significant for proper data modeling. The JDO version of the
  presentation uses query.setFilter(receivers == 'foo') which i do not
  see in the API.
 
  public class MessageIndex { // create MessageIndex to the parent Message
private Key parent; private String keyKind; private long id;
 
@PrimaryKey
@Persistent(ValueStrategy = IdGeneratorStrategy.IDENTITY)
private KeyFactory.createKey(parent, keyKind, id) key;
 
@Persistent private ListString receivers;
 
// constructor to create MessageIndex linked to Message
public MessageIndex(Key parent, String keyKind, long id) {
  this.parent = parent; this.keyKind = keyKind; this id = id;
 
  }
 
  public class Message {
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key key
 
@Persistent private String sender;
@Persistent private String body;
 
// a user create a message to a list of receivers
public static Message createMessage(String userId, String body,
  ListString receivers) {
  tx.begin()
  this.body = body;
  MessageIndex index = new MessageIndex(key, key,getKind(), key.getId
  ());
  index.setReceivers(receivers);
  tx.commit();
}
 
// query to get all messages sent to a user foo
public ListMessage getMessagesSentToUserId(String userId) {
  ListMessage results = null
tx.begin();
  Query q = pm.newQuery(MessageIndex.class);
  q.addFilter(receivers, Query.FilterOperator.EQUAL, foo);
  q.setKeyOnly();
  // query the Message for all messages filtered by parent of
  MessageIndex key
  Query query = pm.newQuery(Message.class);
  query.addFilter(key, Query.FilterOperator.EQUAL, q.execute
  ().getParent());
  results = (ListMessage) query.execute();
tx.commit();
}
 
  }
 
  Thanks
  Duong BaTien
  DBGROUPS and BudhNet
 
  On Wed, 2010-01-13 at 16:26 -0800, Jason (Google) wrote:
   It's been awhile since I've seen this video, so I'll have to go back
   to re-watch it in order to answer your question completely, but I'd be
   interested in seeing what you've sketched out so far and happy to give
   you my feedback on it.
 
   - Jason
 
   On Tue, Jan 12, 2010 at 3:52 PM, Duong BaTien duong.bat...@gmail.com
   wrote:
   Hi Jason, the author Brett Slatkin and others:
 
   1) For the list property, the video shows simple example of
   standard 1:n
   Message Receivers in python and Java. It then demonstrates a
   very
   efficient technique of Message and MessageIndex with the query
   of
   MessageIndex in python (NO Java from then on). I look at both
   the low
   level datastore with Query.setKeyOnly() and the query select
   id from
   to get the results of ListKey, then go through the loop to
   get the
   receivers. I may miss something, since the python code looks
   so clean.
   But once you are in any environment, it is very expensive to
   switch.
   This technique has major impact in data modeling.
 
   2) Again for the set intersection, the python code looks so
   clean. I
   roughly sketch what need to be done on the Java side with
   either low
   level of datastore or with JDO. It is still not elegant as the
   shown
   codes. The demos are also in python. Again, the technique of
   merge join
   will have very significant impact on data modeling that GAE
   may surpass
   other platforms.
 
   Haven't put enough time in it yet, I wonder if any one has
   worked out
   the demos in Java and suggested best practices in data
   modeling for a
   complex large application. The job Brett Slatkin sets out to
   do has not
   completed without the Java codes since GAE now supports Java.
 
   Thanks
   Duong BaTien
   DBGROUPS and BudhNet
 
   On Tue, 2010-01-12 at 14:13 -0800, Jason (Google) wrote:
Can you be more specific about what you're trying to
   accomplish so we
don't have to search through the video to find what you're
   looking
for? Or, at least provide

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

2010-01-27 Thread Duong BaTien
Thanks Jeff.

There seems to be something at odd:

On Tue, 2010-01-26 at 16:40 -0800, Jeff Schnitzer wrote:
 Here's the Objectify version of what's described in the video, capable
 of a photo-equivalent of million user fanout:
 
 class Album {
@Id Long id;
String name;
 }
 class PhotoIndex {
@Id Long id;
@Parent OKeyAlbum album;
SetOKeyPhoto photos;
 }
 class Photo {
@Id Long id;
String caption;
String blobStoreKey;
 }
 
 If you want to ask what albums are this photo in? (equivalent to
 what messages are waiting for me in the video), you query like this:
 
 OQueryPhotoIndex query =
 createQuery(PhotoIndex.class).filter(photos, photoKey);
 ListOKeyAlbum keys = ofy.prepareKeysOnly(query).asList();
 ListAlbum albums = ofy.get(keys);
 
 Jeff
 

In the above query to ask what albums are this photo in, I wonder if it
is legitimate to cast List of PhotoIndex keys with ListOKeyAlbum so
you can get a particular photoKey in a list of albums.

Using the same structure for User, MessageIndex and Message, the query
seems to ask for a list of users, a particular message is sent to?


class User {
   @Id Name userId;
}
class MessageIndex {
   @Id Long messageIndexId;
   @Parent OKeyUser userKey;
   ListOKeyMessage messageKeys;
}
class Message {
   @Id Long messageId;
   String ccontent;
}

To query the list of users a particular messageKey is sent to:

OQueryMessageIndex query =
ObjectifyService.createQuery(MessageIndex.class).filter(messageKeys,
messageKey);
ListOKeyUser userKeys = ofy.prepareKeysOnly(query).asList();
ListUser users = ofy.get(userKeys);

To query what messages are waiting for me:

OQueryMessageIndex query = ObjectifyService.createQuery
(MessageIndex.class).filter(userKey, meKey);
ListOKeyMessage listOfMessageKeys = ofy.prepareKeysOnly
(query).asList();
// iterate through listOfMessageKeys and each iteration, get a batch of
messages sent to meKey?

Can GQL of python be used in Objectify?

Thanks
Duong BaTien
DBGROUPS and BudhNet



-- 
You received this message 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] Question: best practice to persist medium-large data?

2010-01-26 Thread Duong BaTien
Hi Jeff:

I am here again and have put sometime in Objectify. Thanks for taking
pain at different design patterns. Please let the list known your effort
in the good idea #2, especially in the social graph set intersections
and union.

Duong BaTien
DBGROUPS and BudhNet


On Tue, 2010-01-26 at 14:19 -0800, Jeff Schnitzer wrote:
 On Mon, Jan 25, 2010 at 11:52 PM, John Patterson jdpatter...@gmail.com 
 wrote:
 
  This is why you configure what type of relationship is used using: @Embed,
  @Entity(PARENT), @Entity(CHILD) or @Entity(INDEPENDENT)
  So you have the flexibility to choose configuration _without_ rewriting your
  code.  Very important difference.
 
 The problem is that it *isn't* as simple as just changing an
 annotation.  Not in appengine, at any rate.  It works in the simple
 case (good for demos and sample apps), but you start to notice edge
 cases:
 
  * In some representations you can add a Photo to an Album in a
 transaction, in some representations you can't.
  * In some representations, multiple queries are required to fetch a
 fetch an Album containing a Photo.
  * Each representation has a completely different query syntax.
 
 Twig exposes the datastore Query object, which means the developer
 gets the full brunt of this exposure.
 
 I don't want to say that it isn't possible to build a system that
 abstracts entities into a sophisticated object graph - clearly, we
 have JDO  JPA.  What I'm saying is that the people who created JDO 
 JPA are not idiots (although I do think the creators of JDO's
 annotations are aesthetically challenged).  The reason JDO has all
 that complexity and endless configuration and query languages and
 fetch groups and proxies and detaching and whatnot is because that's
 what you need to abstract an arbitrary entity graph.
 
  Currently the first type of representation is not an option.  I do want to
  add this as it makes very large collections that change often much more
  efficient.  When it is added you could reconfigure your data schema by
  changing a single annotation.  Such a change in Objectify would require the
  developer to rewrite their entire data layer
 
 You can never just reconfigure your data schema with a single
 annotation, both for the reasons above and because you probably have
 real-world data to migrate.  And real-world constraints demand a
 particular schema!
 
 Let's actually answer the original poster's question - how do you
 model a photo album?  I hope he's still listening :-)
 
 The first question is how you should model it in the datastore?  I'll
 use Objectify's syntax  here because it corresponds directly to the
 datastore representation.
 
 Actually, let's start by describing how you SHOULDN'T model a photo album.
 
 -
 
 BAD IDEA #1:
 
 class Album {
 @Id Long id;
 String name;
 ListOKeyPhoto photos;
 }
 class Photo {
 @Id Long id;
 String caption;
 String blobStoreKey;// key to GAE's blobstore
 }
 
 Fetching photos in an album (again, Objectify syntax but equivalent to
 the datastore operation) is:
 
 ListPhoto fetched = ofy.get(album.photos);
 
 There are two reasons why this is a bad idea:
 
  1) You now have a hard limit of 5,000 photos per album, established by GAE.
 
  2) Every time you load an Album, you must load the entire set of
 Photo keys.  Want to generate a list of Album names?  You have to load
 all that key data, orders of mangitude more data than what you want.
 
 -
 
 BAD IDEA #2:
 
 class Album {
 @Id Long id;
 String name;
 }
 class Photo {
 @Id Long id;
 @Parent OKeyAlbum album;
 String caption;
 String blobStoreKey;
 }
 
 This stores the Photo with the Album embedded in the Photo's Key as an
 ancestor, making Photo part of the Album's entity group.  At first
 glance, this seems kinda cool and you can now do transactions across
 Albums and Photos.
 
 Fetching photos in an album:
 
 OQueryPhoto query = createQuery(Photo.class).ancestor(albumKey);
 ListPhoto fetched = ofy.prepare(query).asList();
 
 The problem is what happens when you want to move a Photo from one
 Album to another.  You can't just change the parent.  You must delete
 the Photo entity and create a whole new Photo entity with the new
 parent Album.  And if the Photo has Comments or other referring
 entities?  All those comments need to be repointed at the new Photo.
 A mess.
 
 -
 
 GOOD IDEA:
 
 class Album {
 @Id Long id;
 String name;
 }
 class Photo {
 @Id Long id;
 OKeyAlbum album;
 String caption;
 String blobStoreKey;
 }
 
 Fetching photos in an album:
 
 OQueryPhoto query = createQuery(Photo.class).filter(album, albumKey);
 ListPhoto fetched = ofy.prepare(query).asList();
 
 You can now move Photos between Albums easily and you can load/query
 Albums efficiently.
 
 -
 
 GOOD IDEA #2:
 
 I considered writing something about index entities as described here:
 http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html

Re: [appengine-java] Presentation on doing full-text search etc

2010-01-24 Thread Duong BaTien
Wow. Thanks for Sharing. We start to get some juice out of GAE. After
spending too much time on JPA then JDO, it is much easier and more
efficient with 
http://code.google.com/p/objectify-
appengine/wiki/IntroductionToObjectify#Multi-Value_Relationship

Hope this may help some more since the GAE datastore is a completly
different animal from the one(s) JPA and JDO are deseigned for.

Duong BaTien
DBGROUPS and BudhNet


On Sun, 2010-01-24 at 06:04 -0800, Mats wrote:
 I though I'd share this presentation I found which includes some tips
 on using memcache, message delivery fanout, key only queries and a
 simple java version of this appengine-search
 http://www.billkatz.com/2009/6/Simple-Full-Text-Search-for-App-Engine
 
 Video
 part1: http://www.youtube.com/watch?v=wJuU-gME4dQ
 part2: http://www.youtube.com/watch?v=LSuFyBzPTlQ
 part3: http://www.youtube.com/watch?v=TOIR11EkNp8
 
 Slides
 http://www.slideshare.net/sggtug/talk-1-google-app-engine-development-java-data-models-and-other-things-you-should-know-navin-kumar-cto-of-socialwokcom
 
 Example code
 http://searchguestbook.appspot.com/searchguestbook.tar.gz
 

-- 
You received this message 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 use generated key.getId() to build parent child keys

2010-01-18 Thread Duong BaTien
Hi:

Has anyone figured out the use of generated long id in @PrinaryKey to
build a complete key graph. If not possible, what is the best technique
to generate long id for a complete graph of parent-child relationship.
Following is a use case:

UserOrg is the root entity with userId = f...@budhnet.com which
generate a 'message' sent to a list of receivers.

public class UserOrg {
  @PrimaryKey private Key rootKey;
  // the key is generated as
  rootKey = KeyFactory.createdKey(UserOrg.class.getSimpleName(),
userId);

public class Message { //whose instance is generated by a userId
  @PrimaryKey private Key messageKey;
  // can the key be generated as one of the 2 followings
  messageKey = new KeyFactory.Builder(UserOrg.class.getSimpleName(),
userId).addChild(Message.class.getSimpleName(), messageKey.getId
()).getKey();
  or Key rootKey = KeyFactory.createKey(UserOrg.class.getSimpleName(),
userId);
  messageKey = KeyFactory.createKey(rootKey, MessageClass.getSimpleName
(), rootKey.getChild().getId());

  If not, what is the best practice in generating the long id for child
message of a userId. Same thing would apply for the MessageIndex of
receiver list.

public class MessageIndex { // child of the message created by userId
  Key rootKey = KeyFactory.createKey(UserOrg.class.getSimpleName(),
userId);
  messageKey = KeyFactory.createKey(rootKey, MessageClass.getSimpleName
(), rootKey.getChild().getId());

  @PrimaryKey private Key messageIndexKey;
  messageIndexKey = KeyFactory.createKey(messageKey,
MessageIndex.class.getSimpleName(), messageKey.getChild().getId());

The exercise is getting more complex for set intersection as shown in
python in
http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html 

Has anyone worked out the Java code of the demos? the author?
Thanks

Duong BaTien
DBGROUPS and BudhNet


-- 
You received this message 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] Building Scalable Complex App

2010-01-12 Thread Duong BaTien
Hi Jason, the author Brett Slatkin and others:

1) For the list property, the video shows simple example of standard 1:n
Message Receivers in python and Java. It then demonstrates a very
efficient technique of Message and MessageIndex with the query of
MessageIndex in python (NO Java from then on). I look at both the low
level datastore with Query.setKeyOnly() and the query select id from
to get the results of ListKey, then go through the loop to get the
receivers. I may miss something, since the python code looks so clean.
But once you are in any environment, it is very expensive to switch.
This technique has major impact in data modeling.

2) Again for the set intersection, the python code looks so clean. I
roughly sketch what need to be done on the Java side with either low
level of datastore or with JDO. It is still not elegant as the shown
codes. The demos are also in python. Again, the technique of merge join
will have very significant impact on data modeling that GAE may surpass
other platforms.

Haven't put enough time in it yet, I wonder if any one has worked out
the demos in Java and suggested best practices in data modeling for a
complex large application. The job Brett Slatkin sets out to do has not
completed without the Java codes since GAE now supports Java.

Thanks
Duong BaTien
DBGROUPS and BudhNet


On Tue, 2010-01-12 at 14:13 -0800, Jason (Google) wrote:
 Can you be more specific about what you're trying to accomplish so we
 don't have to search through the video to find what you're looking
 for? Or, at least provide a timeline reference that we can refer to in
 the video. :)
 
 
 Thanks,
 - Jason
 
 On Mon, Jan 11, 2010 at 7:29 AM, Duong BaTien duong.bat...@gmail.com
 wrote:
 Hi:
 
 Is there any blog and/or note to apply list properties and
 merge-join in
 python as in the following talk and demos
 
 http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html
  using Java and JDO?
 
 Thanks
 Duong BaTien
 DBGROUPS and BudhNet
 
 
 
 --
 You received this message 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.
 
 
 
 
 
 -- 
 You received this message 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.

-- 
You received this message 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] Building Scalable Complex App

2010-01-11 Thread Duong BaTien
Hi:

Is there any blog and/or note to apply list properties and merge-join in
python as in the following talk and demos
http://code.google.com/events/io/2009/sessions/BuildingScalableComplexApps.html 
using Java and JDO?

Thanks
Duong BaTien
DBGROUPS and BudhNet


-- 
You received this message 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.




[google-appengine] WWW mapping for AppEngine

2009-12-28 Thread Duong BaTien
Hi:

I messed up my www mapping in google apps for appengine. When
dbgroups1.appspot.com of AppEngine mapped to http://www.dbgroups.com was
directed to http://sites.google.com/a/dbgroups.com/www/ I try to solve
the issue by:
  1) deactivate the sites in google apps for dbgroups.com
  2) deactivate, then permanently delete dbgroups1 under AppEngine

I thought I can comeback to re-install dbgroups1 mapping from the
scratch. This is not the case. The current status is:
  1) In the AppEngine, i cannot access dbgroups1 anymore.
  2) In dbgrous.com Apps, the services https://dbgroups1.appspot.com
still mapping to http://www.dbgroups.com. I cannot delete it and the
mapping still directed to sites.

I understand that dbgroups1 id in appspot is still reserved and I have 1
extra application left due to the permanent deletion of dbgroups1. How
can i get back to dbgroups1 and mapped to www.dbgroups.com 

It's my turn to have the issue. Thanks

Duong BaTien
DBGROUPS and BudhNet


--

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




[google-appengine] Re: WWW mapping for AppEngine

2009-12-28 Thread Duong BaTien
The problem is now solved by creating a new dbgroups3 and follow
instructions in this post: http://www.google.com/support/forum/p/Google
+Apps/thread?tid=66513228ad68b941hl=en

On Mon, 2009-12-28 at 11:16 -0700, Duong BaTien wrote:
 Hi:
 
 I messed up my www mapping in google apps for appengine. When
 dbgroups1.appspot.com of AppEngine mapped to http://www.dbgroups.com was
 directed to http://sites.google.com/a/dbgroups.com/www/ I try to solve
 the issue by:
   1) deactivate the sites in google apps for dbgroups.com
   2) deactivate, then permanently delete dbgroups1 under AppEngine
 
 I thought I can comeback to re-install dbgroups1 mapping from the
 scratch. This is not the case. The current status is:
   1) In the AppEngine, i cannot access dbgroups1 anymore.
   2) In dbgrous.com Apps, the services https://dbgroups1.appspot.com
 still mapping to http://www.dbgroups.com. I cannot delete it and the
 mapping still directed to sites.
 
 I understand that dbgroups1 id in appspot is still reserved and I have 1
 extra application left due to the permanent deletion of dbgroups1. How
 can i get back to dbgroups1 and mapped to www.dbgroups.com 
 
 It's my turn to have the issue. Thanks
 
 Duong BaTien
 DBGROUPS and BudhNet
 

--

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




Re: [google-appengine] www.winebythebar.com going to sites instead of appengine suddenly

2009-12-27 Thread Duong BaTien
Yes, it happened to many including my site aroud Dec 23. The solution
is: 
  (1) to deactive your site in google Apps. 
  (2) deactivate, then permanently delete your site under GAE. Your app
id at appspot.com is intact. It will take around 72 hours to completely
delete your application in GAE.
  (3) re-map your application url and unload your application.

Hope this may help.

Duong BaTien
DBGROUPS amd BudhNet

On Sun, 2009-12-27 at 07:22 -0800, Thomas McKay - www.winebythebar.com
wrote:
 I'm not sure where I should be asking for help for this. I've started
 a thread here:  
 http://www.google.com/support/forum/p/Google+Apps/thread?tid=0b3a59520d9a980ehl=en
 
 My site, which has been working for over a year (and is both the
 server side of an Android app as well as my company website) has
 suddenly started redirecting www.winebythebar.com to
 http://sites.google.com/a/winebythebar.com/www/ . The likely start
 date is 26th Dec.
 Please help!
 
 
 My site, www.winebythebar.com, not being directed to sites instead of
 appengine suddenly
 
 T. McKay
 Level 1
 9:52 AM
 Domain Name: http://www.winebythebar.com
 Edition:
 Affected Username/s:
 Issue Description: Visiting www.winebythebar.com now redirects to
 http://sites.google.com/a/winebythebar.com/www/ instead of hitting the
 appengine python. This site has been working for over a year (it is
 the server side of an Android app, besides being my company website).
 
 I have not changed any settings in cpanel in months. Any suggestions
 would be very welcome!
 Steps to Reproduce (if applicable):
 All replies
 
 
 T. McKay
 Level 1
 9:54 AM
 Edit  On cpanel I have two addresses mapped to my appengine app:
 www.winebythebar.com and incoming.winebythebar.com. incoming reaches
 the site correctly but www does not any more. Help!
 
 T. McKay
 Level 1
 10:12 AM
 Edit  Looking at this link
 http://groups.google.com/group/google-appengine/web/deleting-existing-www-mapping-from-google-apps
 but I don't have a mapping for www, only 'home'
 
 T. McKay
 Level 1
 10:17 AM
 Edit  In fact, trying to add 'www' as the above link describes in
 order to then delete it says that www is already in use.
 
 --
 
 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.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 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.com.
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en.




[google-appengine] Re: Reaching application limit

2009-11-10 Thread Duong BaTien

On Tue, 2009-11-10 at 13:17 -0800, Ikai L (Google) wrote:
 Richard, 
 
 
 You should be able to create up to 20 applications now. I also want to
 note that SDK 1.2.6 made it possible to delete applications:
 
 
 http://code.google.com/appengine/kb/adminconsole.html#delete%5Fapp
 
Thanks for pointing out this feature.

Duong BaTien
DBGROUPS and BudhNet


 
 On Tue, Nov 10, 2009 at 4:19 AM, Baron richar...@gmail.com wrote:
 
 thanks Nick
 
 
 
 On Nov 10, 10:57 pm, Baron richar...@gmail.com wrote:
  Hello,
 
  I have 9 applications used and am in discussion with another
 client,
  so I should soon reach 10.
  Could I please get more added to my quota?
 
  Thanks,
  Richard
 
 
 
 
 
 -- 
 Ikai Lan
 Developer Programs Engineer, Google App Engine
 
 
  


--~--~-~--~~~---~--~~
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-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[google-appengine] Re: Reaching 10 apps. Can someone at Google please help.

2009-09-15 Thread Duong BaTien

On Tue, 2009-09-15 at 15:53 +0100, Nick Johnson (Google) wrote:
 Hi observer,
 
 
 I've increased the number of apps you can create to 20.
 
 
 -Nick Johnson
 
Thanks Google.

Duong BaTien
DBGROUPS and BudhNet

 On Mon, Sep 14, 2009 at 7:56 PM, observer247 prem...@gmail.com
 wrote:
 
 I like the app engine platform and have spent quite a lot of
 time to
 learn python and now I use app engine for most of the things I
 need to
 do on the web.
 
 I have already reached 9 apps and I have around 5 apps ready
 to be
 deployed. Can someone please increase the number of apps to
 20. I have
 a billable account and I would like to work the legitimate way
 instead
 of trying to use others account etc.
 
 Thanks and will really appreciate this !
 
 
 
 
 -- 
 Nick Johnson, Developer Programs Engineer, App Engine
 Google Ireland Ltd. :: Registered in Dublin, Ireland, Registration
 Number: 368047
 
 
  


--~--~-~--~~~---~--~~
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-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---



[appengine-java] Re: SDK-1.2.5 for various GWT modules

2009-09-14 Thread Duong BaTien

I find out the issue. It is the cache in my browser of previous error.
Please ignore the question.

BaTien

On Mon, 2009-09-14 at 10:18 -0600, Duong BaTien wrote:
 Hi:
 
 I use GAE SDK and GWT for different applications. For GAE SDK, i take
 out 3 libs related to jpa since i use jdo (datanucleus-jpa-1.1.5,
 geronima-jpa_3.0_spec-1.1.1, geronimo-jta_1.1_spec-1.1.1). For GWT
 modules, i do not use eclipse but use ant build: ant-1.7.0, jdk1.6, gwt-
 linux-1.7.0
 
 All GWT modules, one built on top others through inherits , run as
 expeted for hosted, jar, javadoc. All GWT modules point to the same sdk-
 dir of appengine. After testing with runserver and update that module
 (dbgroups) to GAE, the runserver for other modules got the sticky of the
 previous successfully runserver (No file found
 for: /dbgroups/dbgroups.nocache.js)
 
 How can i change so one copy of SDK can be used for all GWT modules?
 
 Thanks
 Duong BaTien
 DBGROUPS and BudhNet
 
 


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



[google-appengine] Re: PLEASE HELP ME FIGHT GOOGLE SPAM

2009-07-09 Thread Duong BaTien

Hi Nick:

I have similar, but business wide more serious, issue of forging the
emails and send as spam to other web sides. I do not have time to
investigate this issue yet since we are still converting everything to
Google infrastructure using GAE and gmail, and will leverage Google
Wave.

Issue: We have 3 domain names. 1 domain name received a lot of spam mail
and was forged to send spam mail to others many years ago. I converted
my mail services for sending and receiving to gmail and moved the domain
name to GoDaddy. The received and sending spam mails become less, but
still there. The other 2 domain names are recent in the past 2-3 years
using GoDaddy DNS and google mail services right from the beginning.
Recently, some forged emails using the 3 domain names with different
user names are sent to various sites. I configure gmail to received all
mails under the domain names but not delivered to legitimate users to
one account, and see the spam and undelivered mails to direct users to
their web sites in Russia and China. The question are 
  (1) How can they forge the domain name with their faked user names and
send emails to spam others which will definitely damage our domain
names?
  (2) What can i do to prevent this? In the near future, DNS and simple
public web sites are only 2 things we use from GoDaddy; the web sites
are used for publishing XML configurations for Google gadgets and for
online backups of live services from google.

Thanks
BaTien
DBGROUPS and BudhNet


On Thu, 2009-07-09 at 10:26 +0100, Nick Johnson (Google) wrote:
 Hi Paul,
 
 On Tue, Jul 7, 2009 at 11:03 PM, Paul NOSPAMjelst...@netzero.com wrote:
 
  Hello,
 
  I have a yahoo e-mail account, where I am getting TONS of spam, that
  are advertising a website like this -
  http://caatainc1.appspot.com/
 
  I traced the domain back to Google, and called them, because sending
  dozens of e-mails resulted in nothing happening.   Guess what?
  Calling them does no good either!!   I did get a little girl, who
  directed me to the APPSPOT.com site, where I could complain about the
  spam, but guess what?   there is NO contact information for reporting
  this crap!!
 
 We have an abuse report form, here:
 http://code.google.com/support/bin/request.py?contact_type=AppEngineContact
 
 Note that simply being linked to in spam is not itself in violation of
 our terms of service - nobody can control who links to them - but it's
 possible this application is in violation of other parts of our TOS.
 
 
  So, if someone on this board could PLEASE let me know how I can stop
  these assholes, from continuing to SPAM me from their GOOGLE appspot,
  using their GMAIL account, I would GREATLY appreciate it.
 
 The emails are almost certainly not being sent from App Engine (which
 would _definitely_ be a violation of our TOS) or from gmail - they're
 simply linking to an App Engine app, and forging a gmail from address.
 Unfortunately, the real hosts of such spammers are usually the sort
 that are either offshore in some spam-friendly jurisdiction, or hosted
 by people who don't pay much attention to abuse reports. My own spam
 folder testifies to how prevalent this is.
 
 Regards,
 
 Nick Johnson
 
 
  
 
 
 
 


--~--~-~--~~~---~--~~
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-appengine@googlegroups.com
To unsubscribe from this group, send email to 
google-appengine+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/google-appengine?hl=en
-~--~~~~--~~--~--~---