On Nov 23, 2:44 pm, David Chandler <drfibona...@google.com> wrote:
> You're welcome, Richard, glad to help.
>
> My understanding is that Objectify always uses Keys to express
> relationships. If you want to retrieve the entity directly, you can
> add a getter/setter that calls Objectify to get / put an entity by its
> Key. These helper methods are likely what you would expose in the
> EntityProxy so client-side code won't have any references to Key. This
> works today.
>
> /dmc
>
> On Tue, Nov 23, 2010 at 5:23 PM, Richard Berger <richardlan...@gmail.com> wrote:
> > Thank you for the quick and clear reply which completely fixed my
> > problem. On a higher level, when support for Keys is added, should I
> > use the Key or the Entity? I can see that there may be some value in
> > just having the Key and getting the Entity when I need it - although
> > it seems like I will nearly always be needing the Entity. But perhaps
> > I am missing some key distinction.
>
> > Thanks so much for taking the time to share your advice!
> > RB
>
> > On Nov 23, 12:26 pm, David Chandler <drfibona...@google.com> wrote:
> >> Hi Richard,
>
> >> RequestFactory doesn't yet support arrays. Use List<T> instead. Also
> >> ensure that your Proxy doesn't expose the Objectify Key type, as only
> >> entity types and a few value types are supported until 2.1.1.
>
> >> /dmc
>
> >> On Tue, Nov 23, 2010 at 2:23 PM, Richard Berger <richardlan...@gmail.com> wrote:
> >> > Goal: Save an object an associated collection
> >> > How to do this with Request Factory and Objectify?
>
> >> > I have an object that looks like:
> >> > Commitment.java (in com.br.commit2.server.domain)
> >> > public class Commitment {
> >> > @Id private Long id;
> >> > private String title;
> >> > // other simple fields
> >> > private Integer version;
>
> >> > // Methods exposed through Request factory
>
> >> > // Getters, setters
> >> > }
>
> >> > Since I am trying to use RequestFactory, I also have:
> >> > CommitmentProxy.java (in com.rb.commit2.shared)
> >> > @ProxyFor (Commitment.class)
> >> > public interface CommitmentProxy extends EntityProxy {
> >> > public String getTitle();
> >> > public void setTitle(String title);
> >> > // rest of interface
> >> > }
>
> >> > Also have
> >> > public interface CommitmentSystemRequestFactory extends RequestFactory
> >> > {
> >> > CommitmentRequest commitmentRequest();
> >> > ...
> >> > }
>
> >> > And...
> >> > @Service (Commitment.class)
> >> > public interface CommitmentRequest extends RequestContext {
> >> > Request<Long> countCommitments();
> >> > // Other methods, implemented in Commitment.java above)
> >> > }
>
> >> > Finally, in my Commit2Binder.java, I have code that works to create a
> >> > commitment when a button is clicked (this is just a test app)
> >> > CommitmentRequest request = requestFactory.commitmentRequest();
> >> > CommitmentProxy newCommitment =
> >> > request.create(CommitmentProxy.class);
> >> > newCommitment.setTitle("Test Objectify title");
> >> > newCommitment.setDescription("Test Objectify Description");
> >> > Request<Void> createReq =
> >> > request.persistCommitment().using(newCommitment);
>
> >> > createReq.fire(new Receiver<Void>() {
> >> > @Override
> >> > public void onSuccess(Void response) {
> >> > Window.alert("Created Commitment!");
>
> >> > }
> >> > });
>
> >> > Surprisingly enough it all works fine. Now, I want to model a new
> >> > object, a user with two collections of the Commitment object above.
> >> > These are unowned collections. Following the objectify-appengine/
> >> > wiki//IntroductionToObjectify#Relationships, I create CommitUser
>
> >> > public class CommitUser implements Serializable {
> >> > private static final long serialVersionUID = 1L;
> >> > @Id private Long id;
> >> > private String googleEmail;
> >> > ...
> >> > private Key<Commitment>[] dueByMeCommitments;
> >> > private Key<Commitment>[] dueToMeCommitments;
> >> > }
>
> >> > And the related CommitUserProxy
> >> > @ProxyFor (CommitUser.class)
> >> > public interface CommitUserProxy extends EntityProxy {
> >> > public int getUserLevel();
> >> > ....
> >> > }
>
> >> > And a new Request Interface
> >> > @Service (CommitUser.class)
> >> > public interface CommitUserRequest extends RequestContext {
> >> > InstanceRequest<CommitUserProxy, Void> persistCommitUser();
> >> > }
>
> >> > And add a line to my CommitmentSystemRequestFactory.java for
> >> > CommitUserRequest.
>
> >> > Now, in my Commit2Binder, I want to create a new CommitUser - empty
> >> > collections are fine to start with. But the code I have, essentially
> >> > the code that works for creating a Commitment, fails. The code is:
> >> > CommitUserRequest request = requestFactory.commitUserRequest();
> >> > CommitUserProxy newCommitUser =
> >> > request.create(CommitUserProxy.class);
> >> > newCommitUser.setGoogleNickname("Richard");
> >> > newCommitUser.setGoogleEmail("richardlan...@gmail.com");
> >> > newCommitUser.setUserLevel(1);
> >> > newCommitUser.setDueByMeCommitments(null);
> >> > newCommitUser.setDueToMeCommitments(null);
> >> > Request<Void> createReq =
> >> > request.persistCommitUser().using(newCommitUser);
>
> >> > createReq.fire(new Receiver<Void>() {
> >> > @Override
> >> > public void onSuccess(Void response) {
> >> > Window.alert("Created User!");
>
> >> > }
> >> > @Override
> >> > public void onFailure(ServerFailure error) {
> >> > Window.alert(error.getMessage());
> >> > }
> >> > });
> >> > ;
>
> >> > The failure occurs when the rquest is fired and the error is:
> >> > Caused by: java.lang.ClassCastException:
> >> > sun.reflect.generics.reflectiveObjects.GenericArrayTypeImpl cannot be
> >> > cast to java.lang.Class
> >> > If I remove the calls to setDueByMeCommitments, setDueToMeCommitments
> >> > I get the same error.
>
> >> > I start to look at other ideas, but it starts to seem that I am going
> >> > down the wrong path, since this should be something relative. Any
> >> > pointers and thoughts would be greatly appreciated.
>
> >> > Thanks!
> >> > RB
>
> >> > --
> >> > You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
> >> > To post to this group, send email to google-web-toolkit@googlegroups.com.
> >> > To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
> >> > For more options, visit this group athttp://groups.google.com/group/google-web-toolkit?hl=en.
>
> >> --
> >> David Chandler
> >> Developer Programs Engineer, Google Web Toolkithttp://googlewebtoolkit.blogspot.com/
>
> > --
> > You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
> > To post to this group, send email to google-web-toolkit@googlegroups.com.
> > To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
> > For more options, visit this group athttp://groups.google.com/group/google-web-toolkit?hl=en.
>
> --
> David Chandler
> Developer Programs Engineer, Google Web Toolkithttp://googlewebtoolkit.blogspot.com/
--
You received this message because you are subscribed to the Google Groups "Google Web Toolkit" group.
To post to this group, send email to google-web-toolkit@googlegroups.com.
To unsubscribe from this group, send email to google-web-toolkit+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/google-web-toolkit?hl=en.
No comments:
Post a Comment