Nevermind, if had to do something like that:

Instance<Bar> barInstance = fooInstance.select(Bar.class);
Bar bar = barInstance.get();
barInstance.destroy(bar);

----------------------------------------
> From: [email protected]
> To: [email protected]
> Subject: NPE on Instance.destroy()
> Date: Wed, 24 Feb 2016 08:49:31 +0100
>
> Hi,
>
> I've come accross a NPE while calling Instance.destroy() whith @Dependent 
> beans I got from the same Instance, is it normal? (I am using TomEE 7M1 + OWB 
> 1.6.3)
>
> More questions about Instance:
> - does the remove() method on the iterator obtained via Instance.iterator() 
> do anything (like calling Instance.destroy() with the current object)?
> - what happens if destroy() is called on an @ApplicationScoped bean
>
> Thanks,
>
> Xavier
>
> import java.util.Iterator;
>
> import javax.enterprise.inject.Instance;
> import javax.inject.Inject;
>
> import org.apache.openejb.junit.ApplicationComposerRule;
> import org.apache.openejb.testing.CdiExtensions;
> import org.apache.openejb.testing.Module;
> import org.junit.Rule;
> import org.junit.Test;
> import org.junit.rules.TestRule;
>
> public @CdiExtensions class InstanceTest {
>
> public static class Bar implements Foo {}
>
> public static class Baz implements Foo {}
>
> public interface Foo {}
>
> public final @Rule TestRule application = new ApplicationComposerRule(this);
>
> private @Inject Instance<Bar> barInstance;
> private @Inject Instance<Foo> fooInstance;
>
> public @Module Class<?>[] classes() {
> return new Class<?>[] {Bar.class, Baz.class};
> }
>
> public @Test void getDestroy() {
> Bar bar = this.barInstance.get();
> System.out.println(bar.getClass().getName());
> this.fooInstance.destroy(bar); // NPE
> }
>
> public @Test void iterateDestroy() {
> for (Foo foo : this.fooInstance) {
> System.out.println(foo.getClass().getName());
> this.fooInstance.destroy(foo);
> }
> }
>
> public @Test void iterateRemove() {
> Iterator<Foo> iterator = this.fooInstance.iterator();
> while (iterator.hasNext()) {
> System.out.println(iterator.next().getClass().getName());
> iterator.remove();
> }
> }
>
> public @Test void selectGetDestroy() {
> Bar bar = this.fooInstance.select(Bar.class).get();
> System.out.println(bar.getClass().getName());
> this.fooInstance.destroy(bar); // NPE
> }
>
> public @Test void selectIterateDestroy() {
> for (Bar bar : this.fooInstance.select(Bar.class)) {
> System.out.println(bar.getClass().getName());
> this.fooInstance.destroy(bar); // NPE
> }
> }
>
> public @Test void selectIterateRemove() {
> Iterator<Bar> iterator = this.fooInstance.select(Bar.class).iterator();
> while (iterator.hasNext()) {
> System.out.println(iterator.next().getClass().getName());
> iterator.remove();
> }
> }
> }
>
>
                                          

Reply via email to