You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hivemind.apache.org by hl...@apache.org on 2004/07/17 23:32:16 UTC
cvs commit: jakarta-hivemind/framework/src/test/hivemind/test/config ObjectTranslator.xml
hlship 2004/07/17 14:32:16
Modified: framework/src/documentation/content/xdocs/hivemind
ObjectProviders.xml BuilderFactory.xml
framework/src/descriptor/META-INF hivemodule.sdl
. status.xml
framework/src/java/org/apache/hivemind/service/impl
ServiceMessages.java ServiceStrings.properties
Added: framework/src/test/org/apache/hivemind/service/impl
TestObjectProviders.java TestObjectTranslator.java
framework/src/java/org/apache/hivemind/service/impl
ServicePropertyObjectProvider.java
framework/src/test/hivemind/test/config ObjectTranslator.xml
Removed: framework/src/test/org/apache/hivemind/services/impl
TestObjectTranslator.java TestObjectProviders.java
Log:
Add service-property object provider.
Revision Changes Path
1.2 +20 -0 jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ObjectProviders.xml
Index: ObjectProviders.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/ObjectProviders.xml,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ObjectProviders.xml 16 Jul 2004 23:15:39 -0000 1.1
+++ ObjectProviders.xml 17 Jul 2004 21:32:16 -0000 1.2
@@ -44,6 +44,7 @@
<tr>
<th>Prefix</th>
<th>Descripton</th>
+ <th>Example</th>
</tr>
<tr>
@@ -55,20 +56,39 @@
Provided by the HiveMind library.
</note>
</td>
+
+ <td>
+ bean:ValidatorFactory:string,required
+ </td>
</tr>
<tr>
<td>configuration</td>
<td>The locator is the id of a configuration.</td>
+ <td>
+ configuration:MyConfiguration
+ </td>
</tr>
<tr>
<td>instance</td>
<td>The locator is a fully qualified class name, which must have a public no arguments contructor.</td>
+ <td>
+ instance:com.example.MyObject
+ </td>
</tr>
<tr>
<td>service</td>
<td>The locator is the id of a service.</td>
+ <td>service:MyService</td>
+ </tr>
+
+ <tr>
+ <td>service-property</td>
+ <td>The locator provides a service id and a property name (provided by that service), seperated with a colon.</td>
+ <td>
+ service-property:MyService:activeRequest
+ </td>
</tr>
1.5 +9 -0 jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/BuilderFactory.xml
Index: BuilderFactory.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/documentation/content/xdocs/hivemind/BuilderFactory.xml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- BuilderFactory.xml 16 Jul 2004 23:15:39 -0000 1.4
+++ BuilderFactory.xml 17 Jul 2004 21:32:16 -0000 1.5
@@ -62,6 +62,15 @@
the implementation class and set common service properties. Nested
elements supply the constructor parameters and configure other specific
properties of the implementation (the <code>set-...</code> elements).</p>
+
+ <note>
+ BuilderFactory is a complex tool, with support for both constructor dependency injection and
+ property dependency injection. Many of the options are rarely used; the most general purpose
+ and most frequently used are <link href="#set">set</link>, <link href="#set-object">set-object</link>
+ and <link href="#event-listener">event-listener</link> (along with
+ <link href="#Autowiring">autowiring of certain properties</link>).
+ </note>
+
<section>
<title>construct</title>
<table>
1.1 jakarta-hivemind/framework/src/test/org/apache/hivemind/service/impl/TestObjectProviders.java
Index: TestObjectProviders.java
===================================================================
// Copyright 2004 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.hivemind.service.impl;
import hivemind.test.services.StringHolder;
import hivemind.test.services.impl.StringHolderImpl;
import java.util.ArrayList;
import java.util.List;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.Location;
import org.apache.hivemind.impl.DefaultClassResolver;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.service.impl.ConfigurationObjectProvider;
import org.apache.hivemind.service.impl.ObjectInstanceObjectProvider;
import org.apache.hivemind.service.impl.ServiceObjectProvider;
import org.apache.hivemind.service.impl.ServicePropertyObjectProvider;
import org.apache.hivemind.test.HiveMindTestCase;
import org.easymock.MockControl;
/**
* Tests for several implementations of {@link org.apache.hivemind.service.ObjectProvider}.
*
* @author Howard Lewis Ship
*/
public class TestObjectProviders extends HiveMindTestCase
{
public void testServiceObjectProvider()
{
ServiceObjectProvider p = new ServiceObjectProvider();
String expected = "EXPECTED RESULT";
MockControl mc = newControl(Module.class);
Module m = (Module) mc.getMock();
m.getService("fred", Location.class);
mc.setReturnValue(expected);
replayControls();
Object actual = p.provideObject(m, Location.class, "fred");
assertSame(expected, actual);
verifyControls();
}
public void testConfigurationObjectProvider()
{
ConfigurationObjectProvider p = new ConfigurationObjectProvider();
List expected = new ArrayList();
MockControl mc = newControl(Module.class);
Module m = (Module) mc.getMock();
m.getConfiguration("barney");
mc.setReturnValue(expected);
replayControls();
Object actual = p.provideObject(m, List.class, "barney");
assertSame(expected, actual);
verifyControls();
}
public void testInstanceProvider()
{
ObjectInstanceObjectProvider p = new ObjectInstanceObjectProvider();
MockControl mc = newControl(Module.class);
Module m = (Module) mc.getMock();
m.getClassResolver();
mc.setReturnValue(new DefaultClassResolver());
replayControls();
Object actual = p.provideObject(m, List.class, "java.util.ArrayList");
assertTrue(actual.getClass().equals(ArrayList.class));
verifyControls();
}
public void testInstanceProviderFailure()
{
ObjectInstanceObjectProvider p = new ObjectInstanceObjectProvider();
MockControl mc = newControl(Module.class);
Module m = (Module) mc.getMock();
m.getClassResolver();
mc.setReturnValue(new DefaultClassResolver());
replayControls();
try
{
p.provideObject(m, List.class, "java.util.List");
unreachable();
}
catch (ApplicationRuntimeException ex)
{
assertExceptionSubstring(ex, "Error instantiating instance of class java.util.List");
}
verifyControls();
}
public void testServicePropertyObjectProvider()
{
MockControl mc = newControl(Module.class);
Module m = (Module) mc.getMock();
StringHolder h = new StringHolderImpl();
h.setValue("abracadabra");
m.getService("MyService", Object.class);
mc.setReturnValue(h);
replayControls();
ServicePropertyObjectProvider p = new ServicePropertyObjectProvider();
Object result = p.provideObject(m, String.class, "MyService:value");
assertEquals(h.getValue(), result);
verifyControls();
}
public void testServicePropertyObjectProviderWithInvalidLocator()
{
ServicePropertyObjectProvider p = new ServicePropertyObjectProvider();
try
{
p.provideObject(null, null, "MyService");
unreachable();
}
catch (ApplicationRuntimeException ex)
{
assertExceptionSubstring(
ex,
ServiceMessages.invalidServicePropertyLocator("MyService"));
}
}
// TODO: Integration test that proves the SDL is valid.
}
1.1 jakarta-hivemind/framework/src/test/org/apache/hivemind/service/impl/TestObjectTranslator.java
Index: TestObjectTranslator.java
===================================================================
// Copyright 2004 The Apache Software Foundation
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package org.apache.hivemind.service.impl;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.hivemind.ErrorHandler;
import org.apache.hivemind.Location;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.service.ObjectProvider;
import org.apache.hivemind.test.HiveMindTestCase;
import org.easymock.MockControl;
/**
* Tests for {@link org.apache.hivemind.service.impl.ObjectTranslator}.
*
* @author Howard Lewis Ship
*/
public class TestObjectTranslator extends HiveMindTestCase
{
public void testDupePrefix()
{
Location l1 = fabricateLocation(13);
Location l2 = fabricateLocation(97);
List l = new ArrayList();
ObjectProviderContribution c1 = new ObjectProviderContribution();
c1.setPrefix("dupe");
c1.setLocation(l1);
l.add(c1);
ObjectProviderContribution c2 = new ObjectProviderContribution();
c2.setPrefix("dupe");
c2.setLocation(l2);
l.add(c2);
ObjectTranslator ot = new ObjectTranslator();
Log log = (Log) newMock(Log.class);
ErrorHandler eh = (ErrorHandler) newMock(ErrorHandler.class);
ot.setLog(log);
ot.setErrorHandler(eh);
ot.setContributions(l);
eh.error(
log,
"Object provider prefix 'dupe' duplicates a previous prefix at " + l1 + ".",
l2,
null);
replayControls();
ot.initializeService();
verifyControls();
}
public void testBadLocator()
{
ObjectTranslator ot = new ObjectTranslator();
Module module = (Module) newMock(Module.class);
Log log = (Log) newMock(Log.class);
ErrorHandler eh = (ErrorHandler) newMock(ErrorHandler.class);
ot.setLog(log);
ot.setErrorHandler(eh);
ot.setContributions(Collections.EMPTY_LIST);
ot.initializeService();
eh.error(
log,
"Object provider selector 'badprefix' is not properly formatted.",
null,
null);
replayControls();
Object result = ot.translate(module, Object.class, "badprefix");
assertNull(result);
verifyControls();
}
public void testUnknownPrefix()
{
ObjectTranslator ot = new ObjectTranslator();
Module module = (Module) newMock(Module.class);
Log log = (Log) newMock(Log.class);
ErrorHandler eh = (ErrorHandler) newMock(ErrorHandler.class);
ot.setLog(log);
ot.setErrorHandler(eh);
ot.setContributions(Collections.EMPTY_LIST);
ot.initializeService();
eh.error(log, "No object provider exists for prefix 'zap'.", null, null);
replayControls();
Object result = ot.translate(module, Object.class, "zap:foo");
assertNull(result);
verifyControls();
}
public void testSuccess()
{
MockControl c = newControl(ObjectProvider.class);
ObjectProvider p = (ObjectProvider) c.getMock();
ObjectProviderContribution opc = new ObjectProviderContribution();
opc.setPrefix("fetch");
opc.setProvider(p);
ObjectTranslator ot = new ObjectTranslator();
ot.setContributions(Collections.singletonList(opc));
ot.initializeService();
Module module = (Module) newMock(Module.class);
p.provideObject(module, Integer.class, "zap");
Object value = new Integer(13);
c.setReturnValue(value);
replayControls();
Object result = ot.translate(module, Integer.class, "fetch:zap");
assertSame(value, result);
verifyControls();
}
public void testNullInput()
{
ObjectTranslator ot = new ObjectTranslator();
assertNull(ot.translate(null, null, null));
}
}
1.15 +8 -0 jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl
Index: hivemodule.sdl
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/descriptor/META-INF/hivemodule.sdl,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- hivemodule.sdl 16 Jul 2004 23:15:40 -0000 1.14
+++ hivemodule.sdl 17 Jul 2004 21:32:16 -0000 1.15
@@ -863,10 +863,18 @@
create-instance (class=org.apache.hivemind.service.impl.ObjectInstanceObjectProvider)
}
+ service-point (id=ServicePropertyObjectProvider interface=org.apache.hivemind.service.ObjectProvider)
+ {
+ "ObjectProvider that will extra a property from a service. Mapped to the service-property: prefix."
+
+ create-instance (class=org.apache.hivemind.service.impl.ServicePropertyObjectProvider)
+ }
+
contribution (configuration-id=ObjectProviders)
{
provider (prefix=service service-id=ServiceObjectProvider)
provider (prefix=configuration service-id=ConfigurationObjectProvider)
provider (prefix=instance service-id=ObjectInstanceObjectProvider)
+ provider (prefix=service-property service-id=ServicePropertyObjectProvider)
}
}
1.25 +3 -0 jakarta-hivemind/status.xml
Index: status.xml
===================================================================
RCS file: /home/cvs/jakarta-hivemind/status.xml,v
retrieving revision 1.24
retrieving revision 1.25
diff -u -r1.24 -r1.25
--- status.xml 16 Jul 2004 23:15:40 -0000 1.24
+++ status.xml 17 Jul 2004 21:32:16 -0000 1.25
@@ -56,6 +56,9 @@
a new 'object' translator with great flexibility. Extend BuilderFactory
to add a set-object element that leverages the object translator.
</action>
+ <action type="update" dev="HLS">
+ Created service-property object translator.
+ </action>
</release>
<release version="1.0-beta-1" date="Jun 26 2004">
1.10 +5 -0 jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ServiceMessages.java
Index: ServiceMessages.java
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ServiceMessages.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ServiceMessages.java 16 Jul 2004 23:15:40 -0000 1.9
+++ ServiceMessages.java 17 Jul 2004 21:32:16 -0000 1.10
@@ -177,4 +177,9 @@
{
return _formatter.format("error-instantiating-instance", clazz.getName(), cause);
}
+
+ public static String invalidServicePropertyLocator(String locator)
+ {
+ return _formatter.format("invalid-service-property-locator", locator);
+ }
}
1.6 +1 -1 jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ServiceStrings.properties
Index: ServiceStrings.properties
===================================================================
RCS file: /home/cvs/jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ServiceStrings.properties,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- ServiceStrings.properties 16 Jul 2004 23:15:40 -0000 1.5
+++ ServiceStrings.properties 17 Jul 2004 21:32:16 -0000 1.6
@@ -34,4 +34,4 @@
unknown-provider-prefix=No object provider exists for prefix ''{0}''.
duplicate-provider-prefix=Object provider prefix ''{0}'' duplicates a previous prefix at {1}.
error-instantiating-instance=Error instantiating instance of class {0}: {1}
-
+invalid-service-property-locator=''{0}'' is not a valid locator for use with the service-property object provider. It should be the id of a service, a comma, and the name of a property provided by that service.
1.1 jakarta-hivemind/framework/src/java/org/apache/hivemind/service/impl/ServicePropertyObjectProvider.java
Index: ServicePropertyObjectProvider.java
===================================================================
package org.apache.hivemind.service.impl;
import org.apache.hivemind.ApplicationRuntimeException;
import org.apache.hivemind.internal.Module;
import org.apache.hivemind.service.ObjectProvider;
import org.apache.hivemind.util.PropertyUtils;
/**
* {@link org.apache.hivemind.service.ObjectProvider} implementation
* that obtains a named property from a service. This provider is
* mapped to the prefix "service-property", the service id is seperated
* from the property name by a colon. Example:
* <code>service-property:MyService:myProperty</code>
*
* @author Howard Lewis Ship
*/
public class ServicePropertyObjectProvider implements ObjectProvider
{
public Object provideObject(Module contributingModule, Class propertyType, String locator)
{
int commax = locator.indexOf(':');
if (commax < 2)
{
throw new ApplicationRuntimeException(
ServiceMessages.invalidServicePropertyLocator(locator));
}
String serviceId = locator.substring(0, commax);
String propertyName = locator.substring(commax + 1);
Object service = contributingModule.getService(serviceId, Object.class);
return PropertyUtils.read(service, propertyName);
}
}
1.6 +1 -1 jakarta-hivemind/framework/src/test/hivemind/test/config/ObjectTranslator.xml
---------------------------------------------------------------------
To unsubscribe, e-mail: hivemind-cvs-unsubscribe@jakarta.apache.org
For additional commands, e-mail: hivemind-cvs-help@jakarta.apache.org