On Wed, Mar 4, 2015 at 6:35 AM Romain Manni-Bucau <rmannibucau(a)gmail.com>
wrote:
2015-03-04 12:29 GMT+01:00 John D. Ament
<john.d.ament(a)gmail.com>:
> Hmm.. comments in line.
>
> On Wed, Mar 4, 2015 at 4:49 AM Antoine Sabot-Durand <
> antoine(a)sabot-durand.net> wrote:
>
>> Hi John,
>>
>> I think it could be a good idea to write down all of these to have a
>> more stable doc for discussion. You should update the google doc with the
>> result of this discussion.
>>
>> I agree with the following points in this thread :
>>
>> - Minimize the number of new Class / Interface. CDI and CDIProvider
>> usage is still not very clear for end user so we should add the strict
>> minimum and try to enhance existing API / SPI when possible
>>
>
> It seems odd to me that we're rehashing decisions made during the EG
> meetings. Not putting it in CDI was discussed in several meetings at the
> beginning of the year, and it seemed like the agreement was putting it in
> CDI was a bad idea.
>
>
>> - Be able to bootstrap CDI without returning BeanManager (env if the API
>> give possibility to access it if needed). End user don’t need that : CDI
>> app can start with an observer for instance
>>
>
> Agreed, but I think we need to provide some entry point to allow those
> who aren't comfortable with programming with events to leverage it.
> Returning the CDI instance makes that easier to do than returning the
> BeanManager.
>
>
Can you detail it please? CDI value is only its getBeanManager() method
IMO so it sounds like it is 1-1 for me.
Taken from the docs I"m working on:
MyBean myBean = container.initialize().select(MyBean.class).get();
myBean.doWork();
Vs the 3-4 lines it takes to get a reference using just BeanManager.
>
>> Something not dealt with but that we should keep in mind :
>> - Providing a Java SE solution that could be easily used for a servlet
>> bootstrap of CDI. I don’t know if we’ll standardize this but we definitely
>> should keep this use case in mind
>>
>> and my bonus, it’s out of scope but I didn’t see anytime there that
>> prevent this nice to have:
>> - support the possibility to boot multiple BeanManager in Java SE.
>>
>>
> We talked about this one as well on the EG, either this year or late last
> year. I thought the decision at that time was that we wouldn't allow
> multiple containers at once in SE.
>
>
wouldn't specify rather than wouldn't allow I think
> Antoine
>>
>>
>> Le 1 mars 2015 à 15:13, John D. Ament <john.d.ament(a)gmail.com> a écrit :
>>
>>
>> So, I think I've gathered enough feedback at this point, and seen some
>> of the API changes. I'll hopefully be including some doc changes this
>> week, but one question - do we want to start the SE specific stuff as its
>> own asciidoc file?
>>
>> Changes made:
>>
>> - Changed return value to CDI<Object> to provide better capability out
>> of the box.
>> - Added AutoCloseable to CDIContainer, provided default implementation
>> of calling shutdown.
>> - Added synchronization support to the method body that retrieves the
>> singleton instance (BTW, I'm not sure if this is even useful TBH as each
>> impl, including the RI, needs to provide this class in its own format).
>> - Made the params map typed to <String,Object>
>>
>> @Romain Your case isn't really supportable yet, until we have static
>> injection support. You'd still have to have a managed version of Runner to
>> work against.
>>
>> John
>>
>> On Sat, Feb 28, 2015 at 4:11 PM Romain Manni-Bucau <
>> rmannibucau(a)gmail.com> wrote:
>>
>>> Yes but not the way to get an instance. Even Unmanaged does it.
>>>
>>> What can be awesome is to have static inject for it:
>>>
>>> public class Runner {
>>>
>>> @Inject
>>> private static MyMain main;
>>>
>>> public static void main(String[] arg) {
>>> try (CDIContainer c = CDIContainer.newContainer()) {
>>> main.doWork();
>>> }
>>> }
>>>
>>> }
>>>
>>> And not a single additional line :).
>>> Le 28 févr. 2015 19:05, "John D. Ament"
<john.d.ament(a)gmail.com> a
>>> écrit :
>>>
>>> Maybe I'm misreading, but I don't see us adding another API to do
the
>>>> same thing here - we're introducing new functionality.
>>>>
>>>> CDIContainer/Loader on startup/shutdown of the application
>>>>
>>>> CDI for runtime usage within the application to interact with the
>>>> container.
>>>>
>>>> John
>>>>
>>>> On Fri, Feb 27, 2015 at 3:40 AM Romain Manni-Bucau <
>>>> rmannibucau(a)gmail.com> wrote:
>>>>
>>>>> sure I fully agree excepted I think introducing yet another API to
do
>>>>> the same thing is not good so super tempting to skip it and wait for
>>>>> feedbacks rather than introducing it eagerly.
>>>>>
>>>>>
>>>>> Romain Manni-Bucau
>>>>> @rmannibucau
>>>>>
http://www.tomitribe.com
>>>>>
http://rmannibucau.wordpress.com
>>>>>
https://github.com/rmannibucau
>>>>>
>>>>>
>>>>> 2015-02-27 8:05 GMT+01:00 Jozef Hartinger
<jharting(a)redhat.com>:
>>>>> > My point is that from the application perspective, the user
obtains
>>>>> one
>>>>> > container handle for eventual shutdown (CDIContainer) and then
>>>>> looks up a
>>>>> > different container handle (CDI) that they can use for real
work
>>>>> (lookup /
>>>>> > event dispatch / etc.) It would be cleaner if the container
gave
>>>>> away a
>>>>> > single handle that can do all of that.
>>>>> >
>>>>> >
>>>>> > On 02/26/2015 05:42 PM, Romain Manni-Bucau wrote:
>>>>> >
>>>>> > Not sure I get how a CDI instance can help.
>>>>> >
>>>>> > But container.getBeanManager() sounds nice is not a shortcut
for
>>>>> > CDI.current().getBm() otherwise it looks like duplication to
me.
>>>>> >
>>>>> > Can we make container not contextual - dont think so? If so it
>>>>> makes sense
>>>>> > otherwise I fear it doesnt add much.
>>>>> >
>>>>> > Le 26 févr. 2015 16:19, "Jozef Hartinger"
<jharting(a)redhat.com> a
>>>>> écrit :
>>>>> >>
>>>>> >> I like the initialize + close() combination and the
>>>>> try-with-resources
>>>>> >> usage.
>>>>> >> What looks weird to me is that at line one you obtain a
container
>>>>> handle:
>>>>> >>
>>>>> >> try (CDIContainer container = CDIContainer.newCDIContai...
>>>>> >> CDI.current().getBeanManager() ...
>>>>> >>
>>>>> >> and then at line two you call a static method to perform a
>>>>> container
>>>>> >> lookup :-/
>>>>> >>
>>>>> >> An API that allows you to use the container handle you
already got
>>>>> is way
>>>>> >> better IMO, e.g.:
>>>>> >>
>>>>> >> try (CDIContainer container = CDIContainer.newCDIContai...
>>>>> >> container.getBeanManager()
>>>>> >>
>>>>> >> If CDIContainer.newCDIContainer() returns an CDI instance or
its
>>>>> subclass,
>>>>> >> we get this easily.
>>>>> >>
>>>>> >> On 02/26/2015 08:58 AM, Romain Manni-Bucau wrote:
>>>>> >>>
>>>>> >>> Hi guys
>>>>> >>>
>>>>> >>> why note keeping it simple?
>>>>> >>>
>>>>> >>> try (CDIContainer container =
CDIContainer.newCDIContainer(/*
>>>>> optional
>>>>> >>> map to configure vendor features */)) {
>>>>> >>> CDI.current().getBeanManager()....
>>>>> >>> }
>>>>> >>>
>>>>> >>> Not sure the point having initialize() + having shutdown
= close
>>>>> >>> really makes the API more fluent and modern IMO.
>>>>> >>>
>>>>> >>> Also to be fully SE I guess provider() method would be
needed
>>>>> even if
>>>>> >>> optional (SPI usage by default):
>>>>> >>>
>>>>> >>> try (CDIContainer container =
>>>>> >>>
>>>>> >>>
CDIContainer.provider("org.jboss.weld.WeldCdiContainerProvider").
>>>>> newCDIContainer())
>>>>> >>> {
>>>>> >>> CDI.current().getBeanManager()....
>>>>> >>> }
>>>>> >>>
>>>>> >>> Finally I think having a kind of getInstance shortcut
could be a
>>>>> plus for
>>>>> >>> SE:
>>>>> >>>
>>>>> >>> try (CDIContainer container =
CDIContainer.newCDIContainer()) {
>>>>> >>> container.newInstance(MyAppRunner.class /*
optional
>>>>> qualifiers */
>>>>> >>> ).run(args);
>>>>> >>> }
>>>>> >>>
>>>>> >>> Using container to get an instance would create the
instance and
>>>>> bind
>>>>> >>> it to the container lifecycle (mainly for predestroy)
avoiding
>>>>> this
>>>>> >>> boilerplate code in all main which will surely only be
used to
>>>>> launch
>>>>> >>> a soft.
>>>>> >>>
>>>>> >>> wdyt?
>>>>> >>>
>>>>> >>>
>>>>> >>>
>>>>> >>> Romain Manni-Bucau
>>>>> >>> @rmannibucau
>>>>> >>>
http://www.tomitribe.com
>>>>> >>>
http://rmannibucau.wordpress.com
>>>>> >>>
https://github.com/rmannibucau
>>>>> >>>
>>>>> >>>
>>>>> >>> 2015-02-26 8:32 GMT+01:00 Jozef Hartinger
<jharting(a)redhat.com>:
>>>>> >>>>
>>>>> >>>> Comments inline
>>>>> >>>>
>>>>> >>>> On 02/25/2015 05:53 PM, John D. Ament wrote:
>>>>> >>>>
>>>>> >>>> Sorry Jozef, your email fell into the pits of google
inbox's
>>>>> "smart
>>>>> >>>> sorting"
>>>>> >>>> features.
>>>>> >>>>
>>>>> >>>> On Thu, Feb 12, 2015 at 3:18 AM Jozef Hartinger
<
>>>>> jharting(a)redhat.com>
>>>>> >>>> wrote:
>>>>> >>>>>
>>>>> >>>>> Hi John, comments inline:
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> On 02/11/2015 06:02 PM, John D. Ament wrote:
>>>>> >>>>>
>>>>> >>>>> Jozef,
>>>>> >>>>>
>>>>> >>>>> Most of what you see there is taken from the
original doc, since
>>>>> >>>>> everyone
>>>>> >>>>> seemed to be in agreement. I think the map is
just a safeguard
>>>>> in case
>>>>> >>>>> of
>>>>> >>>>> additional boot options available in some
implementations (e.g.
>>>>> I think
>>>>> >>>>> OWB/OpenEJB have some options.. currently
OpenEJB supports an
>>>>> embedded
>>>>> >>>>> CDI
>>>>> >>>>> boot mode).
>>>>> >>>>>
>>>>> >>>>> No, I am fine with the map. What I am
questioning is the type
>>>>> of the
>>>>> >>>>> map.
>>>>> >>>>> Usually, data structures with a similar purpose
use Strings as
>>>>> their
>>>>> >>>>> keys.
>>>>> >>>>> This applies to ServletContext attributes,
InvocationContext
>>>>> data,
>>>>> >>>>> Servlet
>>>>> >>>>> request/session attributes and others. I am
therefore wondering
>>>>> whether
>>>>> >>>>> there is a usecase for the proposed unbound key
signature or
>>>>> not.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> I think that's more of a placeholder, I was
assuming it would be
>>>>> >>>> Map<String,Object> once we clarify
everything.
>>>>> >>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> We spoke a few times about BeanManager vs CDI.
BeanManager was
>>>>> >>>>> preferable
>>>>> >>>>> since there's no easy way to get the the
instance, CDI is
>>>>> easier to get
>>>>> >>>>> and
>>>>> >>>>> more aligned with how you would get it. Usually
people expect
>>>>> the
>>>>> >>>>> BeanManager to be injected or available via
JNDI, neither would
>>>>> be the
>>>>> >>>>> case
>>>>> >>>>> here.
>>>>> >>>>>
>>>>> >>>>> If CDI 2.0 targets Java SE then this container
initialization
>>>>> API will
>>>>> >>>>> become something that ordinary application
developers use to
>>>>> start/stop
>>>>> >>>>> CDI
>>>>> >>>>> in their applications. It therefore cannot be
considered an SPI
>>>>> but
>>>>> >>>>> instead
>>>>> >>>>> should be something easy to use. On the other
hand, BeanManager
>>>>> is
>>>>> >>>>> definitely an SPI. It is used in extension,
frameworks and
>>>>> generally
>>>>> >>>>> for
>>>>> >>>>> integration. Not much by applications directly.
Therefore, I
>>>>> don't see
>>>>> >>>>> how
>>>>> >>>>> the container bootstrap API and BeanManager fit
together. IMO
>>>>> the
>>>>> >>>>> bootstrap
>>>>> >>>>> API should expose something that makes common
tasks (obtaining a
>>>>> >>>>> contextual
>>>>> >>>>> reference and firing and event) easy, which the
CDI class does.
>>>>> >>>>>
>>>>> >>>>> Plus do not forget that BeanManager can be
obtained easily using
>>>>> >>>>> CDI.getBeanManager().
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> I'm not disagreeing. There's a few things
I'd consider:
>>>>> >>>>
>>>>> >>>> - Is this mostly for new apps or existing? If
existing, it's
>>>>> probably
>>>>> >>>> using
>>>>> >>>> some internal API, if new it can use whatever API we
give.
>>>>> >>>> - I don't want to return void, we should give
some kind of
>>>>> reference
>>>>> >>>> into
>>>>> >>>> the container when we're done booting.
>>>>> >>>>
>>>>> >>>> Agreed, we should not be returning void.
>>>>> >>>>
>>>>> >>>> - CDI is a one step retrievable reference, where as
BeanManager
>>>>> is a two
>>>>> >>>> step reference. With that said, BeanManager makes
more sense to
>>>>> return
>>>>> >>>> here. Another thought could be we invent some new
class that
>>>>> has both,
>>>>> >>>> but
>>>>> >>>> that's really redundant.
>>>>> >>>>
>>>>> >>>> Why do you think BeanManager makes more sense here?
Especially
>>>>> given the
>>>>> >>>> assumption that application code is going to call
this
>>>>> init/shutdown
>>>>> >>>> API, I
>>>>> >>>> don't see BeanManager as making more sense.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> Yes, this is the container start API. Sounds
like you have
>>>>> some good
>>>>> >>>>> ideas for things like XML configuration or
programmatic
>>>>> configuration,
>>>>> >>>>> both
>>>>> >>>>> of which are being tracked under separate
tickets. One idea
>>>>> might be
>>>>> >>>>> for an
>>>>> >>>>> optional param in the map to control packages to
scan/ignore,
>>>>> in that
>>>>> >>>>> map.
>>>>> >>>>>
>>>>> >>>>> I am wondering whether this configuration should
be something
>>>>> optional
>>>>> >>>>> built on top of the bootstrap API or whether we
should consider
>>>>> making
>>>>> >>>>> it
>>>>> >>>>> mandatory. Either way, we cannot add the
bootstrap API to the
>>>>> spec
>>>>> >>>>> without
>>>>> >>>>> explicitly defining how it behaves. My implicit
assumption of
>>>>> the
>>>>> >>>>> proposal
>>>>> >>>>> is that the container is supposed to scan the
entire classpath
>>>>> for
>>>>> >>>>> explicit
>>>>> >>>>> or implicit bean archives (including e.g.
rt.jar), discover
>>>>> beans, fire
>>>>> >>>>> extensions, etc. This worries me as this default
behavior is
>>>>> far from
>>>>> >>>>> being
>>>>> >>>>> lightweight, which CDI for Java SE initially
aimed to be.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> Yes, the spec must be updated to reflect the
behavior of SE
>>>>> mode. I
>>>>> >>>> plan to
>>>>> >>>> get that completely into the google doc before
opening any spec
>>>>> changes
>>>>> >>>> in a
>>>>> >>>> PR.
>>>>> >>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> We didn't want to over load the CDI
interface. It already does
>>>>> a lot.
>>>>> >>>>> This is really SPI code, CDI even though
it's in the spi
>>>>> package is
>>>>> >>>>> used in
>>>>> >>>>> a lot of application code.
>>>>> >>>>>
>>>>> >>>>> I would personally prefer to have it all in one
place. Having
>>>>> >>>>> CDIContainer, CDIContainerLoader, CDI and
CDIProvider makes it
>>>>> more
>>>>> >>>>> difficult to know when to use what.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> The problem is that most CDI (the interface)
operations are
>>>>> against a
>>>>> >>>> running container. I think we spoke about
leveraging
>>>>> CDIProvider at one
>>>>> >>>> point (in fact, I mistakenly called CDIContainer
CDIProvider not
>>>>> even
>>>>> >>>> realizing it was there). I doubt that most app
developers use it
>>>>> >>>> currently,
>>>>> >>>> there's not even a way to get a reference to it
that I'm aware
>>>>> of. It's
>>>>> >>>> used by the implementor only.
>>>>> >>>>
>>>>> >>>> I don't think there's a conflict. CDI class
would still only
>>>>> provide
>>>>> >>>> methods
>>>>> >>>> to be run against a running container. The
difference is that
>>>>> there
>>>>> >>>> would be
>>>>> >>>> additional static methods to get this running
container (CDI
>>>>> class) to
>>>>> >>>> you
>>>>> >>>> by starting the container.
>>>>> >>>>
>>>>> >>>> Either way, I agree that reusing CDIProvider is a
must. There is
>>>>> no
>>>>> >>>> reason
>>>>> >>>> to define a new class for the same purpose.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>> I expect that my changes in the CDI spec around this
will state,
>>>>> along
>>>>> >>>> the
>>>>> >>>> lines of:
>>>>> >>>>
>>>>> >>>> To retrieve a CDIContainer to launch, do this:
>>>>> >>>>
>>>>> >>>> CDIContainer container =
CDIContainerLocator.getCDIContainer();
>>>>> >>>> container.initialize();
>>>>> >>>> ... do work
>>>>> >>>>
>>>>> >>>> Once you want to shutdown the container, do this:
>>>>> >>>>
>>>>> >>>> container.shutdown();
>>>>> >>>>
>>>>> >>>> (we may want to consider implementing AutoCloseable,
an
>>>>> oversight on my
>>>>> >>>> part)
>>>>> >>>>
>>>>> >>>> and then later on
>>>>> >>>>
>>>>> >>>> - What happens if I call CDIContainerLocator in an
app server
>>>>> >>>>
>>>>> >>>> - It throws an IllegalStateException.
>>>>> >>>>
>>>>> >>>> - The container provides no beans of type
CDIContainer, it is
>>>>> managed
>>>>> >>>> outside of the CDI container.
>>>>> >>>>
>>>>> >>>>
>>>>> >>>>>
>>>>> >>>>>
>>>>> >>>>> John
>>>>> >>>>>
>>>>> >>>>> On Wed Feb 11 2015 at 4:21:50 AM Jozef Hartinger
<
>>>>> jharting(a)redhat.com>
>>>>> >>>>> wrote:
>>>>> >>>>>>
>>>>> >>>>>> Hi John, some thoughts:
>>>>> >>>>>>
>>>>> >>>>>> - instead of using BeanManager it makes more
sense to me to
>>>>> return a
>>>>> >>>>>> CDI
>>>>> >>>>>> instance, which is a more user-friendly API
(and it also
>>>>> exposes
>>>>> >>>>>> access to
>>>>> >>>>>> BeanManager)
>>>>> >>>>>> - is there a usecase for arbitrary keys of
the "params" map or
>>>>> is
>>>>> >>>>>> Map<String, ?> sufficient?
>>>>> >>>>>> - if we could move the shutdown() method
from CDIContainer to
>>>>> the
>>>>> >>>>>> actual
>>>>> >>>>>> container handle that we obtain from
initialize(), that would
>>>>> look
>>>>> >>>>>> more
>>>>> >>>>>> object-oriented
>>>>> >>>>>> - what exactly is initialize() supposed to
do? Is it supposed
>>>>> to start
>>>>> >>>>>> scanning the entire classpath for CDI beans?
That could be a
>>>>> problem
>>>>> >>>>>> especially with spring-boot-like fat jars. I
think we need an
>>>>> API to
>>>>> >>>>>> tell
>>>>> >>>>>> the container which classes / packages to
consider. Something
>>>>> like
>>>>> >>>>>> Guice's
>>>>> >>>>>> binding API perhaps?
>>>>> >>>>>>
>>>>> >>>>>> - the proposal makes me wonder whether
retrofitting this
>>>>> functionality
>>>>> >>>>>> to
>>>>> >>>>>> the CDI class wouldn't be a better
option. It could look like:
>>>>> >>>>>>
>>>>> >>>>>> CDI container = CDI.initialize();
>>>>> >>>>>> container.select(Foo.class).get();
>>>>> >>>>>> container.shutdown();
>>>>> >>>>>>
>>>>> >>>>>> compare it to:
>>>>> >>>>>>
>>>>> >>>>>> CDIContainer container = CDIContainerLoader.
getCDIContainer();
>>>>> >>>>>> BeanManager manager =
container.initialize();
>>>>> >>>>>> manager.getBeans(...);
>>>>> >>>>>> container.shutdown(manager);
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>> On 02/10/2015 06:58 PM, John D. Ament
wrote:
>>>>> >>>>>>
>>>>> >>>>>> All,
>>>>> >>>>>>
>>>>> >>>>>> I have the updated API here, and wanted to
solicit any final
>>>>> feedback
>>>>> >>>>>> before updating the google doc and spec
pages.
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>>
https://github.com/johnament/cdi/commit/2c362161e18dd521f8e8
>>>>> 3c27151ddad467a1c01c
>>>>> >>>>>>
>>>>> >>>>>> Let me know your thoughts.
>>>>> >>>>>>
>>>>> >>>>>> Thanks,
>>>>> >>>>>>
>>>>> >>>>>> John
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>>>
_______________________________________________
>>>>> >>>>>> cdi-dev mailing list
>>>>> >>>>>> cdi-dev(a)lists.jboss.org
>>>>> >>>>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>> >>>>>>
>>>>> >>>>>> Note that for all code provided on this
list, the provider
>>>>> licenses
>>>>> >>>>>> the
>>>>> >>>>>> code under the Apache License, Version 2
>>>>> >>>>>>
(
http://www.apache.org/licenses/LICENSE-2.0.html). For all
>>>>> other ideas
>>>>> >>>>>> provided on this list, the provider waives
all patent and other
>>>>> >>>>>> intellectual
>>>>> >>>>>> property rights inherent in such
information.
>>>>> >>>>>>
>>>>> >>>>>>
>>>>> >>>>
>>>>> >>>> _______________________________________________
>>>>> >>>> cdi-dev mailing list
>>>>> >>>> cdi-dev(a)lists.jboss.org
>>>>> >>>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>>>> >>>>
>>>>> >>>> Note that for all code provided on this list, the
provider
>>>>> licenses the
>>>>> >>>> code
>>>>> >>>> under the Apache License, Version 2
>>>>> >>>> (
http://www.apache.org/licenses/LICENSE-2.0.html).
For all
>>>>> other ideas
>>>>> >>>> provided on this list, the provider waives all
patent and other
>>>>> >>>> intellectual
>>>>> >>>> property rights inherent in such information.
>>>>> >>
>>>>> >>
>>>>> >
>>>>>
>>>> _______________________________________________
>> cdi-dev mailing list
>> cdi-dev(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>>
>> Note that for all code provided on this list, the provider licenses the
>> code under the Apache License, Version 2 (
http://www.apache.org/
>> licenses/LICENSE-2.0.html). For all other ideas provided on this list,
>> the provider waives all patent and other intellectual property rights
>> inherent in such information.
>>
>>
> _______________________________________________
> cdi-dev mailing list
> cdi-dev(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/cdi-dev
>
> Note that for all code provided on this list, the provider licenses the
> code under the Apache License, Version 2 (
>
http://www.apache.org/licenses/LICENSE-2.0.html). For all other ideas
> provided on this list, the provider waives all patent and other
> intellectual property rights inherent in such information.
>