Question for clarification and my understanding

classic Classic list List threaded Threaded
9 messages Options
Reply | Threaded
Open this post in threaded view
|

Question for clarification and my understanding

Rick Hightower

Section 5.4

"Client proxies are never required for a bean whose scope is a pseudo-scope such as @Dependent."


I understand the concept of client proxies to allow for scopes and context.


Is this a true statement...

Client proxies may not be needed for @Dependent (pseudo scope). CDI may provide a client proxy for @Dependent. 
A proxy is needed for @Dependent objects that are decorated or intercepted with Decorators or Interceptors. 

Are all injected objects proxied or only objects that are normal scoped or decorated?



--
Rick Hightower
(415) 968-9037
Profile 


_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Pete Muir
Administrator

On 19 Oct 2011, at 18:24, Rick Hightower wrote:

> Section 5.4
>
> "Client proxies are never required for a bean whose scope is a pseudo-scope such as @Dependent."
>
>
>
> I understand the concept of client proxies to allow for scopes and context.
>
>
>
> Is this a true statement...
>
> Client proxies may not be needed for @Dependent (pseudo scope). CDI may provide a client proxy for @Dependent.
> A proxy is needed for @Dependent objects that are decorated or intercepted with Decorators or Interceptors.
>
> Are all injected objects proxied or only objects that are normal scoped or decorated?

No.

This is

Proxies may not be needed for @Dependent (pseudo scope). CDI may provide a proxy for @Dependent.
A proxy is needed for @Dependent objects that are decorated or intercepted with Decorators or Interceptors.

Or this is

Client proxies are not needed for @Dependent (pseudo scope). CDI may proxy a @Dependent scoped instance that is decorated or intercepted with Decorators or Interceptors.
_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Jozef Hartinger
In reply to this post by Rick Hightower
Only normal scoped beans require client proxies. Decoration and
interception should be implemented by subclassing (see CDI-74, CDI-44).

On 10/19/2011 07:24 PM, Rick Hightower wrote:

>
> Section 5.4
>
> "Client proxies are never required for a bean whose scope is a
> pseudo-scope such as @Dependent."
>
>
> I understand the concept of client proxies to allow for scopes and
> context.
>
>
> Is this a true statement...
>
> Client proxies may not be needed for @Dependent (pseudo scope). CDI
> may provide a client proxy for @Dependent.
> A proxy is needed for @Dependent objects that are decorated or
> intercepted with Decorators or Interceptors.
>
> Are all injected objects proxied or only objects that are normal
> scoped or decorated?
>
>
>
> --
> *Rick Hightower*
> (415) 968-9037
> Profile <http://www.google.com/profiles/RichardHightower>
>
>
>
> _______________________________________________
> cdi-dev mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/cdi-dev
_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Mark Struberg
The spec says that only Decorators need to be done via subclassing.

LieGrue,
strub



----- Original Message -----

> From: Jozef Hartinger <[hidden email]>
> To: Rick Hightower <[hidden email]>
> Cc: cdi-dev <[hidden email]>
> Sent: Wednesday, October 19, 2011 7:33 PM
> Subject: Re: [cdi-dev] Question for clarification and my understanding
>
> Only normal scoped beans require client proxies. Decoration and
> interception should be implemented by subclassing (see CDI-74, CDI-44).
>
> On 10/19/2011 07:24 PM, Rick Hightower wrote:
>>
>>  Section 5.4
>>
>>  "Client proxies are never required for a bean whose scope is a
>>  pseudo-scope such as @Dependent."
>>
>>
>>  I understand the concept of client proxies to allow for scopes and
>>  context.
>>
>>
>>  Is this a true statement...
>>
>>  Client proxies may not be needed for @Dependent (pseudo scope). CDI
>>  may provide a client proxy for @Dependent.
>>  A proxy is needed for @Dependent objects that are decorated or
>>  intercepted with Decorators or Interceptors.
>>
>>  Are all injected objects proxied or only objects that are normal
>>  scoped or decorated?
>>
>>
>>
>>  --
>>  *Rick Hightower*
>>  (415) 968-9037
>>  Profile <http://www.google.com/profiles/RichardHightower>
>>
>>
>>
>>  _______________________________________________
>>  cdi-dev mailing list
>>  [hidden email]
>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
> _______________________________________________
> cdi-dev mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Stuart Douglas
I thought that interceptors had to be done via subclassing as well, as the spec does not specify that intercepted beans have to have a default constructor?

Stuart


