I don't understand the relationship to Java SE mode.
On Wed, Mar 4, 2015 at 7:33 AM Romain Manni-Bucau <rmannibucau(a)gmail.com>
wrote:
instead of
Unmanaged<Foo> unmanagedFoo = new Unmanaged<Foo>(Foo.class);
UnmanagedInstance<Foo> fooInstance = unmanagedFoo.newInstance();
Foo foo = fooInstance.produce().inject().postConstruct().get();
... // Use the foo instance
fooInstance.preDestroy().dispose();
just doing
UnmanagedInstance<Foo> fooInstance = new
Unmanaged<Foo>(Foo.class).create();
... // Use the foo instance
fooInstance.destroy();
Would make the main then quite trivial and more user friendly IMO
Romain Manni-Bucau
@rmannibucau <
https://twitter.com/rmannibucau> | Blog
<
http://rmannibucau.wordpress.com> | Github
<
https://github.com/rmannibucau> | LinkedIn
<
https://www.linkedin.com/in/rmannibucau> | Tomitriber
<
http://www.tomitribe.com>
2015-03-04 13:31 GMT+01:00 John D. Ament <john.d.ament(a)gmail.com>:
> Get what enhancements?
>
> On Wed, Mar 4, 2015 at 7:28 AM Romain Manni-Bucau <rmannibucau(a)gmail.com>
> wrote:
>
>> ok, initialize was returning a CDI instance then.
>>
>> If CDI instance is so present why bothering container api with it? Just
>> looks like another Unmanaged. In this case I would enhance Unmanaged to
>> have shortcut like create() (shortcut for
>> produce()/inject()/postConstruct()) and destroy
>> (preDestroy()/dispose()). Said otherwise: the need is already in the API so
>> why not letting EE getting these enhancement as well?
>>
>>
>> Romain Manni-Bucau
>> @rmannibucau <
https://twitter.com/rmannibucau> | Blog
>> <
http://rmannibucau.wordpress.com> | Github
>> <
https://github.com/rmannibucau> | LinkedIn
>> <
https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> <
http://www.tomitribe.com>
>>
>> 2015-03-04 13:09 GMT+01:00 John D. Ament <john.d.ament(a)gmail.com>:
>>
>>> Same way as defined in the spec
>>>
>>> CDI.current().destroy(..)
>>>
>>> On Wed, Mar 4, 2015 at 6:44 AM Romain Manni-Bucau <
>>> rmannibucau(a)gmail.com> wrote:
>>>
>>>> hmm, and if the bean is @Dependent? how do you release it?
>>>>
>>>>
>>>> Romain Manni-Bucau
>>>> @rmannibucau <
https://twitter.com/rmannibucau> | Blog
>>>> <
http://rmannibucau.wordpress.com> | Github
>>>> <
https://github.com/rmannibucau> | LinkedIn
>>>> <
https://www.linkedin.com/in/rmannibucau> | Tomitriber
>>>> <
http://www.tomitribe.com>
>>>>
>>>> 2015-03-04 12:37 GMT+01:00 John D. Ament <john.d.ament(a)gmail.com>:
>>>>
>>>>>
>>>>>
>>>>> 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.getCDICont
>>>>>>>>>>> ainer();
>>>>>>>>>>> >>>> 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/
>>>>>>>>>>> 2c362161e18dd521f8e83c27151ddad467a1c01c
>>>>>>>>>>> >>>>>>
>>>>>>>>>>> >>>>>> 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.
>>>>>>>
>>>>>>
>>>>
>>