You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2002/02/18 16:13:14 UTC
cvs commit: jakarta-avalon/src/proposal/service ServiceSelector.java ServiceResolver.java ServiceReclaimer.java ServiceChooser.java package.html ServiceManager.java Serviceable.java DefaultServiceManager.java
mcconnell 02/02/18 07:13:14
Modified: src/proposal/service ServiceManager.java Serviceable.java
DefaultServiceManager.java
Added: src/proposal/service ServiceSelector.java
ServiceResolver.java ServiceReclaimer.java
ServiceChooser.java package.html
Log:
updated proposal
Revision Changes Path
1.2 +0 -11 jakarta-avalon/src/proposal/service/ServiceManager.java
Index: ServiceManager.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/proposal/service/ServiceManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ServiceManager.java 10 Feb 2002 05:39:53 -0000 1.1
+++ ServiceManager.java 18 Feb 2002 15:13:14 -0000 1.2
@@ -73,15 +73,4 @@
* @return True if the object exists, False if it does not.
*/
boolean hasService( String role );
-
- /**
- * Return the <code>Object</code> when you are finished with it. This
- * allows the <code>ServiceManager</code> to handle the End-Of-Life Lifecycle
- * events associated with the Object. Please note, that no Exceptions
- * should be thrown at this point. This is to allow easy use of the
- * ServiceManager system without having to trap Exceptions on a release.
- *
- * @param object The Object we are releasing.
- */
- void release( Object object );
}
1.2 +3 -0 jakarta-avalon/src/proposal/service/Serviceable.java
Index: Serviceable.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/proposal/service/Serviceable.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Serviceable.java 10 Feb 2002 05:39:53 -0000 1.1
+++ Serviceable.java 18 Feb 2002 15:13:14 -0000 1.2
@@ -20,6 +20,9 @@
* the <code>compose</code> method before the <code>Serviceable</code>
* can be considered valid.
*
+ * @see org.apache.avalon.framework.service.ServiceManager
+ * @see org.apache.avalon.framework.service.ServiceResolver
+ *
* @author <a href="mailto:fede@apache.org">Federico Barbieri</a>
* @author <a href="mailto:pier@apache.org">Pierpaolo Fumagalli</a>
* @author <a href="mailto:stefano@apache.org">Stefano Mazzocchi</a>
1.2 +1 -13 jakarta-avalon/src/proposal/service/DefaultServiceManager.java
Index: DefaultServiceManager.java
===================================================================
RCS file: /home/cvs/jakarta-avalon/src/proposal/service/DefaultServiceManager.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultServiceManager.java 10 Feb 2002 05:39:53 -0000 1.1
+++ DefaultServiceManager.java 18 Feb 2002 15:13:14 -0000 1.2
@@ -77,14 +77,13 @@
try
{
- this.release(this.lookup(role));
+ this.lookup(role);
componentExists = true;
}
catch (Throwable t)
{
// Ignore all throwables--we want a yes or no answer.
}
-
return componentExists;
}
@@ -98,17 +97,6 @@
{
checkWriteable();
m_components.put( role, object );
- }
-
- /**
- * Release component.
- *
- * @param component the component
- */
- public void release( final Object component )
- {
- // if the ServiceManager handled pooling, it would be
- // returned to the pool here.
}
/**
1.1 jakarta-avalon/src/proposal/service/ServiceSelector.java
Index: ServiceSelector.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.service;
/**
* A <code>ServiceSelector</code> selects <code>Object</code>s based on a
* supplied policy. The contract is that all the <code>Object</code>s implement the
* same role.
*
* @see org.apache.avalon.framework.service.Serviceable
* @see org.apache.avalon.framework.service.ServiceManager
* @see org.apache.avalon.framework.service.ServiceChooser
*
* @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
*/
public interface ServiceSelector
{
/**
* Select the <code>Object</code> associated with the given policy.
* For instance, If the <code>ServiceSelector</code> has a
* <code>Generator</code> stored and referenced by a URL, I would use the
* following call:
*
* <pre>
* try
* {
* Generator input;
* input = (Generator)selector.select( new URL("foo://demo/url") );
* }
* catch (...)
* {
* ...
* }
* </pre>
*
* @param policy A criteria against which a <code>Object</code> is selected.
*
* @exception ServiceSelector If the requested <code>Object</code> cannot be supplied
*/
Object select( Object policy )
throws ServiceException;
/**
* Check to see if a <code>Object</code> exists relative to the supplied policy.
*
* @param policy a <code>Object</code> containing the selection criteria
* @return True if the component is available, False if it not.
*/
boolean isSelectable( Object policy );
}
1.1 jakarta-avalon/src/proposal/service/ServiceResolver.java
Index: ServiceResolver.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.service;
/**
* A <code>ServiceResolver</code> selects pooled <code>Object</code>s based on a
* role. The contract is that all the <code>Object</code>s implement the
* differing roles and there is one <code>Object</code> per role. If you
* need to select on of many <code>Object</code>s that implement the same
* role, then you need to use a <code>ServiceSelector</code>. Roles are
* usually the full interface name.
*
* Object aquired via the <code>ServiceResolver</code> must be returned
* using the release and releaseAll methods. This allows the resolver to
* to maintain a pool of objects.
*
* @see org.apache.avalon.framework.service.ServiceManager
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
*/
public interface ServiceResolver extends ServiceManager, ServiceReclaimer
{
/**
* Get the <code>Object</code> associated with the given role. For
* instance, If the <code>ServiceResolver</code> had a
* <code>LoggerComponent</code> stored and referenced by role, I would use
* the following call:
* <pre>
* try
* {
* MyComponent log;
* myComponent = (MyComponent) manager.checkout(MyComponent.ROLE);
* }
* catch (...)
* {
* ...
* }
* </pre>
*
* The when the client is finished using the supplied object, it must relase
* the object back to the resolver using the <code>release</code> method.
* @param name The role name of the <code>Object</code> to retrieve.
* @exception ServiceException if an error occurs
*/
Object checkout( String role )
throws ServiceException;
/**
* Get the <code>Object</code> associated with the given role and allocated against
* supplied token . For instance, If the <code>ServiceResolver</code> had a
* <code>LoggerComponent</code> stored and referenced by role, I would use
* the following call:
* <pre>
* try
* {
* MyComponent log;
* myComponent = (MyComponent) manager.checkout(MyComponent.ROLE, this );
* }
* catch (...)
* {
* ...
* }
* </pre>
*
* The when the client is finished using the supplied object, it must relase
* the object back to the resolver using the <code>release</code> or
* <code>releaseAll</code> methods.
* <pre>
* manager.release( log );
* // or
* manager.releaseAll( this );
* </pre>
*
* @param token An object identifying the usage that may be used as a key
* @param role The role name of the <code>Object</code> to retrieve.
* when releasing mutliple usages.
* @exception ServiceException if an error occurs
*/
Object checkout( Object token, String role )
throws ServiceException;
}
1.1 jakarta-avalon/src/proposal/service/ServiceReclaimer.java
Index: ServiceReclaimer.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.service;
/**
* A <code>ServiceReclaimer</code> is an abstract interface inherited by
* types that manage a pool of service. The interface provides support for
* the release of object references back to the pool enabling object recycling.
*
* @see org.apache.avalon.framework.service.ServiceResolver
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
*/
public interface ServiceReclaimer
{
/**
* Release component.
*
* @param object the object to release
*/
public void release( Object object );
/**
* Release all objects associated with the supplied token.
* @param token a token supplied to a <code>ServiceResolver</code>
* during service aquisition.
*/
public void releaseAll( Object token );
}
1.1 jakarta-avalon/src/proposal/service/ServiceChooser.java
Index: ServiceChooser.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE.txt file.
*/
package org.apache.avalon.framework.service;
/**
* A <code>ServiceChooser</code> selects pooled <code>Object</code>s based on a
* supplied policy and optional token.
*
* @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
*/
public interface ServiceChooser extends ServiceSelector, ServiceReclaimer
{
/**
* Select the <code>Object</code> associated based on a supplied policy.
* <pre>
* try
* {
* MyComponent log;
* myComponent = (MyComponent) chooser.choose( MyComponent.ROLE );
* }
* catch (...)
* {
* ...
* }
* </pre>
*
* The when the client is finished using the supplied object, it must relase
* the object back to the resolver using the <code>release</code> method.
* @param policy The policy defining the selection criteria against which
* an <code>Object</code> is supplied.
* @exception ServiceException if an error occurs
*/
Object choose( Object policy )
throws ServiceException;
/**
* Select the <code>Object</code> associated based on a supplied usage token
* and policy.
* <pre>
* try
* {
* MyComponent log;
* myComponent = (MyComponent) chooser.choose( this, MyComponent.ROLE );
* }
* catch (...)
* {
* ...
* }
* </pre>
*
* The when the client is finished using the supplied object, it must relase
* the object back to the resolver using the <code>release</code> or
* <code>releaseAll</code> methods.
* <pre>
* manager.release( log );
* // or
* manager.releaseAll( this );
* </pre>
*
* @param token An object identifying the usage that may be used as a key
* @param policy The policy defining the selection criteria against which
* an <code>Object</code> is supplied.
* @exception ServiceException if an error occurs
*/
Object choose( Object token, Object policy )
throws ServiceException;
}
1.1 jakarta-avalon/src/proposal/service/package.html
Index: package.html
===================================================================
<body>
Extension interfaces and default implementation of a service management framework supporting container based service lookup and decommissioning - PROPOSAL.
</body>
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>