On 20/10/2011, at 3:44 PM, Mark Struberg wrote:

> The spec says that only Decorators need to be done via subclassing.
>
> LieGrue,
> strub
>
>
>
> ----- Original Message -----
>> From: Jozef Hartinger <[hidden email]>
>> To: Rick Hightower <[hidden email]>
>> Cc: cdi-dev <[hidden email]>
>> Sent: Wednesday, October 19, 2011 7:33 PM
>> Subject: Re: [cdi-dev] Question for clarification and my understanding
>>
>> Only normal scoped beans require client proxies. Decoration and
>> interception should be implemented by subclassing (see CDI-74, CDI-44).
>>
>> On 10/19/2011 07:24 PM, Rick Hightower wrote:
>>>
>>> Section 5.4
>>>
>>> "Client proxies are never required for a bean whose scope is a
>>> pseudo-scope such as @Dependent."
>>>
>>>
>>> I understand the concept of client proxies to allow for scopes and
>>> context.
>>>
>>>
>>> Is this a true statement...
>>>
>>> Client proxies may not be needed for @Dependent (pseudo scope). CDI
>>> may provide a client proxy for @Dependent.
>>> A proxy is needed for @Dependent objects that are decorated or
>>> intercepted with Decorators or Interceptors.
>>>
>>> Are all injected objects proxied or only objects that are normal
>>> scoped or decorated?
>>>
>>>
>>>
>>> --
>>> *Rick Hightower*
>>> (415) 968-9037
>>> Profile <http://www.google.com/profiles/RichardHightower>
>>>
>>>
>>>
>>> _______________________________________________
>>> cdi-dev mailing list
>>> [hidden email]
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>> _______________________________________________
>> cdi-dev mailing list
>> [hidden email]
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
> _______________________________________________
> cdi-dev mailing list
> [hidden email]
> https://lists.jboss.org/mailman/listinfo/cdi-dev


_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Mark Struberg
They must have at least 1 non-private ct (this includes the default ct). And if it does have a parameter, then it must be annotated with @Inject.
This is perfectly enough to create a proxy. Of course this @Inject constructor must not get called while creating the proxy itself (because this might contain certain checks and logic). In this very case a default-ct must get added to the proxy-subclass via byte code enhancement techniques.


Also please note that not the CDI specification defines any interceptor behaviour but the Interceptors-1.1 specification (or any update which gets defined by the EJB-3.2 Expert Group). So any assumption we made in CDI must be synced with their work.


And actually, all beans of passivating scopes must provide a default-ct because of Serialization reasons anyway, isn't?


LieGrue,
strub



----- Original Message -----

> From: Stuart Douglas <[hidden email]>
> To: Mark Struberg <[hidden email]>
> Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
> Sent: Thursday, October 20, 2011 6:54 AM
> Subject: Re: [cdi-dev] Question for clarification and my understanding
>
> I thought that interceptors had to be done via subclassing as well, as the spec
> does not specify that intercepted beans have to have a default constructor?
>
> Stuart
>
>
> On 20/10/2011, at 3:44 PM, Mark Struberg wrote:
>
>>  The spec says that only Decorators need to be done via subclassing.
>>
>>  LieGrue,
>>  strub
>>
>>
>>
>>  ----- Original Message -----
>>>  From: Jozef Hartinger <[hidden email]>
>>>  To: Rick Hightower <[hidden email]>
>>>  Cc: cdi-dev <[hidden email]>
>>>  Sent: Wednesday, October 19, 2011 7:33 PM
>>>  Subject: Re: [cdi-dev] Question for clarification and my understanding
>>>
>>>  Only normal scoped beans require client proxies. Decoration and
>>>  interception should be implemented by subclassing (see CDI-74, CDI-44).
>>>
>>>  On 10/19/2011 07:24 PM, Rick Hightower wrote:
>>>>
>>>>  Section 5.4
>>>>
>>>>  "Client proxies are never required for a bean whose scope is a
>
>>>>  pseudo-scope such as @Dependent."
>>>>
>>>>
>>>>  I understand the concept of client proxies to allow for scopes and
>>>>  context.
>>>>
>>>>
>>>>  Is this a true statement...
>>>>
>>>>  Client proxies may not be needed for @Dependent (pseudo scope). CDI
>
>>>>  may provide a client proxy for @Dependent.
>>>>  A proxy is needed for @Dependent objects that are decorated or
>>>>  intercepted with Decorators or Interceptors.
>>>>
>>>>  Are all injected objects proxied or only objects that are normal
>>>>  scoped or decorated?
>>>>
>>>>
>>>>
>>>>  --
>>>>  *Rick Hightower*
>>>>  (415) 968-9037
>>>>  Profile <http://www.google.com/profiles/RichardHightower>
>>>>
>>>>
>>>>
>>>>  _______________________________________________
>>>>  cdi-dev mailing list
>>>>  [hidden email]
>>>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>  _______________________________________________
>>>  cdi-dev mailing list
>>>  [hidden email]
>>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>
>>  _______________________________________________
>>  cdi-dev mailing list
>>  [hidden email]
>>  https://lists.jboss.org/mailman/listinfo/cdi-dev
>
_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Stuart Douglas

