1 Reply Latest reply on Oct 5, 2010 7:39 AM by jharting

    Best Approach for Home interface with User reference in a Rest seam service.

    mmaia

      Hi,


      I am developing my first server side Seam and Android client application and I am facing some new scenarios as expected.


      Now specifically for this app, I decided not to keep any state because probably 80% to 90% of the server calls on the REST service will be specifically to do a simple synchronization and the client is gone for a while, so there is(probably) no point on keeping any state on the server side for these calls.


      Well there is a specific routine where I need to persist an Object sent by device to the server side and this object is bind to a specific user(a very common scenario in my opinion).


      So there goes some code to ilustrate.


      The Home interface has a user injected by Seam:



      @Name("pesoHome")
      public class PesoHome extends EntityHome<Peso> {
      
          private static final long serialVersionUID = 6087763635317971234L;
      
          @In
          User user;
      



      Than we have a rest service wich uses this home interface:




      public class PesoRest{
      
          @Logger
          Log log;
      
          @In(create = true)
          UserPesquisa userPesquisa;
      
          @In(create = true)
          PesoHome pesoHome;
      
          @POST
          @Path("/cadastrar/{userEmail}")
          @Consumes(MediaType.APPLICATION_JSON)
          public Response cadastraPeso(@PathParam("userEmail") String email, String jsonString)
          {
                  String json = jsonString;
                  System.out.println("String jSon no servidor ==>> " + json);



      And than because of the User injection in the home interface the following error triggers at runtime:



      Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: pesoHome
          at org.jboss.seam.Component.newInstance(Component.java:2144)
          ... 46 more
      Caused by: org.jboss.seam.RequiredException: @In attribute requires non-null value: pesoHome.user




      Notice that in the request the e-mail and/or the JSon object brings information about this user wich allows to recover this user using the also injected userPesquisa reference. I know I could have a different approach where I would build a seam component with no references to user and than in it build the user and place it in a new conversation and than inject the home reference I need, but...
      I was wondering that probably there should be some more standard approach for this as it is a common scenario. Any suggestions? :)