People of Guice, hello;

I am using this guice:

                <dependency>
                        <groupId>org.sonatype.sisu</groupId>
                        <artifactId>sisu-guice</artifactId>
                        <version>3.0-SNAPSHOT</version>
                </dependency>
                <dependency>
                        <groupId>org.sonatype.sisu.inject</groupId>
                        <artifactId>guice-assistedinject</artifactId>
                        <version>3.0-SNAPSHOT</version>
                </dependency>

and I observe the following:

when the code below runs as "app" then assited inject works as
expected;

but when the code is ran as "applet" (in eclipse applet viewer) then
assisted inject fails with an exception;

do you have any experience with this?
is it due to different classloaders?
is it due different threads?

thank you;

Andrei

///////////////////////////////////////////
// CODE:
package test.assist;

import javax.swing.JApplet;

@SuppressWarnings("serial")
public class AssistedApplet extends JApplet {

        static void log(final String text) {
                System.out.println(text);
        }

        public static void main(final String... args) {

                log("run as app");

                final AssistedApplet applet = new AssistedApplet();

                applet.init();

        }

        @Override
        public void init() {

                log("run as applet");

                final Injector injector = initInject();

                final PaymentFactory factory = injector
                                .getInstance(PaymentFactory.class);

                final Payment one = factory.create("one");
                log("one.process:" + one.process());

                final Payment two = factory.create("two");
                log("two.process:" + two.process());

        }

        Injector initInject() {

                final Module module = new AbstractModule() {
                        @Override
                        protected void configure() {
                                install(new 
FactoryModuleBuilder().implement(Payment.class,
                                                
PaymentImpl.class).build(PaymentFactory.class));
                        }
                };

                final Injector injector = Guice.createInjector(module);

                return injector;

        }
}

interface Payment {
        String process();
}

class PaymentImpl implements Payment {

        private final String param;

        @Inject
        PaymentImpl(final Accounts accounts, final @Assisted String param) {
                AssistedApplet.log("PaymentImpl:init:" + param);
                this.param = param;
        }

        @Override
        public String process() {
                return param;
        }

}

interface PaymentFactory {
        Payment create(final String param);
}

@ImplementedBy(AccountsImpl.class)
interface Accounts {
        void validate();
}

@Singleton
class AccountsImpl implements Accounts {

        @Inject
        AccountsImpl() {
                AssistedApplet.log("AccountsImpl:init");
        }

        @Override
        public void validate() {
        }

}

///////////////////////////////////////////
//LOG AS APP:
run as app
run as applet
AccountsImpl:init
PaymentImpl:init:one
one.process:one
PaymentImpl:init:two
two.process:two

///////////////////////////////////////////
LOG AS APPLET
Warning: Can't read AppletViewer properties file: /home/user1/.hotjava/
properties Using defaults.
run as applet
com.google.inject.CreationException: Guice creation errors:

1) Error injecting method, java.lang.NoSuchMethodError:
com.google.inject.binder.LinkedBindingBuilder.toConstructor(Ljava/lang/
reflect/Constructor;Lcom/google/inject/TypeLiteral;)Lcom/google/inject/
binder/ScopedBindingBuilder;
  at
com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:
538)
  at com.google.inject.assistedinject.FactoryModuleBuilder
$1.configure(FactoryModuleBuilder.java:315)

1 error
        at
com.google.inject.internal.Errors.throwCreationExceptionIfErrorsExist(Errors.java:
354)
        at
com.google.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:
173)
        at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:113)
        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 test.assist.AssistedApplet.initInject(AssistedApplet.java:60)
        at test.assist.AssistedApplet.init(AssistedApplet.java:37)
        at sun.applet.AppletPanel.run(AppletPanel.java:424)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NoSuchMethodError:
com.google.inject.binder.LinkedBindingBuilder.toConstructor(Ljava/lang/
reflect/Constructor;Lcom/google/inject/TypeLiteral;)Lcom/google/inject/
binder/ScopedBindingBuilder;
        at
com.google.inject.assistedinject.FactoryProvider2$2.configure(FactoryProvider2.java:
594)
        at com.google.inject.AbstractModule.configure(AbstractModule.java:59)
        at com.google.inject.spi.Elements
$RecordingBinder.install(Elements.java:223)
        at com.google.inject.spi.Elements.getElements(Elements.java:101)
        at com.google.inject.InjectorShell$Builder.build(InjectorShell.java:
135)
        at com.google.inject.InjectorBuilder.build(InjectorBuilder.java:102)
        at
com.google.inject.InjectorImpl.createChildInjector(InjectorImpl.java:
144)
        at
com.google.inject.InjectorImpl.createChildInjector(InjectorImpl.java:
151)
        at
com.google.inject.assistedinject.FactoryProvider2.getBindingFromNewInjector(FactoryProvider2.java:
600)
        at
com.google.inject.assistedinject.FactoryProvider2.initialize(FactoryProvider2.java:
555)
        at com.google.inject.assistedinject.FactoryProvider2$$FastClassByGuice
$$9dcdf6d7.invoke(<generated>)
        at
com.google.inject.internal.cglib.reflect.FastMethod.invoke(FastMethod.java:
53)
        at com.google.inject.SingleMethodInjector
$1.invoke(SingleMethodInjector.java:59)
        at
com.google.inject.SingleMethodInjector.inject(SingleMethodInjector.java:
91)
        at
com.google.inject.MembersInjectorImpl.injectMembers(MembersInjectorImpl.java:
99)
        at com.google.inject.MembersInjectorImpl
$1.call(MembersInjectorImpl.java:76)
        at com.google.inject.MembersInjectorImpl
$1.call(MembersInjectorImpl.java:74)
        at com.google.inject.InjectorImpl.callInContext(InjectorImpl.java:
804)
        at
com.google.inject.MembersInjectorImpl.injectAndNotify(MembersInjectorImpl.java:
74)
        at com.google.inject.Initializer
$InjectableReference.get(Initializer.java:145)
        at com.google.inject.Initializer.injectAll(Initializer.java:92)
        at
com.google.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:
171)
        ... 8 more

///////////////////////////////////////////

-- 
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