On 20/10/2011, at 5:19 PM, Mark Struberg wrote:

They must have at least 1 non-private ct (this includes the default ct). And if it does have a parameter, then it must be annotated with @Inject.
This is perfectly enough to create a proxy. Of course this @Inject constructor must not get called while creating the proxy itself (because this might contain certain checks and logic). In this very case a default-ct must get added to the proxy-subclass via byte code enhancement techniques.

That does not really work, according to the JVM spec: 


4.8.2 Structural Constraints - "Each instance initialization method (§3.9), except for the instance initialization method derived from the constructor of class Object, must call either another instance initialization method of this or an instance initialization method of its direct superclass super before its instance members are accessed. However, instance fields of this that are declared in the current class may be assigned before calling any instance initialization method."

So even if you add a default constructor to the sub class, this default constructor still has to call the non default constructor of the superclass. It is possible to pass 'default' arguments (i.e. null for objects and 0 for primitives), but this is kinda dodgy, and can result in NPE's if the constructor is expecting a non-null value. All JVM's also provide a non-portable way to instantiate a class without calling the constructor (such as com.sun.misc.Unsafe), however as this is not really an official part of java platform it is not really something a spec should rely on. 

So even though it is not impossible to do, it is not very well specified and kinda fragile, or just plain non-portable. 




Also please note that not the CDI specification defines any interceptor behaviour but the Interceptors-1.1 specification (or any update which gets defined by the EJB-3.2 Expert Group). So any assumption we made in CDI must be synced with their work.


The interceptors specification does not really have much to say on this. It seems to assume that the proxiability requirements will be taken care of by the specification that defines the component type that is being intercepted. 


And actually, all beans of passivating scopes must provide a default-ct because of Serialization reasons anyway, isn't?


A default constructor is not a requirement for serialisation. The JVM can create instances during serialisation directly, without calling the constructor. (Even though the javadoc for Serializable talks about need a no-arg constructor, this is only a requirement for a non-serialization superclass with a serializable sub-class).

Stuart


LieGrue,
strub



----- Original Message -----
From: Stuart Douglas <[hidden email]>
To: Mark Struberg <[hidden email]>
Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
Sent: Thursday, October 20, 2011 6:54 AM
Subject: Re: [cdi-dev] Question for clarification and my understanding

I thought that interceptors had to be done via subclassing as well, as the spec
does not specify that intercepted beans have to have a default constructor?

Stuart


On 20/10/2011, at 3:44 PM, Mark Struberg wrote:

The spec says that only Decorators need to be done via subclassing.

LieGrue,
strub



----- Original Message -----
From: Jozef Hartinger <[hidden email]>
To: Rick Hightower <[hidden email]>
Cc: cdi-dev <[hidden email]>
Sent: Wednesday, October 19, 2011 7:33 PM
Subject: Re: [cdi-dev] Question for clarification and my understanding

Only normal scoped beans require client proxies. Decoration and
interception should be implemented by subclassing (see CDI-74, CDI-44).

On 10/19/2011 07:24 PM, Rick Hightower wrote:

Section 5.4

"Client proxies are never required for a bean whose scope is a

pseudo-scope such as @Dependent."


I understand the concept of client proxies to allow for scopes and
context.


Is this a true statement...

Client proxies may not be needed for @Dependent (pseudo scope). CDI

may provide a client proxy for @Dependent.
A proxy is needed for @Dependent objects that are decorated or
intercepted with Decorators or Interceptors.

Are all injected objects proxied or only objects that are normal
scoped or decorated?



--
*Rick Hightower*
(415) 968-9037
Profile <http://www.google.com/profiles/RichardHightower>



_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev

_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev



_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Mark Struberg
Actually the trick with the byte-code engineered default ct is exactly as JVM dependent as Serialization in certain VMs and constellations don't need a default ct.
We should not require both of them imo.

