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.

Reply via email to