looks like a bug to me. We should only issue this problem if the injection is into a method, ct or field which has a passivating scope. For ct and method injection there will be another factor to consider, which is a marker whether the injected method should be stored in the CreationalContext (thus also must be Serializable) or not (the injected instance is only used for temporarily during the method/ct invocation and not getting stored). But this is only CDI-1.1...
LieGrue, strub ----- Original Message ----- > From: Arne Limburg <[email protected]> > To: "[email protected]" <[email protected]> > Cc: > Sent: Friday, 10 May 2013, 23:03 > Subject: Re: Possibly invalid passivation capability check > > Hi David, > > Do I read the log correctly and SimpleServlet is @Dependent? Is > SimpleServlet injected into a passivation-capable bean? > If not, I agree with you that this is a bug. > > > Cheers, > Arne > > Am 10.05.13 22:55 schrieb "David Blevins" unter > <[email protected]>: > >> Since the upgrade to 1.2.0 in we have a test failure. There's a servlet >> with constructor injection like so: >> >> >> @Inject >> public SimpleServlet(Car car) { >> this.car = car; >> } >> >> And Car looks like so: >> >> public class Car { >> private final String make = "Lexus", model = "IS > 350"; >> private final int year = 2011; >> >> public String drive(String name) { >> return name + " is on the wheel of a " + year + " > " + make + >> " " + model; >> } >> } >> >> All deploys fine and everything is injected as expected. Now the >> problem. If you introduce a producer, it fails saying Car is not >> passivation capable as required by the SimpleServlet injection point. >> >> public class Car { >> private final String make = "Lexus", model = "IS > 350"; >> private final int year = 2011; >> >> public Car(String ignore) { >> } >> >> public String drive(String name) { >> return name + " is on the wheel of a " + year + " > " + make + >> " " + model; >> } >> } >> >> public class Foo { >> >> @Produces @Default >> public Car car() { >> return new Car("foo"); >> } >> } >> >> >> javax.enterprise.inject.IllegalProductException: A producer method or >> field of scope @Dependent returns an unserializable object for injection >> into an injection point Constructor Injection Point, constructor name : >> org.apache.openejb.arquillian.tests.cdi.constructor.SimpleServlet, Bean >> Owner : [SimpleServlet, Name:null, WebBeans Type:DEPENDENT, API >> Types:[java.io.Serializable,java.lang.Object,javax.servlet.ServletConfig,o >> rg.apache.openejb.arquillian.tests.cdi.constructor.SimpleServlet,javax.ser >> vlet.http.HttpServlet,javax.servlet.Servlet,javax.servlet.GenericServlet], >> >> Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default]] >> that requires a passivation capable dependency >> at >> org.apache.webbeans.inject.AbstractInjectable.inject(AbstractInjectable.ja >> va:108) >> at >> org.apache.webbeans.inject.InjectableConstructor.doInjection(InjectableCon >> structor.java:80) >> at >> org.apache.webbeans.portable.InjectionTargetImpl.newInstance(InjectionTarg >> etImpl.java:253) >> at >> org.apache.webbeans.portable.InjectionTargetImpl.produce(InjectionTargetIm >> pl.java:180) >> at >> org.apache.webbeans.component.AbstractOwbBean.create(AbstractOwbBean.java: >> 119) >> >> There's debate as if the test is bad or if the check is incorrect. > Seems >> like an OWB bug to me. >> >> Thoughts? >> >> >> -David >> >
