hi,
Is it allowed to merge the spring and blueprint versions of
configuration schemas and use the resulting schema for both cases?

If the answer is a definitive no, the rest of this mail can be
ignored. If the answer is yes or maybe, I would like to explain why I
am asking this question.

For the blueprint based configuration, we are using separate BP
specific XML schemas to refer to those BP specific attributes that are
relevant (e.g., for life-cycle management). As an example, a BP based
schema uses its base type Tcomponent while its spring version uses its
base type identifiedType. BP's Tcomponent has some additional
attributes relevant for BP. The BP's schema itself uses this
Tcomponent to define its various BP artifact types such as bean,
service, etc, while the spring's own schema similarly uses its
identifiedType to define its own spring artifact types.

My question is whether it is necessary to have two configuration
schema versions when we are defining our own configuration types.
Could we have a single compound schema that can accept both artifacts
that we can use to derive our configuration object types?

Having two versions of the configuration schema is the right thing to
clearly distinguish the difference of the two. For most components,
this does not introduce any significant overhead other than physically
having to maintain two almost identical schemas because their
configuration objects are not complex.

However, the situation is somewhat different for the ws-rm component.
The ws-rm component uses a few jaxb based complex configuration
objects and these complex jaxb types are currently defined in the
spring version of the ws-rm namespace. When I made ws-rm into
BP-ready, I didn't want to generate the identical jaxb types in
another namespace and at the same time I wanted to keep the ws-rm
configuration simple, I simply reused the spring version of the
namespace for BP. In other words, I created another schema (for BP
with the additional BP artifact attributes) using the same namespace
as in the spring one.

But this approach violates the convention of uniquely associating a
namespace to its schema definition. As such, this needs to be
corrected. And I have considered several options and I would like to
get your comments.

Hera are the 4 options considered for ws-rm:

Option 1
Define two elements (wsrm-mgr:rmManager and wsrm-mgr:jdbcStore) in the
new ws-rm BP namespace and keep the rest in the current ws-rm
namespace and import them into the new ws-rm BP schema.

Pro: straightforward implementation, no schema duplication for the
identical parts, no duplicated jaxb classes
Con: need two ws-rm namespaces for a BP based ws-rm configuration when
the above two elements are configured.


Option 2
Duplicate all the definitions in the new ws-rm BP namespace.

Pro: one namespace in the configuration
Con: schema and jaxb class duplicated, mapping of those jaxb objects
required (however, this could be avoided by not simply duplicating
each definition but making each definitions to be defined as an
extension of its counterpart).


Option 3
Declare only the elements in the new ws-rm BP namespace and keep the
types in the original schema. And set the substitutionGroup property
of each newly defined element to refer to its counterpart element in
the original schema.

Pro: one namespace in the configuration, no jaxb class duplicated, no
jaxb objects mapping required
Con: slightly more complex jaxb classes generated (as each
substitutable element is wrapped in JAXBElement to carry its xml
element information).


Option 4
Merge/collapse the spring and BP artifacts into one bag of attributes
and use one configuration schema for both spring and BP versions. Let
the configuration runtime (i.e., the namespace handlers) recognize the
relevant attributes.

Pro: one shared schema, one namespace, no jaxb class duplication,
straightforward implementation
Con: irrelevant attributes are allowed by the schema (however, these
irrelevant attributes can be checked by the corresponding namespace
handlers during the configuration time).


I am inclined towards option 4 for its simplicity. But I am not sure
if the this approach is somehow discouraged or prohibited. Concretely,
option 4 would derive a configuration type not from either
bp-beans:Tcomponent or s-beans:identifiedType, but from a type that
contains their merged artifact attribute groups and use this base type
for both cases. In that way, we would need one configuration schema to
maintain.

If this approach is disallowed, I am opting for option 1 for ws-rm.
Options 2 and 3 require an unnecessary duplication of various
resources which does not appear to be justifiable for the ws-rm
component, I think.

I would appreciate your comments.

thanks.

regards, aki

Reply via email to