On Wednesday, January 5, 2011 11:05:10 PM UTC+1, Eric Andresen wrote:
>
> I'm using the 2.1.1 RequestFactory in a Spring environment.  I would 
> like to use my Spring Service class to provide both my Entity Locator 
> and my RequestContext methods. 
>
> I can define my object's requestContext as: 
>
> @Service(value=MyObjectService.class,locator=SpringServiceLocator.class) 
> public interface MyObjectRequest extends RequestContext { ... } 
>
> and give it a Service Locator that retrieves the service class for the 
> current scope: 
>
> public class SpringServiceLocator implements ServiceLocator 
> { 
> @Override 
> public Object getInstance (Class<?> clazz) 
> { 
>     return 
> ApplicationContextProvider.getContext().getBean(clazz.getSimpleName(),clazz); 
>
> } 
> } 
>
> which finds a Service that looks like: 
> @Scope("session") 
> @Service("MyObjectService") 
> @Transactional(isolation = Isolation.DEFAULT, propagation = 
> Propagation.REQUIRED) 
> public class MyObjectServiceImpl extends Locator<MyObject, Long> 
> implements MyObjectService { ... } 
>
> This part works great.
>

Actually, no: RequestFactory aggressively caches locators and service 
instances and re-uses them across requests. So your service won't have it's 
@Scope("session") applied at all (unless Spring actually proxies it to 
always hit the "correct" instance? – disclaimer: I don't use Spring).

Is there a way to point the Entity's Locator to this class using 
> something like a ServiceLocator?  What I'd like is something like 
> this: 
>
> @ProxyFor(value=MyObject.class,locator=MyObjectService.class,locatorLocator=SpringServiceLocator.class)
>  
>
> public interface MyObjectProxy extends EntityProxy { ... } 
>
> I'm trying to keep all of my object finders in my MyObjectService 
> layer, but I don't want GWT to construct it, I want to use a locator 
> to find the one Spring has already instantiated for me.
>

Then you have to define a ServiceLayerDecorator and override createLocator 
to use Spring instead of the default implementation (which instantiates it 
using a no-arg constructor).
To use that ServiceLayerDecorator, you have to extend RequestFactoryServlet 
and pass the decorator to the servlet's constructor.

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

Reply via email to