djencks 2004/01/22 12:58:41
Modified: modules/common/src/java/org/apache/geronimo/common/propertyeditor
PropertyEditors.java
modules/common/src/test/org/apache/geronimo/common/propertyeditor
ArrayPropertyEditorAdapterTest.java
modules/core/src/test/org/apache/geronimo/test/util
ServerUtil.java
modules/deployment/src/test-resources/etc
bootstrapped-service.xml
modules/kernel/src/conf boot.mlet
modules/kernel/src/java/org/apache/geronimo/gbean/jmx
AbstractManagedObject.java
modules/kernel/src/java/org/apache/geronimo/kernel
Kernel.java
modules/kernel/src/test/org/apache/geronimo/kernel
GBeanTest.java
Added: modules/common/src/java/org/apache/geronimo/common/propertyeditor
ArrayPropertyEditorAdapter.java
modules/kernel/src/java/org/apache/geronimo/gbean/jmx
DependencyService.java DependencyServiceMBean.java
Removed: modules/kernel/src/java/org/apache/geronimo/kernel/classspace
ClassSpace.java ClassSpaceException.java
ClassSpaceLoader.java ClassSpaceUtil.java
DefaultClassSpace.java classspace-mbean.xml
modules/kernel/src/java/org/apache/geronimo/kernel/service
AbstractManagedObject2.java
ArrayPropertyEditorAdapter.java
DependencyService2.java
DependencyService2MBean.java
GeronimoAttributeInfo.java GeronimoMBean.java
GeronimoMBeanContext.java
GeronimoMBeanEndpoint.java
GeronimoMBeanEndpointConnection.java
GeronimoMBeanEndpointListener.java
GeronimoMBeanInfo.java GeronimoMBeanTarget.java
GeronimoNotificationInfo.java
GeronimoOperationInfo.java
GeronimoParameterInfo.java ParserUtil.java
StartException.java StopException.java
modules/kernel/src/test/org/apache/geronimo/kernel/classspace
DefaultClassSpaceTest.java
modules/kernel/src/test/org/apache/geronimo/kernel/service
BootstrapTestObject.java GeronimoMBeanTest.java
LifeCycleTest.java ParserUtilTest.java Person.java
family-service.xml
Log:
Move the last useful classes and remove ClassSpace and GeronimoMBean
Revision Changes Path
1.6 +31 -32
incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/propertyeditor/PropertyEditors.java
Index: PropertyEditors.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/propertyeditor/PropertyEditors.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- PropertyEditors.java 8 Sep 2003 04:08:10 -0000 1.5
+++ PropertyEditors.java 22 Jan 2004 20:58:40 -0000 1.6
@@ -64,7 +64,6 @@
import org.apache.geronimo.common.Classes;
import org.apache.geronimo.common.NullArgumentException;
-import org.apache.geronimo.kernel.service.ArrayPropertyEditorAdapter;
/**
* A collection of PropertyEditor utilities.
@@ -76,7 +75,7 @@
public class PropertyEditors
{
/**
- * Augment the PropertyEditorManager search path to incorporate the
+ * Augment the PropertyEditorManager search path to incorporate the
* Geronimo specific editors.
*/
static
@@ -84,7 +83,7 @@
// Append our package to the serach path
appendEditorSearchPath("org.apache.geronimo.common.propertyeditor");
}
-
+
/**
* Locate a value editor for a given target type.
*
@@ -96,9 +95,9 @@
if (type == null) {
throw new NullArgumentException("type");
}
-
+
PropertyEditor editor = PropertyEditorManager.findEditor(type);
-
+
// Try to use adapter for array types
if (editor == null && type.isArray()) {
Class ctype = type.getComponentType();
@@ -107,10 +106,10 @@
editor = new ArrayPropertyEditorAdapter(ctype, editor);
}
}
-
+
return editor;
}
-
+
/**
* Locate a value editor for a given target type.
*
@@ -123,7 +122,7 @@
if (typeName == null) {
throw new NullArgumentException("typeName");
}
-
+
Class type = null;
try {
type = Classes.loadClass(typeName);
@@ -132,10 +131,10 @@
// look for a nested class
type = Classes.loadClass(typeName + "$PropertyEditor");
}
-
+
return findEditor(type);
}
-
+
/**
* Get a value editor for a given target type.
*
@@ -150,10 +149,10 @@
if (editor == null) {
throw new PropertyEditorException("No property editor for type:
" + type);
}
-
+
return editor;
}
-
+
/**
* Get a value editor for a given target type.
*
@@ -169,10 +168,10 @@
if (editor == null) {
throw new PropertyEditorException("No property editor for type:
" + typeName);
}
-
+
return editor;
}
-
+
/**
* Register an editor class to be used to editor values of a given
target class.
*
@@ -187,10 +186,10 @@
if (editorType == null) {
throw new NullArgumentException("editorType");
}
-
+
PropertyEditorManager.registerEditor(type, editorType);
}
-
+
/**
* Register an editor class to be used to editor values of a given
target class.
*
@@ -207,13 +206,13 @@
if (editorTypeName == null) {
throw new NullArgumentException("editorTypeName");
}
-
+
Class type = Classes.loadClass(typeName);
Class editorType = Classes.loadClass(editorTypeName);
-
+
registerEditor(type, editorType);
}
-
+
/**
* Gets the package names that will be searched for property editors.
*
@@ -222,15 +221,15 @@
public static List getEditorSearchPath()
{
String[] path = PropertyEditorManager.getEditorSearchPath();
-
+
List list = new ArrayList(path.length);
for (int i=0; i<path.length; i++) {
list.add(path[i]);
}
-
+
return list;
}
-
+
/**
* Sets the package names that will be searched for property editors.
*
@@ -241,11 +240,11 @@
if (path == null) {
throw new NullArgumentException("path");
}
-
+
String[] elements = (String[])path.toArray(new String[path.size()]);
PropertyEditorManager.setEditorSearchPath(elements);
}
-
+
/**
* Append package names to the property editor search path.
*
@@ -257,13 +256,13 @@
throw new NullArgumentException("names");
}
if (names.size() == 0) return;
-
+
List path = getEditorSearchPath();
path.addAll(names);
-
+
setEditorSearchPath(path);
}
-
+
/**
* Append package names to the property editor search path.
*
@@ -275,15 +274,15 @@
throw new NullArgumentException("names");
}
if (names.length == 0) return;
-
+
List list = new ArrayList(names.length);
for (int i=0; i<names.length; i++) {
list.add(names[i]);
}
-
+
appendEditorSearchPath(list);
}
-
+
/**
* Append a package name to the property editor search path.
*
@@ -294,7 +293,7 @@
if (name == null) {
throw new NullArgumentException("name");
}
-
+
appendEditorSearchPath(new String[] { name });
}
}
1.3 +47 -37
incubator-geronimo/modules/common/src/java/org/apache/geronimo/common/propertyeditor/ArrayPropertyEditorAdapter.java
1.3 +11 -11
incubator-geronimo/modules/common/src/test/org/apache/geronimo/common/propertyeditor/ArrayPropertyEditorAdapterTest.java
Index: ArrayPropertyEditorAdapterTest.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/common/src/test/org/apache/geronimo/common/propertyeditor/ArrayPropertyEditorAdapterTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ArrayPropertyEditorAdapterTest.java 8 Sep 2003 04:10:57 -0000
1.2
+++ ArrayPropertyEditorAdapterTest.java 22 Jan 2004 20:58:40 -0000
1.3
@@ -63,7 +63,7 @@
import junit.framework.TestCase;
/**
- * Unit test for [EMAIL PROTECTED]
org.apache.geronimo.kernel.service.ArrayPropertyEditorAdapter} class.
+ * Unit test for [EMAIL PROTECTED]
org.apache.geronimo.common.propertyeditor.ArrayPropertyEditorAdapter} class.
*
* @version $Revision$ $Date$
*/
@@ -71,37 +71,37 @@
extends TestCase
{
PropertyEditor editor;
-
+
protected void setUp()
{
editor = PropertyEditors.findEditor(URL[].class);
}
-
+
public void testGetValue_Simple()
{
String input = "http://apache.org";
-
+
editor.setAsText(input);
Object output = editor.getValue();
-
+
assertNotNull(output);
assertEquals(URL[].class, output.getClass());
-
+
URL[] urls = (URL[])output;
assertEquals(1, urls.length);
assertEquals(input, urls[0].toString());
}
-
+
public void testGetValue_2URLs()
{
String input = "http://apache.org, http://google.com";
-
+
editor.setAsText(input);
Object output = editor.getValue();
-
+
assertNotNull(output);
assertEquals(URL[].class, output.getClass());
-
+
URL[] urls = (URL[])output;
assertEquals(2, urls.length);
assertEquals("http://apache.org", urls[0].toString());
1.4 +2 -2
incubator-geronimo/modules/core/src/test/org/apache/geronimo/test/util/ServerUtil.java
Index: ServerUtil.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/core/src/test/org/apache/geronimo/test/util/ServerUtil.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ServerUtil.java 22 Jan 2004 08:10:26 -0000 1.3
+++ ServerUtil.java 22 Jan 2004 20:58:40 -0000 1.4
@@ -86,7 +86,7 @@
MBeanServer mbServer =
MBeanServerFactory.createMBeanServer("LocalTestServer");
mbServer.createMBean("javax.management.relation.RelationService",
RELATION_SERVICE, new Object[]{Boolean.TRUE}, new String[]{"boolean"});
mbServer.createMBean("org.apache.geronimo.kernel.deployment.DependencyService",
DEPENDS_SERVICE);
-
mbServer.createMBean("org.apache.geronimo.kernel.service.DependencyService2",
DEPENDS_SERVICE2);
+
mbServer.createMBean("org.apache.geronimo.gbean.jmx.DependencyService2",
DEPENDS_SERVICE2);
return mbServer;
}
1.7 +22 -1
incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml
Index: bootstrapped-service.xml
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/deployment/src/test-resources/etc/bootstrapped-service.xml,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- bootstrapped-service.xml 22 Jan 2004 15:18:41 -0000 1.6
+++ bootstrapped-service.xml 22 Jan 2004 20:58:40 -0000 1.7
@@ -1,7 +1,6 @@
<gbeans>
<gbean class="org.apache.geronimo.deployment.xml.LocalEntityResolver"
objectName="geronimo.system:type=EntityResolver">
- <!--default attribute="CatalogFileURI"
type="java.net.URI">file:/Users/david/geronimo/head2/incubator-geronimo/modules/core/src/conf/resolver-catalog.xml</default-->
<default attribute="CatalogFileURI"
type="java.net.URI">core/src/conf/resolver-catalog.xml</default>
<default attribute="FailOnUnresolvable"
type="boolean">false</default>
</gbean>
@@ -98,6 +97,28 @@
<pattern>geronimo.boot:role=Kernel</pattern>
</endpoint>
</gbean>
+
+ <gbean
class="org.apache.geronimo.connector.deployment.ConnectorDeployer"
objectName="geronimo.deployment:type=connector">
+ <default attribute="ConnectionTrackerNamePattern"
type="javax.management.ObjectName">geronimo.connector:service=ConnectionTrackingCoordinator</default>
+ <endpoint name="ParserFactory">
+ <pattern>geronimo.system:type=ParserFactory</pattern>
+ </endpoint>
+ </gbean>
+
+ <!-- uncomment and set the packageURL to deploy the openjca adapter -->
+ <!--gbean class="org.apache.geronimo.deployment.util.ExplicitDeployment"
objectName="geronimo.app:name=OpenJCAAdapter">
+ <default attribute="ConfigID"
type="java.net.URI">org/apache/geronimo/OpenJCA</default>
+ <default attribute="PackageURL"
type="java.net.URL">file:/Users/david/.maven/repository/openejb-jca/jars/openejb-jca-DEV.jar</default>
+ <endpoint name="ConfigurationParent">
+
<pattern>geronimo.config:name="org/apache/geronimo/Bootstrap"</pattern>
+ </endpoint>
+ <endpoint name="BatchDeployerFactory">
+ <pattern>geronimo.system:type=BatchDeployerFactory</pattern>
+ </endpoint>
+ <endpoint name="Kernel">
+ <pattern>geronimo.boot:role=Kernel</pattern>
+ </endpoint>
+ </gbean-->
<!-- web -->
1.5 +1 -1 incubator-geronimo/modules/kernel/src/conf/boot.mlet
Index: boot.mlet
===================================================================
RCS file: /home/cvs/incubator-geronimo/modules/kernel/src/conf/boot.mlet,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- boot.mlet 17 Nov 2003 10:57:40 -0000 1.4
+++ boot.mlet 22 Jan 2004 20:58:40 -0000 1.5
@@ -11,7 +11,7 @@
>
</MLET>
-<MLET CODE="org.apache.geronimo.kernel.service.DependencyService2"
+<MLET CODE="org.apache.geronimo.gbean.jmx.DependencyService2"
NAME="geronimo.boot:role=DependencyService2"
ARCHIVE=""
>
1.3 +5 -6
incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java
Index: AbstractManagedObject.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/AbstractManagedObject.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- AbstractManagedObject.java 15 Jan 2004 00:45:54 -0000 1.2
+++ AbstractManagedObject.java 22 Jan 2004 20:58:40 -0000 1.3
@@ -84,7 +84,6 @@
import org.apache.geronimo.kernel.management.NotificationType;
import org.apache.geronimo.kernel.management.State;
import org.apache.geronimo.kernel.management.StateManageable;
-import org.apache.geronimo.kernel.service.DependencyService2MBean;
import org.apache.geronimo.gbean.WaitingException;
/**
@@ -115,7 +114,7 @@
/**
* A dynamic proxy to the dependency service.
*/
- private DependencyService2MBean dependencyService;
+ private DependencyServiceMBean dependencyService;
/**
* The sequence number of the events.
@@ -185,8 +184,8 @@
public synchronized ObjectName preRegister(MBeanServer server,
ObjectName objectName) throws Exception {
this.server = server;
this.objectName = objectName;
- dependencyService = (DependencyService2MBean)
MBeanProxyFactory.getProxy(
- DependencyService2MBean.class,
+ dependencyService = (DependencyServiceMBean)
MBeanProxyFactory.getProxy(
+ DependencyServiceMBean.class,
server,
new ObjectName("geronimo.boot:role=DependencyService2"));
@@ -223,7 +222,7 @@
return objectName;
}
- public DependencyService2MBean getDependencyService() {
+ public DependencyServiceMBean getDependencyService() {
return dependencyService;
}
1.1
incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/DependencyService.java
Index: DependencyService.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Geronimo" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Geronimo", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* ====================================================================
*/
package org.apache.geronimo.gbean.jmx;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.management.JMException;
import javax.management.MBeanRegistration;
import javax.management.MBeanServer;
import javax.management.MBeanServerNotification;
import javax.management.Notification;
import javax.management.NotificationFilterSupport;
import javax.management.NotificationListener;
import javax.management.ObjectName;
import org.apache.geronimo.kernel.jmx.JMXUtil;
/**
* DependencyService is the record keeper of the dependencies in Geronimo.
The DependencyService
* does not enforce any dependencies, it is simply a place where components
can register their intent
* to be dependent on another component. Since a JMX Component can pretty
much do whatever it wants
* a component must watch the components it depends on to assure that they
are following the
* J2EE-Management state machine.
*
* The DependencyService uses the nomenclature of parent-child where a child
is dependent on a parent.
* The names parent and child have no other meaning are just a convience to
make the code readable.
*
* @jmx:mbean
*
* @version $Revision: 1.1 $ $Date: 2004/01/22 20:58:40 $
*/
public class DependencyService implements MBeanRegistration,
NotificationListener, DependencyServiceMBean {
/**
* The mbean server we are registered with.
*/
private MBeanServer server;
/**
* A map from child names to a list of parents.
*/
private final Map childToParentMap = new HashMap();
/**
* A map from parent back to a list of its children.
*/
private final Map parentToChildMap = new HashMap();
/**
* A map from a component's ObjectName to the list of ObjectPatterns that
the component is blocking
* from starting.
*/
private final Map startHoldsMap = new HashMap();
public ObjectName preRegister(MBeanServer server, ObjectName objectName)
throws Exception {
if (objectName == null) {
objectName = JMXUtil.DEPENDENCY_SERVICE_NAME;
}
this.server = server;
NotificationFilterSupport mbeanServerFilter = new
NotificationFilterSupport();
mbeanServerFilter.enableType(MBeanServerNotification.UNREGISTRATION_NOTIFICATION);
server.addNotificationListener(JMXUtil.DELEGATE_NAME, this,
mbeanServerFilter, null);
return objectName;
}
public void postRegister(Boolean aBoolean) {
}
public void preDeregister() throws Exception {
}
public void postDeregister() {
try {
server.removeNotificationListener(JMXUtil.DELEGATE_NAME, this);
} catch (JMException ignored) {
// no big deal... just good citizen clean up code
}
synchronized(this) {
server = null;
childToParentMap.clear();
parentToChildMap.clear();
startHoldsMap.clear();
}
}
/**
* Declares a dependency from a child to a parent.
* @param child the dependent component
* @param parent the component the child is depending on
*
* @jmx:managed-operation
*/
public synchronized void addDependency(ObjectName child, ObjectName
parent) {
Set parents = (Set) childToParentMap.get(child);
if (parents == null) {
parents = new HashSet();
childToParentMap.put(child, parents);
}
parents.add(parent);
Set children = (Set) parentToChildMap.get(parent);
if (children == null) {
children = new HashSet();
parentToChildMap.put(parent, children);
}
children.add(child);
}
/**
* Removes a dependency from a child to a parent
* @param child the dependnet component
* @param parent the component that the child wil no longer depend on
*
* @jmx:managed-operation
*/
public synchronized void removeDependency(ObjectName child, ObjectName
parent) {
Set parents = (Set) childToParentMap.get(child);
if (parents != null) {
parents.remove(parent);
}
Set children = (Set) parentToChildMap.get(parent);
if (children != null) {
children.remove(child);
}
}
/**
* Removes all dependencies for a child
* @param child the component that will no longer depend on anything
*
* @jmx:managed-operation
*/
public synchronized void removeAllDependencies(ObjectName child) {
Set parents = (Set) childToParentMap.remove(child);
if(parents == null) {
return;
}
for (Iterator iterator = parents.iterator(); iterator.hasNext();) {
ObjectName parent = (ObjectName) iterator.next();
Set children = (Set) parentToChildMap.get(parent);
if (children != null) {
children.remove(child);
}
}
}
/**
* Adds dependencies from the child to every parent in the parents set
*
* @param child the dependent component
* @param parents the set of components the child is depending on
*
* @jmx:managed-operation
*/
public synchronized void addDependencies(ObjectName child, Set parents) {
Set existingParents = (Set) childToParentMap.get(child);
if (existingParents == null) {
existingParents = new HashSet(parents);
childToParentMap.put(child, existingParents);
} else {
existingParents.addAll(parents);
}
for (Iterator i = parents.iterator(); i.hasNext();) {
Object startParent = i.next();
Set children = (Set) parentToChildMap.get(startParent);
if (children == null) {
children = new HashSet();
parentToChildMap.put(startParent, children);
}
children.add(child);
}
}
/**
* Gets the set of parents that the child is depending on
*
* @param child the dependent component
* @return a collection containing all of the components the child
depends on; will never be null
*
* @jmx:managed-operation
*/
public synchronized Set getParents(ObjectName child) {
Set parents = (Set) childToParentMap.get(child);
if (parents == null) {
return Collections.EMPTY_SET;
}
return parents;
}
/**
* Gets all of the MBeans that have a dependency on the specified
startParent.
*
* @param parent the component the returned childen set depend on
* @return a collection containing all of the components that depend on
the parent; will never be null
*
* @jmx:managed-operation
*/
public synchronized Set getChildren(ObjectName parent) {
Set children = (Set) parentToChildMap.get(parent);
if (children == null) {
return Collections.EMPTY_SET;
}
return children;
}
/**
* Adds a hold on a collection of object name patterns. If the name of a
component matches an object name
* pattern in the collection, the component should not start.
* @param objectName the name of the component placing the holds
* @param holds a collection of object name patterns which should not
start
*
* @jmx:managed-operation
*/
public synchronized void addStartHolds(ObjectName objectName,
java.util.Collection holds) {
Collection currentHolds = (Collection)startHoldsMap.get(objectName);
if(currentHolds == null) {
currentHolds = new LinkedList(holds);
startHoldsMap.put(objectName, currentHolds);
} else {
currentHolds.addAll(holds);
}
}
/**
* Removes a collection of holds.
* @param objectName the object name of the components owning the holds
* @param holds a collection of the holds to remove
*
* @jmx:managed-operation
*/
public synchronized void removeStartHolds(ObjectName objectName,
java.util.Collection holds) {
Collection currentHolds = (Collection)startHoldsMap.get(objectName);
if(currentHolds != null) {
currentHolds.removeAll(holds);
}
}
/**
* Removes all of the holds owned by a component.
* @param objectName the object name of the component that will no longer
have any holds
*
* @jmx:managed-operation
*/
public synchronized void removeAllStartHolds(ObjectName objectName) {
startHoldsMap.remove(objectName);
}
/**
* Gets the object name of the mbean blocking the start specified mbean.
* @param objectName the mbean to check for blockers
* @return the mbean blocking the specified mbean, or null if there are
no blockers
*
* @jmx:managed-operation
*/
public synchronized ObjectName checkBlocker(ObjectName objectName) {
// check if objectName name is on one of the hold lists
for (Iterator iterator = startHoldsMap.keySet().iterator();
iterator.hasNext();) {
ObjectName blocker = (ObjectName) iterator.next();
List holds = (List) startHoldsMap.get(blocker);
for (Iterator holdsIterator = holds.iterator();
holdsIterator.hasNext();) {
ObjectName pattern = (ObjectName) holdsIterator.next();
if(pattern.apply(objectName)) {
return blocker;
}
}
}
return null;
}
public void handleNotification(Notification n, Object handback) {
String type = n.getType();
if (MBeanServerNotification.UNREGISTRATION_NOTIFICATION.equals(type))
{
MBeanServerNotification notification = (MBeanServerNotification)
n;
ObjectName source = notification.getMBeanName();
synchronized(this) {
removeAllDependencies(source);
removeAllStartHolds(source);
}
}
}
}
1.1
incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/gbean/jmx/DependencyServiceMBean.java
Index: DependencyServiceMBean.java
===================================================================
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Geronimo" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Geronimo", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* ====================================================================
*/
package org.apache.geronimo.gbean.jmx;
/**
* JMX MBean interface for [EMAIL PROTECTED]
org.apache.geronimo.gbean.jmx.DependencyService}.
*
* @version $Revision: 1.1 $ $Date: 2004/01/22 20:58:40 $
*/
public interface DependencyServiceMBean
{
/**
* Declares a dependency from a child to a parent.
* @param child the dependent component
* @param parent the component the child is depending on
*/
void addDependency(javax.management.ObjectName
child,javax.management.ObjectName parent) ;
/**
* Removes a dependency from a child to a parent
* @param child the dependnet component
* @param parent the component that the child wil no longer depend on
*/
void removeDependency(javax.management.ObjectName
child,javax.management.ObjectName parent) ;
/**
* Removes all dependencies for a child
* @param child the component that will no longer depend on anything
*/
void removeAllDependencies(javax.management.ObjectName child) ;
/**
* Adds dependencies from the child to every parent in the parents set
* @param child the dependent component
* @param parents the set of components the child is depending on
*/
void addDependencies(javax.management.ObjectName child,java.util.Set
parents) ;
/**
* Gets the set of parents that the child is depending on
* @param child the dependent component
* @return a collection containing all of the components the child
depends on; will never be null
*/
java.util.Set getParents(javax.management.ObjectName child) ;
/**
* Gets all of the MBeans that have a dependency on the specified
startParent.
* @param parent the component the returned childen set depend on
* @return a collection containing all of the components that depend on
the parent; will never be null
*/
java.util.Set getChildren(javax.management.ObjectName parent) ;
/**
* Adds a hold on a collection of object name patterns. If the name of a
component matches an object name pattern in the collection, the component
should not start.
* @param objectName the name of the component placing the holds
* @param holds a collection of object name patterns which should not
start
*/
void addStartHolds(javax.management.ObjectName
objectName,java.util.Collection holds) ;
/**
* Removes a collection of holds.
* @param objectName the object name of the components owning the holds
* @param holds a collection of the holds to remove
*/
void removeStartHolds(javax.management.ObjectName
objectName,java.util.Collection holds) ;
/**
* Removes all of the holds owned by a component.
* @param objectName the object name of the component that will no longer
have any holds
*/
void removeAllStartHolds(javax.management.ObjectName objectName) ;
/**
* Gets the object name of the mbean blocking the start specified mbean.
* @param objectName the mbean to check for blockers
* @return the mbean blocking the specified mbean, or null if there are
no blockers
*/
javax.management.ObjectName checkBlocker(javax.management.ObjectName
objectName) ;
}
1.8 +3 -3
incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java
Index: Kernel.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/kernel/src/java/org/apache/geronimo/kernel/Kernel.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- Kernel.java 22 Jan 2004 02:46:27 -0000 1.7
+++ Kernel.java 22 Jan 2004 20:58:40 -0000 1.8
@@ -87,7 +87,7 @@
import org.apache.geronimo.kernel.config.LocalConfigStore;
import org.apache.geronimo.kernel.config.NoSuchConfigException;
import org.apache.geronimo.kernel.jmx.JMXUtil;
-import org.apache.geronimo.kernel.service.DependencyService2;
+import org.apache.geronimo.gbean.jmx.DependencyService;
/**
* The core of a Geronimo instance.
@@ -340,7 +340,7 @@
log.info("Starting boot");
mbServer = MBeanServerFactory.createMBeanServer(domainName);
mbServer.registerMBean(this, KERNEL);
- mbServer.registerMBean(new DependencyService2(), DEPENDENCY_SERVICE);
+ mbServer.registerMBean(new DependencyService(), DEPENDENCY_SERVICE);
if (storeInfo != null) {
storeGBean = new GBeanMBean(storeInfo);
storeGBean.setAttribute("root", configStore);
1.3 +4 -4
incubator-geronimo/modules/kernel/src/test/org/apache/geronimo/kernel/GBeanTest.java
Index: GBeanTest.java
===================================================================
RCS file:
/home/cvs/incubator-geronimo/modules/kernel/src/test/org/apache/geronimo/kernel/GBeanTest.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- GBeanTest.java 22 Jan 2004 18:34:13 -0000 1.2
+++ GBeanTest.java 22 Jan 2004 20:58:40 -0000 1.3
@@ -63,8 +63,8 @@
import junit.framework.TestCase;
/**
- *
- *
+ *
+ *
* @version $Revision$ $Date$
*/
public class GBeanTest extends TestCase {
@@ -85,7 +85,7 @@
kernel.unloadGBean(name);
}
- public void XtestEndpoint() throws Exception {
+ public void testEndpoint() throws Exception {
GBeanMBean gbean1 = new GBeanMBean(MockGBean.getGBeanInfo());
gbean1.setAttribute("MutableInt", new Integer(123));
gbean1.setAttribute("FinalInt", new Integer(123));