case 1:-
<VCompletedBooleanIfInList
ognlPathValidate="ognlPath.toCondition.toCheck1.ifPreCon1.aValue"
ognlPathCondition="ognlPath.toPreCondition.toCheck1"
errorMessage="${uniqueMessageID1}"
enumType="@[EMAIL PROTECTED]"/>
<VCompletedDoubleIfBoolean
ognlPathValidate="ognlPath.toCondition.toCheck2.ifPreCon2.aValue"
ognlPathCondition="ognlPath.toPreCondition.toCheck2"
errorMessage="${uniqueMessageID2}"/>
but note we are reussing VCompletedDoubleIfBoolean defined in the schema like this:-
<element name="VCompletedDateIfBoolean"> If ognlPathCondition is true,
ognlpathValidate must not be null. Otherwise, there is no validation on
ognlpathValidate.
<attribute name="ognlPathValidate" required="true"> An ErroredDate.
</attribute>
<attribute name="ognlPathCondition" required="true"> An ErroredBoolean.
</attribute>
<attribute name="errorMessage" required="true"/>
<conversion
class="com.pathto.baseclass.usedin.validation.VCompletedDateIfBoolean"/>
</element>
which retrieve the object we are interested in from the object tree, and retrieves the values we need.
This entails necessary repetition in hivemodule. The issue would be whether each case defined in hivemodule is really a seperate case.
It does become tedious, and perhaps confussing, to have a large hivemodule, where many contributions are only subtly different.
Case 2:-
Where a postcode lookup method in our Tapestry application interfaces to a third party service we have found that some inputs cause the service to hang (and, what is worse, would provoke the user to multiple submits).
This is overcome (in part) by wrappling the calls in a timed window that snaps shut before lengthy searches are made.
Hivemodule is useful here in setting global timeout properties, although they shouldn't have to be changed since I have made a series of emperical tests to determine a minimum window.
This seems to me to be a simple "controller".
<!-- Threaded service to timeout when large searches are made with incomplete data. model="threaded" -->
<service-point id="IPostcodeSearchTO"
interface="com.pathTo.search.service.wrapper.api.IPostcodeTO">
<invoke-factory model="threaded">
<construct class="com.pathTo.search.service.wrapper.PostcodeSearchTOImpl">
<set property="globalTimeout" value="4"/>
</construct>
</invoke-factory>
</service-point>
with impl:-
public class PostcodeSearchTOImpl implements IPostcodeTO {
..............
}
and interface :-
public interface IPostcodeTO {
public int getIPostcodeSearchTO();
public void setIPostcodeSearchTO(int globalTimeout);
public boolean isTimedOut();
}
In *any* class I may write:-
public abstract IPostcodeTO getIPostcodeTO();
.............
//in this case the calling client method is in our impl of Tapestry
public void updateAddressResults(IRequestCycle cycle) {
................
//the value set in hivemodule
IPostcodeTO globalTimeout = getIPostcodeTO();
//the value used in this instance can be reset, because it is a time derived from the system in milliseconds, I start it now
globalTimeout.setIPostcodeSearchTO(globalTimeout.getIPostcodeSearchTO());
make calls to object(s).method(s) that use the properties set
......................
}
}
The service client is in any class, as usual with private class instance of the interface type.
I think that covers what you are refering to?
Adam
On 10/5/05, Andrei Chiritescu <[EMAIL PROTECTED]> wrote:
> Contoller will be IController and ControllerImpl. Device will
> implement IController. All that is configured in HiveModule is the
> service defining Controller, it's methods and instantiated values will
> be available to Device. Is this what you mean?
Not quite. Let me try to explain my situation better.
I have a module like :
/<module id="app" version="1.0.0" package="app">
<service-point id="Controller" interface="app.Controller">
<invoke-factory model="singleton">
<construct class="app.Controller"/>
</invoke-factory>
<interceptor service-id="hivemind.LoggingInterceptor"/>
</service-point>
</module>/
and the Controller.class:
/package app;
class Controller
{
/* implementaion is not important */
}
and I also have a Device class:
//package app;
class //Device /
/ {
private Controller controller;
public void setController( Controller controller )
{
this.controller = controller;
}
}
/
Now , what I would like is to get a Device instance that will have the
controller injected into it. This without having to add a
/<service-point/> /for the Device into the xml descriptor module.
So, something like this should work(or anything similar) :
Registry registry = ....
Device device = (Device) registry.getService( /Device/.class );
Basically I would like that for any given class to get its managed
instance (like the Device class in the example) without needing the
<service-point> declared.
Thanks,
Andrei Chiritescu
adasal wrote:
> Contoller will be IController and ControllerImpl. Device will
> implement IController. All that is configured in HiveModule is the
> service defining Controller, it's methods and instantiated values will
> be available to Device. Is this what you mean?
> Or you can get an instance of the service :-
> Contoller registry.getService("app.IController",
> ControllerImpl..class)
> or do something like this:-
>
> public class XXXEngine extends BaseEngine {
> ....................
> protected Object createGlobal(RequestContext context) {
> HttpServletRequest request = context.getRequest();
>
> return HiveMindFilter.getRegistry(request);
> }
> used like e.g. this:-
>
> protected void cleanupAfterRequest(IRequestCycle cycle) {
> super.cleanupAfterRequest(cycle);
>
> Registry registry = (Registry) getGlobal();
> //which allows:-
> ISessionManager sessionManager = (ISessionManager)
> registry.getService(ISessionManager.class);
>
> .........
> What is being controlled here is access to a single session object,
> but your problems may be similar.
> Tapestry-3.0.3 hivemind-1.0.0
> Adam
>
> On 10/5/05, *Andrei Chiritescu* <[EMAIL PROTECTED]
> <mailto: [EMAIL PROTECTED]>> wrote:
>
> Do you know whether hivemind contains a method to get an instance
> from a
> specific class (given the classname), which then does all the
> autowiring? I would just like to get a class instance based on
> classname, so that an entry in hivemodule is not necessary.
>
> I there a method to get an instance of a specific class (given the
> fully
> qualified classname) that is managed by Hivemind(has the services
> injected) without having to add an entry in the hivemodule
> descriptor?
> Basically what I have is a "Controller" service (declared in the xml
> module) and a lot of Device classes which require the Controller.
> What I
> want is to get a instance of Device class that has the Controller
> class
> wired (injected by hivemind) without adding the Device service in the
> xml descriptor.
>
> Is this possible?
>
> Regards,
> Andrei Chiritescu
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail:
> [EMAIL PROTECTED]
> <mailto: [EMAIL PROTECTED]>
> For additional commands, e-mail:
> [EMAIL PROTECTED]
> <mailto: [EMAIL PROTECTED]>
>
>
