Thank you Stephan, that did the trick. On Sun, Aug 5, 2012 at 3:50 AM, Stephan Classen <[email protected]> wrote: > Hi William > > The problem is the following: > > You can't inject an EntityManager or an EntityManagerFactory until the > PersistService.start() method has run. > This is because the start method creates the EntityManagerFactory. > > So to fix your code you can inject Provider<XXX> instead of an instance of > XXX. > > Hope this helps. > > > > On 08/04/2012 12:47 AM, William Osmond wrote: > > Hello group, > I've seen other people with similar problems to mine, however none of the > solutions presented are working here. Hopefully one of you can point me in > the right direction. > > I'm attempting to get Guice, JPA, and Shiro all to play nice with each other > (and Wicket, once this is nailed down). I'm trying to deploy the following > onto resin-4.0.29: > > web.xml - > > <?xml version="1.0" encoding="UTF-8"?> > <web-app xmlns="http://java.sun.com/xml/ns/javaee" > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > xsi:schemaLocation="http://java.sun.com/xml/ns/javaee > http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" > version="2.5"> > > <display-name>MyApp</display-name> > > <filter> > <filter-name>GuiceFilter</filter-name> > <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> > </filter> > <filter-mapping> > <filter-name>GuiceFilter</filter-name> > <url-pattern>/*</url-pattern> > </filter-mapping> > > <listener> > <listener-class>my.app.guice.ServletBootstrap</listener-class> > </listener> > </web-app> > > ServletBootstrap.class - > > public class ServletBootstrap extends GuiceServletContextListener { > private ServletContext servletContext; > > @Override > public void contextInitialized(ServletContextEvent servletContextEvent) > { > servletContext = servletContextEvent.getServletContext(); > super.contextInitialized(servletContextEvent); > } > > @Override > protected Injector getInjector() { > ServletModule servletModule = new ServletModule() { > > @Override > protected void configureServlets() { > super.configureServlets(); > install(new JpaPersistModule("serverPersistenceUnit")); > install(new WebSecurityModule(servletContext)); > filter("/*").through(PersistFilter.class); > filter("/*").through(GuiceShiroFilter.class); > } > }; > > return Guice.createInjector(servletModule); > } > } > > WebSecurityModule.class - > > public class WebSecurityModule extends ShiroWebModule { > public WebSecurityModule(ServletContext servletContext) { > super(servletContext); > } > > @Override > protected void configureShiroWeb() { > bindRealm().to(BaseRealm.class); > addFilterChain("/**", ANON); > } > } > > BaseRealm.class - > > public class BaseRealm extends AuthorizingRealm { > @Inject private SecurityDAO securityDAO; > @Inject private UserDAO userDAO; > > public BaseRealm() { > setName("BaseRealm"); > } > > @Override > protected SimpleAuthenticationInfo > doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws > AuthenticationException { > UsernamePasswordToken token = (UsernamePasswordToken) > authenticationToken; > String username = token.getUsername(); > User user = securityDAO.findUserByUsername(username); > if (user != null) { > return new SimpleAuthenticationInfo(user.getId(), > user.getPasswordHash(), getName()); > } else { > return null; > } > } > > @Override > protected SimpleAuthorizationInfo > doGetAuthorizationInfo(PrincipalCollection principalCollection) { > Long userId = (Long) > principalCollection.fromRealm(getName()).iterator().next(); > User user = userDAO.find(userId); > if (user != null) { > SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); > List<String> permissions = identifyPermissions(user); > info.addStringPermissions(permissions); > return info; > } else { > return null; > } > } > > private List<String> identifyPermissions(User user) { > List<String> permissions = new ArrayList<String>(); > if (user.isCreator()) { > permissions.add("repository:create"); > } > for (Long id : securityDAO.findReposOwnedByUser(user)) { > permissions.add("repository:delete:" + id); > permissions.add("repository:" + id); > } > for (Long id : securityDAO.findReposAdministerableByUser(user)) { > permissions.add("repository:" + id); > } > for (Long id : securityDAO.findReposContributableByUser(user)) { > permissions.add("repository:" + id + ":create"); > permissions.add("repository:" + id + ":view"); > } > for (Long id : securityDAO.findReposViewableByUser(user)) { > permissions.add("repository:" + id + ":view"); > permissions.add("repository:" + id + ":create:note"); > } > return permissions; > } > } > > And when I run it, I get this: > > 03 15:42:02.859] {main} com.google.inject.CreationException: Guice creation > errors: > > 1) Error in custom provider, > java.lang.NullPointerException > while locating > com.google.inject.persist.jpa.JpaPersistService > while locating javax.persistence.EntityManager > for field at > com.brightandbrown.bbfiles.data.daos.SecurityDAO.em(SecurityDAO.java:10) > while locating > com.brightandbrown.bbfiles.data.daos.SecurityDAO > for field at > com.brightandbrown.bbfiles.shiro.BaseRealm.securityDAO(BaseRealm.java:15) > while locating > com.brightandbrown.bbfiles.shiro.BaseRealm > while locating org.apache.shiro.realm.Realm > annotated with @com.google.inject.multibindings.Element(setName=,uniqueId=3) > at > org.apache.shiro.guice.ShiroModule.bindRealm(ShiroModule.java:103) > while locating > java.util.Set<org.apache.shiro.realm.Realm> > while locating > java.util.Collection<org.apache.shiro.realm.Realm> > for parameter 0 at > org.apache.shiro.web.mgt.DefaultWebSecurityManager.<init>(DefaultWebSecurityManager.java:85) > at > org.apache.shiro.guice.ShiroModule.configure(ShiroModule.java:55) > while locating org.apache.shiro.mgt.SecurityManager > Caused by: java.lang.NullPointerException > at > com.google.inject.persist.jpa.JpaPersistService.begin(JpaPersistService.java:70) > at > com.google.inject.persist.jpa.JpaPersistService.get(JpaPersistService.java:50) > at > com.google.inject.persist.jpa.JpaPersistService.get(JpaPersistService.java:34) > at > com.google.inject.internal.BoundProviderFactory.get(BoundProviderFactory.java:55) > at > com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) > at > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.SingleFieldInjector.inject(SingleFieldInjector.java:53) > at > com.google.inject.internal.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:110) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:94) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54) > at > com.google.inject.internal.InjectorImpl$4$1.call(InjectorImpl.java:978) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.InjectorImpl$4.get(InjectorImpl.java:974) > at > com.google.inject.multibindings.Multibinder$RealMultibinder.get(Multibinder.java:326) > at > com.google.inject.multibindings.Multibinder$RealMultibinder.get(Multibinder.java:220) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.FactoryProxy.get(FactoryProxy.java:54) > at > com.google.inject.internal.SingleParameterInjector.inject(SingleParameterInjector.java:38) > at > com.google.inject.internal.SingleParameterInjector.getAll(SingleParameterInjector.java:62) > at > com.google.inject.internal.ConstructorInjector.construct(ConstructorInjector.java:84) > at > com.google.inject.internal.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:254) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:46) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1031) > at > com.google.inject.internal.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:40) > at > com.google.inject.Scopes$1$1.get(Scopes.java:65) > at > com.google.inject.internal.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:40) > at > com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:204) > at > com.google.inject.internal.InternalInjectorCreator$1.call(InternalInjectorCreator.java:198) > at > com.google.inject.internal.InjectorImpl.callInContext(InjectorImpl.java:1024) > at > com.google.inject.internal.InternalInjectorCreator.loadEagerSingletons(InternalInjectorCreator.java:198) > at > com.google.inject.internal.InternalInjectorCreator.injectDynamically(InternalInjectorCreator.java:179) > at > com.google.inject.internal.InternalInjectorCreator.build(InternalInjectorCreator.java:109) > at > com.google.inject.Guice.createInjector(Guice.java:95) > at > com.google.inject.Guice.createInjector(Guice.java:72) > at > com.google.inject.Guice.createInjector(Guice.java:62) > at > com.brightandbrown.bbfiles.guice.ServletBootstrap.getInjector(ServletBootstrap.java:37) > at > com.google.inject.servlet.GuiceServletContextListener.contextInitialized(GuiceServletContextListener.java:45) > at > com.brightandbrown.bbfiles.guice.ServletBootstrap.contextInitialized(ServletBootstrap.java:20) > at > com.caucho.server.webapp.WebApp.start(WebApp.java:3575) > at > com.caucho.env.deploy.DeployController.startImpl(DeployController.java:680) > at > com.caucho.env.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:77) > at > com.caucho.env.deploy.DeployController.startOnInit(DeployController.java:530) > at > com.caucho.env.deploy.DeployContainer.start(DeployContainer.java:170) > at > com.caucho.server.webapp.WebAppContainer.start(WebAppContainer.java:728) > at > com.caucho.server.host.Host.start(Host.java:677) > at > com.caucho.env.deploy.DeployController.startImpl(DeployController.java:680) > at > com.caucho.env.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:77) > at > com.caucho.env.deploy.DeployController.startOnInit(DeployController.java:530) > at > com.caucho.env.deploy.DeployContainer.start(DeployContainer.java:170) > at > com.caucho.server.host.HostContainer.start(HostContainer.java:542) > at > com.caucho.server.cluster.ServletService.start(ServletService.java:1337) > at > com.caucho.server.cluster.ServletSystem.start(ServletSystem.java:72) > at > com.caucho.env.service.ResinSystem.startServices(ResinSystem.java:529) > at > com.caucho.env.service.ResinSystem.start(ResinSystem.java:496) > at > com.caucho.server.resin.Resin.start(Resin.java:817) > at > com.caucho.server.resin.Resin.initMain(Resin.java:949) > at > com.caucho.server.resin.Resin.main(Resin.java:1398) > at > sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at > java.lang.reflect.Method.invoke(Method.java:597) > at > com.intellij.rt.execution.application.AppMain.main(AppMain.java:120) > > Any help would be greatly appreciated! > -- > 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/-/u9HN_8RvJCEJ. > 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.
