opn
unread,Mar 26, 2011, 1:53:58 PM3/26/11Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to google-guice
Hello,
i've got a problem since i migrated from Warp Persist to guice persist
which i can not really understand.
I'm working on an app that is using the built in login mechanism from
glassfishV3. To use this I'm injecting a Provider<HttpServletRequest>
in my class.
When using Warp Persist that is not a problem. I set everything up,
especially to mention the Guice Filter, (also the new version 3.0 one)
and everything works like a charm! I can inject the Request, Session
and all the stuff.
Now I just removed the Warp dependencies and set up Guice Persist and
suddenly i get the exception:
"Error in custom provider, com.google.inject.OutOfScopeException:
Cannot access scoped object. Either we are not currently inside an
HTTP Servlet request, or you may have forgotten to apply
com.google.inject.servlet.GuiceFilter as a servlet filter for this
request."
when I'm trying to inject a HttpServletRequest.
The funny thing is that Guice Persist itself is working. I can get,
insert and remove Entities without problems.
I also did not change anything regarding the GuiceFilter!
I spent the whole day trying things out, but nothing solved my
problem. Mainly i played around with the filter mappings in my web.xml
and the ServletModule where I define my JPA Unit.
My setup here is:
GlassfishV3.1
Guice 3.0
web.xml parts that could be important:
<filter>
<filter-name>guiceFiler</filter-name>
<filter-class>com.google.inject.servlet.GuiceFilter</filter-
class>
</filter>
<filter-mapping>
<filter-name>guiceFiler</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<security-constraint>
<web-resource-collection>
<web-resource-name>login area</web-resource-name>
<url-pattern>/index.xhtml</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
The security constraint makes an automatic redirect to https on the
login page (index.xhtml) but, as already said, warp persist had no
problem with that.
ServletModule:
public class MyModule extends ServletModule {
//got a few Singleton bindings in here, this shouldn't be a problem,
should it?
/* Guice Persist */
install(new JpaPersistModule("MyPersistenceUnit"));
bind(GuiceInit.class).asEagerSingleton();
//filter("/*").through(GuiceFilter.class); tried that
filter("/*").through(PersistFilter.class);
}
GuiceInit class:
private final PersistService service;
public class GuiceInit {
@Inject
GuiceInit(PersistService service) {
this.service = service;
this.service.start();
}
public PersistService getService() {
return service;
}
}
public class UserDaoImpl extends DaoImpl<Long, User> implements
UserDao {
private final Provider<HttpServletRequest> requestProvider;
@Inject
public UserDaoImpl(Provider<EntityManager> entityManagerProvider,
Provider<HttpServletRequest> requestProvider) {
super(entityManagerProvider);
this.requestProvider = requestProvider;
}
@Transactional
public User logUserIn(String loginName, String password) {
try {
//User user = findByLoginName("admin"); THAT WORKS!
HttpServletRequest request = requestProvider.get() //THAT
DOES NOT :(
...
} ...
}
I was also able to lookup the Request by myself, so it is there! ; )
I'm happy about every hint, as i would like to migrate completely to
the new stuff after i read yesterday in the warp persist forum that
warp persist now lives on as guice persist!
Regards
Alex