On 9 December 2010 20:51, Andrei Pozolotin <[email protected]>wrote:
> 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?
>
I can run the same example fine (also in Eclipse) with the same snapshots,
so it might just be a policy issue.
Are you just using right-click -> Run As Java Applet ? Do you have a custom
security policy for applet code?
> 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]<google-guice%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/google-guice?hl=en.
>
>
--
Cheers, Stuart
--
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.