Thanks Stuart. It's working as related here<http://stackoverflow.com/questions/11207729/problems-with-class-hierarchy-on-guice-object/11214338#11214338> .
Em terça-feira, 26 de junho de 2012 15h23min20s UTC-3, Stuart McCulloch escreveu: > > On 26 Jun 2012, at 18:48, André Salvati wrote: > > This is related to an example posted by David Chandler using > RequestFactory (GWT) and Objectify. > > > http://turbomanage.wordpress.com/2011/03/25/using-gwt-requestfactory-with-objectify/ > > getGenericSuperclass() is used here ir order to get the business object > which the DAO manipulates. I noticed in debugger that inside > guiceObj.getGenericSuperclass() there is a "genericInfo" field which > contains the business object. Do you know how can I access it? > > > There are various third-party libraries available for accessing generic > types, or you can take advantage of Guice's TypeLiteral: > > Type genericSuperclass = TypeLiteral.get( instance.getClass() > ).getSupertype( ObjectifyDao.class ).getType(); > > This will give you the generic ObjectifyDao type with the appropriate type > arguments filled in based on the implementation type. > > public class ObjectifyDao<T> extends DAOBase > { > > static final int BAD_MODIFIERS = Modifier.FINAL | Modifier.STATIC > | Modifier.TRANSIENT; > > static > { > ObjectifyService.register(NamedList.class); > ObjectifyService.register(AppUser.class); > } > > protected Class<T> clazz; > > public ObjectifyDao() > { > Type genericSuperclass = getClass().getGenericSuperclass(); > // Allow this class to be safely instantiated with or without a > parameterized type > if (genericSuperclass instanceof ParameterizedType) > clazz = (Class<T>) ((ParameterizedType) > genericSuperclass).getActualTypeArguments()[0]; > } > > > > > Em terça-feira, 26 de junho de 2012 13h45min58s UTC-3, Stuart McCulloch > escreveu: >> >> On 26 Jun 2012, at 17:31, André Salvati wrote: >> >> Thanks Stuart. >> >> I've tried to disable circular proxies this way and got same results. >> >> >> Well circular proxies are only one of the possibilities I mentioned - the >> other is using AOP (such as method interception). >> >> Based on the instance class name below (which has EnhancerByGuice) it >> looks like you, or something you're using, has enabled method interception >> for that class. >> I'm guessing that it's related to guice-persist, which uses method >> interception to add transactional behaviour to classes or methods annotated >> with @Transactional. >> >> If so then this is working-as-designed... in order to add the aspect >> behaviour the class must be extended, which will then add an extra class to >> the class hierarchy. >> >> Is there a reason why you depend on a specific getGenericSuperclass? >> Usually such code can be improved to handle proxies by searching further up >> the hierarchy. >> >> Is this the right way?? >> >> new ServletModule() { >> >> @Override >> protected void configureServlets() { >> binder().disableCircularProxies(); >> >> ... >> >> >> bind(EmpresaDao.class).in(RequestScoped.class) >> >> >> [INFO] new() >> [INFO] class -> class br.com.noxxonsat.server.service.EmpresaDao >> [INFO] superclass -> br.com.noxxonsat.server.service.ObjectifyDao<br.com >> .noxxonsat.domain.Empresa> >> >> [INFO] Guice >> [INFO] class -> class >> br.com.noxxonsat.server.service.EmpresaDao$$EnhancerByGuice$$12c0765f >> [INFO] superclass -> class br.com.noxxonsat.server.service.EmpresaDao >> >> >> >> Em terça-feira, 26 de junho de 2012 10h25min44s UTC-3, Stuart McCulloch >> escreveu: >>> >>> >>> On 26 Jun 2012, at 13:53, André Salvati wrote: >>> >>> I'm trying to use Guice to instantiate my Objectify DAOs. My hierarchy >>> is the following: >>> >>> public class EmpresaDao extends ObjectifyDao<Empresa> { ... } >>> >>> public class ObjectifyDao<T> extends DAOBase { ... } >>> >>> When I use "new EmpresaDao()", getClass().getGenericSuperclass() gives >>> me: >>> >>> [INFO] superclass -> >>> br.com.xxxxx.server.service.ObjectifyDao<br.com.xxxxx.domain.Empresa> >>> >>> When I use "injector.getInstance(EmpresaDao.class)", >>> getClass().getGenericSuperclass() gives me: >>> >>> [INFO] superclass -> class br.com.xxxx.server.service.EmpresaDao >>> >>> Obviously, I want to let Guice instantiate my objects with DI. >>> >>> Can someone explain why this is happen? >>> >>> >>> What does instance.getClass() show when using the injector? If the name >>> contains "ByGuice" then Guice has created an intermediate proxy, which is >>> why the superclass differs. >>> >>> Guice creates proxies to handle method interception (AOP) or to break >>> circular dependencies - you could try turning off the circular dependency >>> proxy feature in your module: >>> >>> >>> http://google-guice.googlecode.com/git/javadoc/com/google/inject/Binder.html#disableCircularProxies >>> () >>> >>> or alternatively if you don't need AOP then you can use the "no_aop" >>> flavour of Guice. >>> >>> Is there any way (instantiating with Guice) to get the same superclass >>> as with new(). >>> >>> Thanks. >>> >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "google-guice" group. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msg/google-guice/-/nD9OpdD__GEJ. >>> To post to this group, send email to [email protected]. >>> To unsubscribe from this group, send email to >>> [email protected]. >>> For more options, visit this group at >>> http://groups.google.com/group/google-guice?hl=en. >>> >>> >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "google-guice" group. >> To view this discussion on the web visit >> https://groups.google.com/d/msg/google-guice/-/c9TFlVtmfI0J. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]. >> For more options, visit this group at >> http://groups.google.com/group/google-guice?hl=en. >> >> >> > -- > You received this message because you are subscribed to the Google Groups > "google-guice" group. > To view this discussion on the web visit > https://groups.google.com/d/msg/google-guice/-/NOphc8tGH8IJ. > To post to this group, send email to [email protected]. > To unsubscribe from this group, send email to > [email protected]. > For more options, visit this group at > http://groups.google.com/group/google-guice?hl=en. > > > -- You received this message because you are subscribed to the Google Groups "google-guice" group. To view this discussion on the web visit https://groups.google.com/d/msg/google-guice/-/tZWL_k8nwhsJ. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/google-guice?hl=en.
