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 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.