As for the non-private default ct: are we d'accord that proxying won't work without a non-private ct? Thus a @NormalScoped bean must have a non-private ct?

Thus the question that remains is only whether interception of @Dependent beans with a non-private ct must work or not?


LieGrue,
strub




>________________________________
>From: Stuart Douglas <[hidden email]>
>To: Mark Struberg <[hidden email]>
>Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
>Sent: Thursday, October 20, 2011 8:33 AM
>Subject: Re: [cdi-dev] Question for clarification and my understanding
>
>
>
>
>On 20/10/2011, at 5:19 PM, Mark Struberg wrote:
>
>They must have at least 1 non-private ct (this includes the default ct). And if it does have a parameter, then it must be annotated with @Inject.
>>This is perfectly enough to create a proxy. Of course this @Inject constructor must not get called while creating the proxy itself (because this might contain certain checks and logic). In this very case a default-ct must get added to the proxy-subclass via byte code enhancement techniques.
>>
>
>
>That does not really work, according to the JVM spec: 
>
>
>http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
>
>
>4.8.2 Structural Constraints - "Each instance initialization method (§3.9), except for the instance initialization method derived from the constructor of class Object, must call either another instance initialization method of this or an instance initialization method of its direct superclass super before its instance members are accessed. However, instance fields of this that are declared in the current class may be assigned before calling any instance initialization method."
>
>
>So even if you add a default constructor to the sub class, this default constructor still has to call the non default constructor of the superclass. It is possible to pass 'default' arguments (i.e. null for objects and 0 for primitives), but this is kinda dodgy, and can result in NPE's if the constructor is expecting a non-null value. All JVM's also provide a non-portable way to instantiate a class without calling the constructor (such as com.sun.misc.Unsafe), however as this is not really an official part of java platform it is not really something a spec should rely on. 
>
>
>So even though it is not impossible to do, it is not very well specified and kinda fragile, or just plain non-portable. 
>
>
>
>
>>
>>Also please note that not the CDI specification defines any interceptor behaviour but the Interceptors-1.1 specification (or any update which gets defined by the EJB-3.2 Expert Group). So any assumption we made in CDI must be synced with their work.
>>
>>
>
>
>The interceptors specification does not really have much to say on this. It seems to assume that the proxiability requirements will be taken care of by the specification that defines the component type that is being intercepted. 
>
>
>>And actually, all beans of passivating scopes must provide a default-ct because of Serialization reasons anyway, isn't?
>>
>>
>
>
>A default constructor is not a requirement for serialisation. The JVM can create instances during serialisation directly, without calling the constructor. (Even though the javadoc for Serializable talks about need a no-arg constructor, this is only a requirement for a non-serialization superclass with a serializable sub-class).
>
>
>Stuart
>
>
>>LieGrue,
>>strub
>>
>>
>>
>>----- Original Message -----
>>
>>From: Stuart Douglas <[hidden email]>
>>>
>>To: Mark Struberg <[hidden email]>
>>>
>>Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
>>>
>>Sent: Thursday, October 20, 2011 6:54 AM
>>>
>>Subject: Re: [cdi-dev] Question for clarification and my understanding
>>>
>>
>>>
>>I thought that interceptors had to be done via subclassing as well, as the spec
>>>
>>does not specify that intercepted beans have to have a default constructor?
>>>
>>
>>>
>>Stuart
>>>
>>
>>>
>>
>>>
>>On 20/10/2011, at 3:44 PM, Mark Struberg wrote:
>>>
>>
>>>
>>The spec says that only Decorators need to be done via subclassing.
>>>>
>>
>>>>
>>LieGrue,
>>>>
>>strub
>>>>
>>
>>>>
>>
>>>>
>>
>>>>
>>----- Original Message -----
>>>>
>>From: Jozef Hartinger <[hidden email]>
>>>>>
>>To: Rick Hightower <[hidden email]>
>>>>>
>>Cc: cdi-dev <[hidden email]>
>>>>>
>>Sent: Wednesday, October 19, 2011 7:33 PM
>>>>>
>>Subject: Re: [cdi-dev] Question for clarification and my understanding
>>>>>
>>
>>>>>
>>Only normal scoped beans require client proxies. Decoration and
>>>>>
>>interception should be implemented by subclassing (see CDI-74, CDI-44).
>>>>>
>>
>>>>>
>>On 10/19/2011 07:24 PM, Rick Hightower wrote:
>>>>>
>>
>>>>>>
>>Section 5.4
>>>>>>
>>
>>>>>>
>>"Client proxies are never required for a bean whose scope is a
>>>>>>
>>
>>>
>>pseudo-scope such as @Dependent."
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>I understand the concept of client proxies to allow for scopes and
>>>>>>
>>context.
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>Is this a true statement...
>>>>>>
>>
>>>>>>
>>Client proxies may not be needed for @Dependent (pseudo scope). CDI
>>>>>>
>>
>>>
>>may provide a client proxy for @Dependent.
>>>>>>
>>A proxy is needed for @Dependent objects that are decorated or
>>>>>>
>>intercepted with Decorators or Interceptors.
>>>>>>
>>
>>>>>>
>>Are all injected objects proxied or only objects that are normal
>>>>>>
>>scoped or decorated?
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>--
>>>>>>
>>*Rick Hightower*
>>>>>>
>>(415) 968-9037
>>>>>>
>>Profile <http://www.google.com/profiles/RichardHightower>
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>
>>>>>>
>>_______________________________________________
>>>>>>
>>cdi-dev mailing list
>>>>>>
>>[hidden email]
>>>>>>
>>https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>
>>_______________________________________________
>>>>>
>>cdi-dev mailing list
>>>>>
>>[hidden email]
>>>>>
>>https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>
>>
>>>>>
>>_______________________________________________
>>>>
>>cdi-dev mailing list
>>>>
>>[hidden email]
>>>>
>>https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>
>>
>>>
>
>
>

