Hi Nikolai!

Congratulations, you went pretty deep already ;)

please consider the following situation:

@Dependent
public class OuterBean {
  private @Inject SomeNotSerializableBean s;

  @Produces @SessionScoped
  public User createUser() {
    return getUserFromDatabase();
  }
}

When somewhere in a code a

private @Inject User u; 
u.getName(); 

gets executed, the container will create the Contextual Instance for the user 
(if there is none in the session already -> 'SessionSingleton').
For doing so the container will 

a.) create a OuterBean o
b.) invoke the o.createUser(); method and store the created User in the 
SessionContext.
c.) IMPORTANT! As OuterBean is @Dependent, it will IMMEDIATELY destroyed after 
createUser() returns! See 6.4.2:
"any @Dependent scoped contextual instance created to receive a producer 
method, producer field, disposer method or
observer method invocation is destroyed when the invocation completes, and ..." 
It might not be 100% clear if this means only the parameters of the producer 
method or also the containing bean as well though ... I remember that I talked 
about this with Pete a year or so ago and I think Weld also destroys the 
OuterBean immediately.

So why the hack should we check if OuterBean is Serializable or not? It does 
NOT end up in the CreationalContext of the User u anyway. At least not if we 
assume the outlined interpretation of the spec ;)

LieGrue,
strub


----- Original Message -----
> From: Nikolai Dokovski <[email protected]>
> To: [email protected]
> Cc: 
> Sent: Friday, May 18, 2012 12:52 PM
> Subject: Passivation dependencies of producer method are not validated
> 
> Hi,
> I got JSR 299 TCK (webprofile) running with tomcat and openwebbeans-1.1.4
> and there is one other test that fails
> PassivatingProducerMethodWithNonPassivatingParameterTest
> 
> The case is simple: The container should respond with deployment exception
> when there is bean in passivating scope with dependencies which are not.
> After short debug session I ended up to invocation of
> AbstractProducerBeans.validatePassivationDependencies which is left emty
> (no implementation)
> with the following comments:
> // don't call super.validatePassivationDependencies()!
> // the injection points of producers are the parameters of the
> producermethod.
> // since CDI-1.1 we must not check those for is serializable anymore.
> 
> Is there any particular reason for not implementing this or the check is
> performed elsewhere?
> 
> Regards
> Nikolai
>

Reply via email to