Hi,
So lets get real with an example to start illustrating my issues. We have a
release already and the release is used by people, quite a few people. We
don't know what they are doing. I have written a test. The test uses the
sample blueprint bundle. It contains the following blueprint xml:
<bean id="bar2" class="org.apache.aries.blueprint.sample.Bar">
<property name="value" value="${a+b}"/>
</bean>
The setValue method takes a String. I have run these tests in two ways. The
first with jexl and the second without. If jexl isn't installed I get:
${a+b}
when jexl is installed I get:
0
Irrespective of how useful this is to people who want the behaviour it is a
huge problem for those people who do NOT want this behaviour. It is easy to
say "well don't install jexl then", but consider this. I have written a
blueprint bundle that expects to have ${a+b} injected. I deploy it in one
runtime and it works the way I expect. Now I drop it into Geronimo and I get
0 instead. So I now need to go back and rewrite my bundle to work in
geronimo and I have two different bundles for each environment. This is
wrong.
As said before I think we need this enabled via a namespace handler and an
attribute. I would require the following to be added to the blueprint
element:
<blueprint jexl:enable="true" xmlns:jexl="
http://aries.apache.org/blueprint/xmlns/blueprint-jexl/v1.0.0"/>
any existing application will then behave consistently irrespective of what
is installed in the surrounding framework. Even the one I just created. If
the jexl bundle isn't installed then the jexl namespace handler is not
installed so the blueprint bundle will not be processed until it is in the
normal way. The code in question can remain where it is, but it would only
be enabled if the jexl namespace is configured. Ideally we would be able to
parameterise the value processing in a pluggable way, but as long as the
externals are right we can refactor the internals at our leisure.
We are creating a programming model for OSGi here and that means we need to
get the modularity right. Currently it is not right, not only is the
modularity wrong but this makes a breaking change to the way a blueprint.xml
is processed in what is a bug release. Irrespective of how useful this is I
do not think it is important enough to warrant a breaking change when we can
make it work without breaking existing bundles.
To address your question of "Do you think it is a good idea to support
this?" I do think it is a good idea, if I didn't I would have -1ed the
commit rather than engaged in an email discussion to get it right.
Thanks
Alasdair
On 8 September 2011 14:35, Rex Wang <[email protected]> wrote:
> 2011/9/8 Alasdair Nottingham <[email protected]>
>
> > On 8 September 2011 10:10, Rex Wang <[email protected]> wrote:
> >
> > > 2011/9/8 Timothy Ward <[email protected]>
> > >
> > > >
> > > > Hi,
> > > >
> > > > I'm afraid I've not been paying as much attention as I should to this
> > > > thread. Reading back over the issues. I would currently vote -1 on
> this
> > > > release. I am not at all happy with the fact that users of this
> support
> > > will
> > > > see different, potentially erroneous, behaviour depending on the
> > presence
> > > or
> > > > absence of an optional dependency. Our previous statement has always
> > been
> > > > "If a blueprint bundle wants to use some non-standard function it
> > should
> > > > declare that using an additional namespace".
> > > >
> > > Do you mean the statement in spec 121.4:
> > > "The Blueprint XML resources in a bundle are the definitions. Each
> > > definition can include multiple
> > > namespaces. Implementations of the Blueprint core namespace must
> strictly
> > > follow this specification,
> > > if they add additional behavior they must add additional namespaces
> that
> > > are
> > > actually used in
> > > the definitions to signal the deviation from this specification."?
> > >
> > > We are improving the blueprint-ext, which has been already an
> additional
> > > namespace to blueprint core schema. Why must we add a new namespace to
> > > extend the ability of blueprint-ext?
> > >
> > >
> > Blueprint ext is a part of our core implementation. Adding it to
> > blueprint-ext means that if you want to use ANY part of blueprint ext you
> > MUST have apache-jexl even if you don't wan to use the ${a+b} syntax.
> This
> > is wrong.
> >
>
> Hi Alasdair,
> The itests passes without adding the commons-jexl bundle now.
> If you don't have commons-jexl installed, the current code can work as
> before. Unless you want to use ${a+b}, you need guarantee the commons-jexl
> is present. Otherwise it will record this exception in logger. I know this
> is not that convenient, but at least user can know what he need to do to
> get
> things right from the log..
>
> On the other hand, Java EE EL supports such style of calculation natively,
> I
> think we should support it in blueprint-ext directly to keep the consistent
> of the current development experiences. In other words, if we don't use
> commons-jexl to implement such ability, instead, we write codes by
> ourselves
> to do that. Do you think it is a good idea to support this? After all,
> there
> is no spec for blueprint-ext.
>
> thanks,
> -Rex
>
>
>
>
>
>
>
> >
> >
> > >
> > > > In my view this new function should only be available if the optional
> > > > dependency is satisfied, and blueprint bundles must enable this
> > function
> > > > using a custom namespace. Otherwise I see two problems.
> > > >
> > > >
> > > > I want this new support, but have no way to ensure it is present, as
> a
> > > > result I am sometimes injected with "1+2" instead of "3". This leads
> to
> > > > intermittent NumberFormatExceptions
> > > >
> > > I do not want this new support, but as the dependency is available I
> am
> > > > injected with "3" instead of "1+2". This leads to inconsistent and
> > > confusing
> > > > behaviour.
> > > >
> > > I am not sure I understand this..
> > > If you want 3, you need <xxx value="${1+2}">
> > > If you want 1+2, you should use <xxx value="1+2">
> > > Only the expression in ${..} will trigger the calculation, no matter if
> > the
> > > dependency if available.
> > >
> > >
> > I think tim is saying you want the string literal "${1+2}" not the string
> > 1+2. With your change if I had ${1+2} I now get 3 rather than ${1+2}.
> This
> > is a change in behaviour and should be enabled using a new namespace. Of
> > course you could just reversion the namespace from v1.x to v2 as a
> breaking
> > change, but we would need to support both versions of the schema.
> >
> > As with Tim I would currently -1 any release of blueprint 3.2 until this
> is
> > addressed.
> >
> > Alasdair
> >
> > -Rex
> > >
> > >
> > > >
> > > >
> > > > Adding a namespace for this function elegantly solves both these
> issues
> > > in
> > > > a way that is consistent with other blueprint extensions, and I think
> > is
> > > > essential before this function can be released.
> > > >
> > > > Regards,
> > > >
> > > > Tim
> > > >
> > > >
> > > > > From: [email protected]
> > > > > Date: Thu, 8 Sep 2011 11:58:22 +0800
> > > > > Subject: Re: [Release Discussion] ship maintenance releases of
> > > > application-0.2.2 / util-0.2.1 / blueprint-0.3.2 ?
> > > > > To: [email protected]
> > > > >
> > > > > I still think adding a new namespace only for such simple
> calculation
> > > is
> > > > too
> > > > > heavy and not consumalbe for users..
> > > > >
> > > > > Anyway, could anybody help with the release of *
> > > > > org.apache.aries.application/0.2.2-SNAPSHOT* *and
> > > > > org.apache.aries.util/0.2.1-SNAPSHOT* first? or chould anyone help
> > > check
> > > > why
> > > > > I can not deploy artifacts to apache.snapshot? Maybe I can try
> > release
> > > > the 2
> > > > > components. Geronimo does not have much time targeting the 3.0-beta
> > > > release.
> > > > >
> > > > > thanks,
> > > > >
> > > > > -Rex
> > > > >
> > > > >
> > > > >
> > > > > 2011/9/7 Alasdair Nottingham <[email protected]>
> > > > >
> > > > > > If we release blueprint as is we will never be able to make the
> > > change
> > > > as
> > > > > > we
> > > > > > would cause a major breaking change. I think we need to get this
> > > right
> > > > > > before a release is done.
> > > > > >
> > > > > > On 6 September 2011 04:37, Rex Wang <[email protected]> wrote:
> > > > > >
> > > > > > > 2011/9/6 Alasdair Nottingham <[email protected]>
> > > > > > >
> > > > > > > > On 1 September 2011 07:41, Valentin Mahrwald <
> > > > [email protected]
> > > > > > > > >wrote:
> > > > > > > >
> > > > > > > > > Comments inline :)
> > > > > > > > >
> > > > > > > > > Kind regards,
> > > > > > > > >
> > > > > > > > > Valentin
> > > > > > > > >
> > > > > > > > > On 31 Aug 2011, at 20:02, Alasdair Nottingham wrote:
> > > > > > > > >
> > > > > > > > > > I'm sorry for being slow I'm on holiday with limited
> access
> > > to
> > > > > > email.
> > > > > > > > > >
> > > > > > > > > > The goal (I thought) was to ensure that the support for
> > > ${a+b}
> > > > > > would
> > > > > > > be
> > > > > > > > > > optional. When we make it optional we have two problems:
> > > > > > > > > >
> > > > > > > > > > 1. How do we make it optional (usually gate any call
> with
> > a
> > > > > > > > > > Class.forName check to ensures we can load a class.
> > > > > > > > > > 2. How do we fail when the support isn't there and
> > someone
> > > is
> > > > > > using
> > > > > > > > it.
> > > > > > > > > >
> > > > > > > > > > The first problem is trivial to fix, the latter is harder
> > to
> > > > > > define.
> > > > > > > It
> > > > > > > > > > isn't until you build the bean that you find the ${a+b}
> > > doesn't
> > > > > > work
> > > > > > > > and
> > > > > > > > > > with lazy activation that could take a while. I would
> > suggest
> > > > that
> > > > > > if
> > > > > > > > we
> > > > > > > > > > have ${a+b} in use, and the apache-jexl bundle is not
> > > present,
> > > > then
> > > > > > > the
> > > > > > > > > bean
> > > > > > > > > > creation would most likely fail (or you would get the
> wrong
> > > > > > > behaviour).
> > > > > > > > > This
> > > > > > > > > > is obviously not desirable.
> > > > > > > > > >
> > > > > > > > > > An alternative would be to make use of the default
> > behaviour
> > > of
> > > > > > > > blueprint
> > > > > > > > > > for namespace extensions. By using a separate namespace
> to
> > > > indicate
> > > > > > > the
> > > > > > > > > > desire to use this behaviour blueprint will delay
> > > > initialisation of
> > > > > > a
> > > > > > > > > > bundle's blueprint container until the namespace is
> > > available.
> > > > The
> > > > > > > > result
> > > > > > > > > > would be if apache-jexl is not present the namespace
> > handler
> > > > would
> > > > > > > not
> > > > > > > > be
> > > > > > > > > > registered and the blueprint container would not be
> > > configured.
> > > > In
> > > > > > > > > addition
> > > > > > > > > > you can now register the namesake when apache-jexl
> becomes
> > > > > > available
> > > > > > > > > > allowing it to be brought up later.
> > > > > > > > >
> > > > > > > > > I think that this definitely the right way to go. In
> > practical
> > > > terms
> > > > > > > > though
> > > > > > > > > it might be quite a bit tricky to implement.
> > > > > > > > > In particular I am wondering how to link the usage of the
> > > > extended
> > > > > > > > property
> > > > > > > > > replacement syntax to a namespace reference. I can think of
> > > > > > > > > the following ways to do this:
> > > > > > > > >
> > > > > > > > > a) Have two different property placeholder brackets like
> > > ${...}
> > > > for
> > > > > > > the
> > > > > > > > > non-arithmetic one and $[...] for the one doing arithmetic.
> > The
> > > > > > second
> > > > > > > > > one is defined via a tag from the new namespace.
> > > > > > > > > b) Support property placeholders only if we can support the
> > > whole
> > > > > > > shebang
> > > > > > > > > (which is kind of step back?)
> > > > > > > > > c) Have a kind of unrelated namespace import which we check
> > for
> > > > when
> > > > > > we
> > > > > > > > > decide whether to do arithmetic (that could be quite
> > > non-obvious
> > > > to
> > > > > > the
> > > > > > > > > user).
> > > > > > > > >
> > > > > > > > >
> > > > > > > > The blueprint specification says any non-standard extensions
> to
> > > > > > blueprint
> > > > > > > > must be enabled via namespace handlers. I don't like the ext
> of
> > > cm
> > > > > > > > namespaces to require apache-jexl since it means more
> > > dependencies
> > > > are
> > > > > > > > pulled in when they may never be used.
> > > > > > > >
> > > > > > > Hi Alasdair,
> > > > > > > Since the current code does not hard depend on the
> commons-jexl,
> > > and
> > > > I
> > > > > > > think
> > > > > > > the only difference from your desire is adding a new namespace
> > > which
> > > > can
> > > > > > > delay the blueprint container initialization if the
> commons-jexl
> > is
> > > > not
> > > > > > > present,
> > > > > > > I consider this as an improvement to the current solution. And
> I
> > > > think it
> > > > > > > would be better to let user hold the option that if he would
> use
> > > the
> > > > new
> > > > > > > namespace, and if he don't use it, the ${a+b} can still work.
> > Hope
> > > > the
> > > > > > > current solution meets the criteria to start release..
> > > > > > >
> > > > > > > BTW, seems Aries community is not that active in last two
> month.
> > Is
> > > > there
> > > > > > > still a release manager help the release works?
> > > > > > >
> > > > > > > -Rex
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > >
> > > > > > > > Looking at your options a) doesn't work because it isn't
> using
> > > > > > namespace
> > > > > > > > handlers, b) sucks big time and would mean to meat the spec
> we
> > > > would
> > > > > > > need
> > > > > > > > apache-jexl and the whole point is to allow the spec to be
> > > > implemented
> > > > > > > > without apache-jexl being required. So I think something
> like
> > > > option c
> > > > > > > > should be gone for. For instance you could add an attribute
> in
> > a
> > > > > > > > non-standard namespace that says to enable this capability.
> > > > > > > >
> > > > > > > >
> > > > > > > > > Is any of that what you were thinking of?
> > > > > > > > >
> > > > > > > > > > Does that make any sense?
> > > > > > > > > >
> > > > > > > > > > Alasdair
> > > > > > > > > >
> > > > > > > > > > On 30 August 2011 07:36, Rex Wang <[email protected]>
> > wrote:
> > > > > > > > > >
> > > > > > > > > >> Sorry, I will add the corresponding tests. But I am not
> > > quite
> > > > > > > > > understanding
> > > > > > > > > >> your suggestion in Aries-727 of "use a different
> > namespace
> > > to
> > > > the
> > > > > > > ext
> > > > > > > > > >> one". The current implement add the ability to
> > > blueprint-ext
> > > > and
> > > > > > > also
> > > > > > > > > >> blueprint-cm, because the CmPropertyPlaceholder is the
> > > > subclass of
> > > > > > > the
> > > > > > > > > >> PropertyPlaceholder. Could a different namespace handle
> > > this?
> > > > > > > > > >> After the change is final, will definitely port it to
> the
> > > > trunk.
> > > > > > > > > >>
> > > > > > > > > >> thanks,
> > > > > > > > > >> -Rex
> > > > > > > > > >>
> > > > > > > > > >> 2011/8/30 Alasdair Nottingham <[email protected]>
> > > > > > > > > >>
> > > > > > > > > >>> Hi,
> > > > > > > > > >>>
> > > > > > > > > >>> I'm not happy with the current fix for ARIES-727. There
> > are
> > > > no
> > > > > > > tests
> > > > > > > > > and
> > > > > > > > > >> as
> > > > > > > > > >>> I commented on the bug the dependency on jexl is not
> > > optional
> > > > > > when
> > > > > > > it
> > > > > > > > > >> should
> > > > > > > > > >>> be. It also doesn't exist in trunk which is dangerous.
> > This
> > > > > > affects
> > > > > > > > the
> > > > > > > > > >>> programming model so it needs to be right.
> > > > > > > > > >>>
> > > > > > > > > >>> Alasdair Nottingham
> > > > > > > > > >>>
> > > > > > > > > >>> On 29 Aug 2011, at 23:17, Rex Wang <[email protected]>
> > > wrote:
> > > > > > > > > >>>
> > > > > > > > > >>>> Hi Devs,
> > > > > > > > > >>>>
> > > > > > > > > >>>> Geronimo 3.0-beta has passed the Java EE 6 full
> profile
> > > tck,
> > > > and
> > > > > > > is
> > > > > > > > > >>> going
> > > > > > > > > >>>> to release soon. But some dependencies are from Aries
> > > > project,
> > > > > > so
> > > > > > > we
> > > > > > > > > >> are
> > > > > > > > > >>>> requesting your supports to release the following 3
> > > > components
> > > > > > > with
> > > > > > > > > the
> > > > > > > > > >>>> important fixes to our users. Could anybody please
> help?
> > > > > > > > > >>>>
> > > > > > > > > >>>> *1. **org.apache.aries.application/0.2.2-SNAPSHOT*
> > > > > > > > > >>>> ARIES-521: handles zip files without directory entries
> > > > > > > > > >>>> ARIES-635: Move the resource bundle to the right
> > directory
> > > > > > > > > >>>> ARIES-638: Logging improvements for
> > > > AriesApplicationManagerImpl
> > > > > > > > > >>>> ARIES-667: OBRAriesResolver can return bundle
> > information
> > > > for
> > > > > > > > bundles
> > > > > > > > > >>> with
> > > > > > > > > >>>> higher version than expected
> > > > > > > > > >>>> ARIES-689: Application OBR resolution fails for
> optional
> > > > imports
> > > > > > > > > >>>> ARIES-734: Back port improvements made to resolution
> > error
> > > > > > > messages
> > > > > > > > in
> > > > > > > > > >>> OBR
> > > > > > > > > >>>> application resolver
> > > > > > > > > >>>>
> > > > > > > > > >>>> *2. org.apache.aries.util/0.2.1-SNAPSHOT*
> > > > > > > > > >>>> ARIES-667: OBRAriesResolver can return bundle
> > information
> > > > for
> > > > > > > > bundles
> > > > > > > > > >>> with
> > > > > > > > > >>>> higher version than expected
> > > > > > > > > >>>>
> > > > > > > > > >>>> *3. org.apache.aries.blueprint/0.3.2-SNAPSHOT*
> > > > > > > > > >>>> ARIES-727 support syntax : ${a+b} in blueprint-ext
> > > > > > > > > >>>>
> > > > > > > > > >>>> regards,
> > > > > > > > > >>>> --
> > > > > > > > > >>>> Lei Wang (Rex)
> > > > > > > > > >>>> rwonly AT apache.org
> > > > > > > > > >>>
> > > > > > > > > >>
> > > > > > > > > >>
> > > > > > > > > >>
> > > > > > > > > >> --
> > > > > > > > > >> Lei Wang (Rex)
> > > > > > > > > >> rwonly AT apache.org
> > > > > > > > > >>
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > --
> > > > > > > > > > Alasdair Nottingham
> > > > > > > > > > [email protected]
> > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > > >
> > > > > > > > --
> > > > > > > > Alasdair Nottingham
> > > > > > > > [email protected]
> > > > > > > >
> > > > > > >
> > > > > > >
> > > > > > >
> > > > > > > --
> > > > > > > Lei Wang (Rex)
> > > > > > > rwonly AT apache.org
> > > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > Alasdair Nottingham
> > > > > > [email protected]
> > > > > >
> > > > >
> > > > >
> > > > >
> > > > > --
> > > > > Lei Wang (Rex)
> > > > > rwonly AT apache.org
> > > >
> > > >
> > >
> > >
> > >
> > > --
> > > Lei Wang (Rex)
> > > rwonly AT apache.org
> > >
> >
> >
> >
> > --
> > Alasdair Nottingham
> > [email protected]
> >
>
>
>
> --
> Lei Wang (Rex)
> rwonly AT apache.org
>
--
Alasdair Nottingham
[email protected]