_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev
Reply | Threaded
Open this post in threaded view
|

Re: Question for clarification and my understanding

Stuart Douglas

On 20/10/2011, at 6:08 PM, Mark Struberg wrote:

> Actually the trick with the byte-code engineered default ct is exactly as JVM dependent as Serialization in certain VMs and constellations don't need a default ct.
> We should not require both of them imo.

Are you sure? This is a firm requirement of the JVM spec. I would have thought that these JVM's would fail the Java TCK (although I must admit I have no idea what is in the java TCK).

>
> As for the non-private default ct: are we d'accord that proxying won't work without a non-private ct? Thus a @NormalScoped bean must have a non-private ct?
>
> Thus the question that remains is only whether interception of @Dependent beans with a non-private ct must work or not?

It can't work portably. Your class files need a constructor, this constructor has to call super, and the bytecode verifier will reject your class as you do not have permission to call the superclass constructor.

It is possible to fake it by generating two constructors in the sub class that call each other recursively, then bypass the constructor calls all together using JVM specific tricks, but this is not portable (we do have an implementation of this in weld that is not enabled by default).

Stuart


>
>
> LieGrue,
> strub
>
>
>
>
>> ________________________________
>> From: Stuart Douglas <[hidden email]>
>> To: Mark Struberg <[hidden email]>
>> Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
>> Sent: Thursday, October 20, 2011 8:33 AM
>> Subject: Re: [cdi-dev] Question for clarification and my understanding
>>
>>
>>
>>
>> On 20/10/2011, at 5:19 PM, Mark Struberg wrote:
>>
>> They must have at least 1 non-private ct (this includes the default ct). And if it does have a parameter, then it must be annotated with @Inject.
>>> This is perfectly enough to create a proxy. Of course this @Inject constructor must not get called while creating the proxy itself (because this might contain certain checks and logic). In this very case a default-ct must get added to the proxy-subclass via byte code enhancement techniques.
>>>
>>
>>
>> That does not really work, according to the JVM spec:
>>
>>
>> http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html
>>
>>
>> 4.8.2 Structural Constraints - "Each instance initialization method (§3.9), except for the instance initialization method derived from the constructor of class Object, must call either another instance initialization method of this or an instance initialization method of its direct superclass super before its instance members are accessed. However, instance fields of this that are declared in the current class may be assigned before calling any instance initialization method."
>>
>>
>> So even if you add a default constructor to the sub class, this default constructor still has to call the non default constructor of the superclass. It is possible to pass 'default' arguments (i.e. null for objects and 0 for primitives), but this is kinda dodgy, and can result in NPE's if the constructor is expecting a non-null value. All JVM's also provide a non-portable way to instantiate a class without calling the constructor (such as com.sun.misc.Unsafe), however as this is not really an official part of java platform it is not really something a spec should rely on.
>>
>>
>> So even though it is not impossible to do, it is not very well specified and kinda fragile, or just plain non-portable.
>>
>>
>>
>>
>>>
>>> Also please note that not the CDI specification defines any interceptor behaviour but the Interceptors-1.1 specification (or any update which gets defined by the EJB-3.2 Expert Group). So any assumption we made in CDI must be synced with their work.
>>>
>>>
>>
>>
>> The interceptors specification does not really have much to say on this. It seems to assume that the proxiability requirements will be taken care of by the specification that defines the component type that is being intercepted.
>>
>>
>>> And actually, all beans of passivating scopes must provide a default-ct because of Serialization reasons anyway, isn't?
>>>
>>>
>>
>>
>> A default constructor is not a requirement for serialisation. The JVM can create instances during serialisation directly, without calling the constructor. (Even though the javadoc for Serializable talks about need a no-arg constructor, this is only a requirement for a non-serialization superclass with a serializable sub-class).
>>
>>
>> Stuart
>>
>>
>>> LieGrue,
>>> strub
>>>
>>>
>>>
>>> ----- Original Message -----
>>>
>>> From: Stuart Douglas <[hidden email]>
>>>>
>>> To: Mark Struberg <[hidden email]>
>>>>
>>> Cc: Jozef Hartinger <[hidden email]>; cdi-dev <[hidden email]>
>>>>
>>> Sent: Thursday, October 20, 2011 6:54 AM
>>>>
>>> Subject: Re: [cdi-dev] Question for clarification and my understanding
>>>>
>>>
>>>>
>>> I thought that interceptors had to be done via subclassing as well, as the spec
>>>>
>>> does not specify that intercepted beans have to have a default constructor?
>>>>
>>>
>>>>
>>> Stuart
>>>>
>>>
>>>>
>>>
>>>>
>>> On 20/10/2011, at 3:44 PM, Mark Struberg wrote:
>>>>
>>>
>>>>
>>> The spec says that only Decorators need to be done via subclassing.
>>>>>
>>>
>>>>>
>>> LieGrue,
>>>>>
>>> strub
>>>>>
>>>
>>>>>
>>>
>>>>>
>>>
>>>>>
>>> ----- Original Message -----
>>>>>
>>> From: Jozef Hartinger <[hidden email]>
>>>>>>
>>> To: Rick Hightower <[hidden email]>
>>>>>>
>>> Cc: cdi-dev <[hidden email]>
>>>>>>
>>> Sent: Wednesday, October 19, 2011 7:33 PM
>>>>>>
>>> Subject: Re: [cdi-dev] Question for clarification and my understanding
>>>>>>
>>>
>>>>>>
>>> Only normal scoped beans require client proxies. Decoration and
>>>>>>
>>> interception should be implemented by subclassing (see CDI-74, CDI-44).
>>>>>>
>>>
>>>>>>
>>> On 10/19/2011 07:24 PM, Rick Hightower wrote:
>>>>>>
>>>
>>>>>>>
>>> Section 5.4
>>>>>>>
>>>
>>>>>>>
>>> "Client proxies are never required for a bean whose scope is a
>>>>>>>
>>>
>>>>
>>> pseudo-scope such as @Dependent."
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>> I understand the concept of client proxies to allow for scopes and
>>>>>>>
>>> context.
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>> Is this a true statement...
>>>>>>>
>>>
>>>>>>>
>>> Client proxies may not be needed for @Dependent (pseudo scope). CDI
>>>>>>>
>>>
>>>>
>>> may provide a client proxy for @Dependent.
>>>>>>>
>>> A proxy is needed for @Dependent objects that are decorated or
>>>>>>>
>>> intercepted with Decorators or Interceptors.
>>>>>>>
>>>
>>>>>>>
>>> Are all injected objects proxied or only objects that are normal
>>>>>>>
>>> scoped or decorated?
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>> --
>>>>>>>
>>> *Rick Hightower*
>>>>>>>
>>> (415) 968-9037
>>>>>>>
>>> Profile <http://www.google.com/profiles/RichardHightower>
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>>
>>>>>>>
>>> _______________________________________________
>>>>>>>
>>> cdi-dev mailing list
>>>>>>>
>>> [hidden email]
>>>>>>>
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>>
>>> _______________________________________________
>>>>>>
>>> cdi-dev mailing list
>>>>>>
>>> [hidden email]
>>>>>>
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>>
>>>
>>>>>>
>>> _______________________________________________
>>>>>
>>> cdi-dev mailing list
>>>>>
>>> [hidden email]
>>>>>
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>>
>>>
>>>>
>>
>>
>>


_______________________________________________
cdi-dev mailing list
[hidden email]
https://lists.jboss.org/mailman/listinfo/cdi-dev