Guice context binding problem

1,007 views
Skip to first unread message

TuoKor

unread,
Jul 17, 2009, 6:06:01 AM7/17/09
to google-guice
Hi,

I've been trying to bind InitialContext to Context so that I could
bind a DataSource from jndi. For some reason guice crashes with the
following error when trying to bind InitialContext.
The application that I'm writing is a web app and the module which
loads context is added in the GuiceServletContextListener


The Error:
SEVERE: Exception sending context initialized event to listener
instance of class com.webapp.listeners.GuiceLoader
com.google.inject.internal.ComputationException:
com.google.inject.internal.cglib.core.CodeGenerationException:
java.lang.reflect.InvocationTargetException-->null
at com.google.inject.internal.MapMaker$StrategyImpl.compute
(MapMaker.java:553)
at com.google.inject.internal.MapMaker$StrategyImpl.compute
(MapMaker.java:419)
at com.google.inject.internal.CustomConcurrentHashMap
$ComputingImpl.get(CustomConcurrentHashMap.java:2041)
at com.google.inject.internal.FailableCache.get(FailableCache.java:
46)
at com.google.inject.ConstructorInjectorStore.get
(ConstructorInjectorStore.java:52)
at com.google.inject.ConstructorBindingImpl.initialize
(ConstructorBindingImpl.java:57)
at com.google.inject.InjectorImpl.initializeBinding(InjectorImpl.java:
377)
at com.google.inject.InjectorImpl.createJustInTimeBinding
(InjectorImpl.java:645)
at com.google.inject.InjectorImpl.createJustInTimeBindingRecursive
(InjectorImpl.java:581)
at com.google.inject.InjectorImpl.getJustInTimeBinding
(InjectorImpl.java:172)
at com.google.inject.InjectorImpl.getBindingOrThrow(InjectorImpl.java:
132)
at com.google.inject.InjectorImpl.getInternalFactory
(InjectorImpl.java:651)
at com.google.inject.FactoryProxy.notify(FactoryProxy.java:48)
at com.google.inject.BindingProcessor.runCreationListeners
(BindingProcessor.java:230)
at com.google.inject.InjectorBuilder.initializeStatically
(InjectorBuilder.java:131)
at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:105)
at com.google.inject.Guice.createInjector(Guice.java:92)
at com.google.inject.Guice.createInjector(Guice.java:69)
at com.google.inject.Guice.createInjector(Guice.java:59)
at fi.bitec.mobilesafe.listeners.GuiceLoader.getInjector
(GuiceLoader.java:19)
at
com.google.inject.servlet.GuiceServletContextListener.contextInitialized
(GuiceServletContextListener.java:43)
at org.apache.catalina.core.StandardContext.listenerStart
(StandardContext.java:3934)
at org.apache.catalina.core.StandardContext.start
(StandardContext.java:4429)
at org.apache.catalina.core.StandardContext.reload
(StandardContext.java:3190)
at org.apache.catalina.loader.WebappLoader.backgroundProcess
(WebappLoader.java:404)
at org.apache.catalina.core.ContainerBase.backgroundProcess
(ContainerBase.java:1309)
at org.apache.catalina.core.ContainerBase
$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1601)
at org.apache.catalina.core.ContainerBase
$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase
$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1610)
at org.apache.catalina.core.ContainerBase
$ContainerBackgroundProcessor.run(ContainerBase.java:1590)
at java.lang.Thread.run(Unknown Source)
Caused by:
com.google.inject.internal.cglib.core.CodeGenerationException:
java.lang.reflect.InvocationTargetException-->null
at com.google.inject.internal.cglib.core.AbstractClassGenerator.create
(AbstractClassGenerator.java:237)
at com.google.inject.internal.cglib.reflect.FastClass$Generator.create
(FastClass.java:64)
at com.google.inject.internal.BytecodeGen.newFastClass
(BytecodeGen.java:166)
at com.google.inject.DefaultConstructionProxyFactory$1.<init>
(DefaultConstructionProxyFactory.java:54)
at com.google.inject.DefaultConstructionProxyFactory.create
(DefaultConstructionProxyFactory.java:52)
at com.google.inject.ProxyFactory.create(ProxyFactory.java:152)
at com.google.inject.ConstructorInjectorStore.createConstructor
(ConstructorInjectorStore.java:84)
at com.google.inject.ConstructorInjectorStore.access$000
(ConstructorInjectorStore.java:31)
at com.google.inject.ConstructorInjectorStore$1.create
(ConstructorInjectorStore.java:39)
at com.google.inject.ConstructorInjectorStore$1.create
(ConstructorInjectorStore.java:35)
at com.google.inject.internal.FailableCache$1.apply
(FailableCache.java:35)
at com.google.inject.internal.MapMaker$StrategyImpl.compute
(MapMaker.java:549)
... 30 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.google.inject.internal.cglib.core.ReflectUtils.defineClass
(ReflectUtils.java:384)
at com.google.inject.internal.cglib.core.AbstractClassGenerator.create
(AbstractClassGenerator.java:219)
... 41 more
Caused by: java.lang.NoClassDefFoundError: com/google/inject/internal/
cglib/reflect/FastClass
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
... 47 more
Caused by: java.lang.ClassNotFoundException:
com.google.inject.internal.cglib.reflect.FastClass
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
... 49 more

The GuiceContextListener
import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;


/**
* Application Lifecycle Listener implementation class GuiceLoader
*
*/
public class GuiceLoader extends GuiceServletContextListener {

@Override
public Injector getInjector() {
return Guice.createInjector(new ServletConfs(), new DatabaseModule
());
}
}

And finally the DatabaseModule

public class DatabaseModule extends AbstractModule {

@Override
protected void configure() {

bind(Context.class).to(InitialContext.class);
bind(DataSource.class).toProvider(fromJndi(DataSource.class,
"java:comp/env/jdbc/database"));

}
}

Jean-Eudes COUIGNOUX

unread,
Jul 28, 2009, 10:13:03 AM7/28/09
to google...@googlegroups.com
Hi,

I've the same issue.

I try to migrate a web application based to wicket with guice 1.0 to 2.0. I've no problem with guice 1.0, but the same error that you with guice 2.0.
To bypass the problem I use :

public class ModuleConf extends AbstractModule {

    @Override
    protected void configure() {
        /*
         * Configuration pour la gestion des resources externes
         */

        bind(DataSource.class).toProvider(fromJndi(DataSource.class, "myDatasource"));

        /*
         * Configuration de Tallystick
         */


    }
   
    @Provides
    public Context initContext() {
        try {
            return new InitialContext();
        } catch (NamingException e) {
            throw new RuntimeException("Unable to initialize context.",e);
        }
    }
   
}




2009/7/17 TuoKor <tuo...@gmail.com>
Reply all
Reply to author
Forward
0 new messages