[cdi-dev] easy solution for class visibility checks?
Ales Justin
ajustin at redhat.com
Tue Jan 3 14:36:30 EST 2012
This is a dup from 23/12/2011, hence ignore -- already discussed.
> Sorry for pitching in so late.
> (been busy with hacking something similar for our Ceylon M1 :-)
>
> Imho, I don't see how moving the visibility to either Context or Contextual will help.
> I'm more into Pete's favor (and w/o being bias), as there is no way on earth devs will know how to properly implement this in Context or Contextual.
>
> I've stated this a few times already, I actually like BDA.
> It's probably just the lack of proper wording and listing *all* visibility rules (which is definitely hard, but hey this is *the* spec) in the spec that lead to issues that we see now.
>
> You only get full visibility rules from CL hierarchy / wiring.
> But as we all know the CL API doesn't expose anything about this hierarchy / wiring,
> hence the only one that knows this is the container, which needs a mechanism to abstract this - aka BDA.
>
> This way you -- as it is now -- push the nitty-gritty CL details to container devs, not the users.
> And if you don't have exotic rules -- as we potentially had in MC -- implementing BDA is not that difficult.
> e.g. JEE is pretty straight forward, with only a few exceptions
>
> Imo we just need to set better rules on alts, iceptors, decorators, specializes, etc.
> Or even extend the config, so the user can be even more explicit; e.g. force certain isolation, filtering, etc
>
> -Ales
>
>> Ok, as Mark mentioned: Our real problem with class-visibility is: What classloader will Contextual.create use to create the contextual. If we would know this, we could implement container-checks for class-visibility.
>> So from this comes another idea: What about adding a method getContextualClassLoader() to the Contextual interface? This method should return the classloader that will be used for instance-creation. The container then could check class-visibility for specializing beans, interceptors, decorators and so on.
>>
>> Cheers,
>> Arne
>>
>> -----Ursprüngliche Nachricht-----
>> Von: cdi-dev-bounces at lists.jboss.org [mailto:cdi-dev-bounces at lists.jboss.org] Im Auftrag von Arne Limburg
>> Gesendet: Donnerstag, 15. Dezember 2011 14:16
>> An: Mark Struberg
>> Cc: cdi-dev
>> Betreff: Re: [cdi-dev] easy solution for class visibility checks?
>>
>> OK, then the question is: How would you implement Context.isVisible? I'm pretty sure, that if your solution works, there would be a very generic implementation for it, that we could use to specify container-behavior. Sounds like it could work, but I still need to think about it...
>>
>> Cheers,
>> Arne
>>
>> -----Ursprüngliche Nachricht-----
>> Von: Mark Struberg [mailto:struberg at yahoo.de]
>> Gesendet: Donnerstag, 15. Dezember 2011 14:04
>> An: Arne Limburg; Fabien Marsaud
>> Cc: cdi-dev; Pete Muir
>> Betreff: Re: AW: [cdi-dev] easy solution for class visibility checks?
>>
>> Thought about that as well, but the problem is that the ClassLoader of a Context is most times irrellevant.
>>
>>
>> E.g. for @RequestScoped, the RequestContext.class is still in weld.jar or owb-impl.jar which is in turn part of the very outermost container classloader.
>>
>> The RequestContext never uses the RequestContext.class.getClassLoader but is just a Map<Bean<T>,T /*created via Bean<T>#create()*/>
>>
>>
>> Maybe I'm also a bit too fixated on the way this stuff works in OWB (where we currently don't support EnterpriseApplicationScoped out of the box).
>>
>> Because it's not only the Context, it's also the way how Contextual<T>#create works. Which ClassLoader does it take?
>>
>>
>> *stillscratchingmyhead*
>>
>> LieGrue,
>> strub
>>
>>> ________________________________
>>> From: Arne Limburg <arne.limburg at openknowledge.de>
>>> To: Fabien Marsaud <fabmars at gmail.com>; Mark Struberg
>>> <struberg at yahoo.de>
>>> Cc: cdi-dev <cdi-dev at lists.jboss.org>
>>> Sent: Thursday, December 15, 2011 1:29 PM
>>> Subject: AW: [cdi-dev] easy solution for class visibility checks?
>>>
>>>
>>> Hi,
>>>
>>> But Mark’s idea is good anyway. Couldn’t that check be made by the container? The spec just would need to write down the visibility-rules.
>>> It seems to have to do something with the classloader of the Context and the classloader of the bean type.
>>> Something like “A bean is visible to a context if the bean-class is the same (meanding Object identity) as the class of the same name that is returned by the classloader of the Context-Instance”
>>>
>>> Cheers,
>>> Arne
>>>
>>> Von:cdi-dev-bounces at lists.jboss.org
>>> [mailto:cdi-dev-bounces at lists.jboss.org] Im Auftrag von Fabien Marsaud
>>> Gesendet: Donnerstag, 15. Dezember 2011 13:20
>>> An: Mark Struberg
>>> Cc: cdi-dev
>>> Betreff: Re: [cdi-dev] easy solution for class visibility checks?
>>>
>>>> Yup, I also don't really like it to make the Contexts responsible alone, because it might make it harder to implement portable Contexts.
>>>
>>> I was about to say the same. Usually a scope is straightforward:
>>> @Scope @Retention @Target public @interface MyScope {}
>>>
>>> But the context taking care of it has to drag the whole carriage: the beanstore, the 2 get() methods and the cleanup. This may be not tedious for you, but it definitely is for the average programmer (if he dares ot make it right, threadsafe, etc).
>>>
>>> A visibility method would add more complications and give a serious opportunity to the developper to wreck havoc. There should be at least a default impl and/or a higher order instance taking care of the visibility things.
>>>
>>> fm.
>>> On Thu, Dec 15, 2011 at 12:28 PM, Mark Struberg <struberg at yahoo.de> wrote:
>>> another point is that currently 1 BDA == 1 single jar file (or
>>> WEB-INF/classes)
>>>
>>>
>>> But that's just way too restrictive imo. IF, then it should treat all jars/classes in the same webapp as 1 BDA and all shared EAR jars as another BDA.
>>> But still then, there is a lot left undefined. Imo all the BDA stuff is not worth the pita.
>>>
>>>
>>>> Good point. There is definitely a shared responsibility though here,
>>>> and I'm not sure we can shift all responsibility to the context.
>>> Yup, I also don't really like it to make the Contexts responsible alone, because it might make it harder to implement portable Contexts.
>>> Otoh it's pretty pragmatic and is doable in all situations I knew.
>>>
>>> Maybe we can collect samples (use-cases) and play with them?
>>>
>>> LieGrue,
>>> strub
>>>
>>>
>>>
>>> ----- Original Message -----
>>>> From: Pete Muir <pmuir at redhat.com>
>>>> To: Mark Struberg <struberg at yahoo.de>
>>>> Cc: cdi-dev <cdi-dev at lists.jboss.org>
>>>> Sent: Thursday, December 15, 2011 12:14 PM
>>>> Subject: Re: [cdi-dev] easy solution for class visibility checks?
>>>>
>>>>
>>>> On 15 Dec 2011, at 11:10, Mark Struberg wrote:
>>>>
>>>>> The BDA stuff is not only broken for @Alternatives, but also for
>>>> <interceptors> and <decorators>
>>>>
>>>> Right, I wrote e.g. not i.e. ;-) Sorry, was just being lazy.
>>>>
>>>>>
>>>>> Plus: @Specializes is NOT affected by BDA as per CDI-1.0. But still
>>>>> gets
>>>> hit by class visibility issues.
>>>>
>>>> Right, this is not right in the CDI spec.
>>>>
>>>>>
>>>>>
>>>>> Imo the container just cannot know whether a 3rd party Context is
>>>>> going to
>>>> use the ThreadContextClassLoader, the SystemClassloader, the
>>>> MyScoped.class.getClassLoader() etc. There is nothing a container can
>>>> do about it, because _only_ the Context knows where it will store it's stuff.
>>>>
>>>> Good point. There is definitely a shared responsibility though here,
>>>> and I'm not sure we can shift all responsibility to the context.
>>>>
>>> _______________________________________________
>>> cdi-dev mailing list
>>> cdi-dev at lists.jboss.org
>>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>
>>>
>>>
>>> --
>>> http://www.suntriprecords.com
>>>
>>>
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/cdi-dev
>
>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/cdi-dev
More information about the cdi-dev
mailing list