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.