Ability of deployers to specify "default" capbility implementations that cannot
be overridden
---------------------------------------------------------------------------------------------
Key: MUSE-26
URL: http://issues.apache.org/jira/browse/MUSE-26
Project: Muse
Type: New Feature
Environment: Axis2 and OSGi
Reporter: Dan Jemiolo
Right now, Muse allows users to specify the implementation class for every
capability that they add to a resource type. In some cases, a vendor that is
deploying Muse may wish to require use of a certain implementation that is not
easily replaced by the user. This allows the Muse application developer to
provide certain QoS guarantees.
There is a fairly elegant solution to this - proposal is below:
Users could provide a certain (optional, but standard) .properties file in the
classpath ( call it org/apache/muse/core/RequiredImplementations, or
something), and that file will be consulted whenever a capability is being read
from the deployment descriptor. The .properties file would be a set of
{capability URI, capability class} pairs, and it would take precedence over
what was found in the deployment descriptor.
so, instead of today's set up, where a user might have:
<resource>
...
<capability>
<!-- bad - user could swap out WS-N impl even if we don't want them too
-->
<capability-uri>
http://docs.oasis-open.org/wsn/bw-2/NotificationProducer
</capability-uri>
<java-capability-class>
com.ibm.websphere.wsspi.notification.NotificationProducerImpl
</java-capability-class>
</capability>
<capability>
<capability-uri>
http://www.mycompany.com/example/my/capability
</capability-uri>
<java-capability-class>
com.mycompany.example.my.CapabilityImpl
</java-capability-class>
</capability>
</resource>
we would instead have:
<resource>
...
<capability>
<!-- notice - no capability class - this is in .properties file -->
<capability-uri>
http://docs.oasis-open.org/wsn/bw-2/NotificationProducer
</capability-uri>
</capability>
<capability>
<capability-uri>
http://www.mycompany.com/example/my/capability
</capability-uri>
<java-capability-class>
com.mycompany.example.my.CapabilityImpl
</java-capability-class>
</capability>
</resource>
with this line in the RequiredImplementations.properties file:
http://docs.oasis-open.org/wsn/bw-2/NotificationProducer =
com.mycompany.ws.notification.NotificationProducerImpl
If/When the user decides to use a capability provided by the platform, he will
only specify the URI in the deployment descriptor, and the implementation will
be picked up from the .properties file. If the user tried to sneak one by us
and add the <java-capability-class/> element back into the second descriptor
example, it wouldn't work because the .properties file would have precedence.
Adding the element back in would result in a message that said:
"A capability with URI {$capability-URI} already been defined with
{$details-of-capability}."
This allows users to build up resource types by only aggregating the
capabilities they want (that is, they don't have to include WSN if they don't
need it), but prevents them from adding new implementations of capabilities
considered "very important" (so when they do use WSN, it will be the platform's
desired impl).
All that would be left (from a deployer's perspective) is to move the .jar file
that contained the .properties file into non-user-space on the classpath. this
would prevent a user from replacing the .properties file unless they went
digging.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]