What kind of object to store changing values?
Todd Wright
twright at bbn.com
Wed Sep 12 11:17:12 EDT 2007
Guillaume Liegard wrote:
> Hello,
>
> I am making a tool to monitor process activities of a host. So I want to
> publish a representation of each process on the blackboard and update
> them on a regular basis.
>
> My problem is to choose the best kind of objet to represent each process
> on the blackboard.
>
> 1. Can I use assets as they don't seem to be modifiable and I don't want
> to create new objects everytime (garbage collector)?
The PropertyGroups attached to an asset are modifiable; you don't have to
create a new object every time you modify an asset.
Assets are likely more complicated than what you require.
>
> 2. What exactly are Change Reports? Can I use them in this case?
When a plugin calls "publishChange", it can optionally specify a set of
ChangeReports to note what has changed (e.g. "changed field X"). Other plugins
will see these ChangeReports in their subscription change lists. These
ChangeReports are transient -- they are discarded once all plugin subscriptions
have been notified. For details, see Cougaar Developers' Guide section 3.2.4.4.
You can't use ChangeReports by themselves to implement your blackboard objects.
However, you might want to use ChangeReports with your blackboard objects to
indicate what has changed, assuming that a subscriber plugin is interested in
these details. You can use ChangeReports with any type of blackboard object.
>
> I have seen the method blackboard.publishChange(Object, Collection); but
> I don't know how to get back the change reports (when other plugins have
> suscribed to this object).
Use "subscription.getChangeReports(Object)", e.g.:
for (Object o : sub.getChangedCollection()) {
Set s = sub.getChangeReports(o);
...
}
>
> 3. Are FrameSets a good way to deal with simple problems like that?
> Following a previous mail, I had a look at FrameSets. The mechanism
> seems very complex for such a simple problem.
FrameSets are intended for this type of "system" data representation. However,
I agree that they are difficult to use. We need a simple FrameSet tutorial.
For your simple example, you don't need to use FrameSets. It might be nice
someday.
>
> 4. Aren't POJOs a good solution for this simple problem?
Yes.
Make sure that the "equals" and "hashCode" methods are correctly defined and
not based on modifiable fields. The Java default Object-based "equals" and
"hashCode" methods are fine.
Or, consider implementing UniqueObject by subclassing:
http://cougaar.org/cgi-bin/viewcvs.cgi/core/src/org/cougaar/core/util/UniqueObjectBase.java?rev=1.2&cvsroot=core&content-type=text/vnd.viewcvs-markup
Get the UID from the UIDService "nextUID()" method. The benefit of
implementing UniqueObject is that this will make your objects visible in the
"/tasks" servlet.
> What are the
> drawbacks?
You'll miss out on some of the more complex features supported by Assets and
FrameSets.
Todd
>
> Thanks you very much for your advises.
>
> Best regards.
>
> --
> Guillaume Liégard
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Cougaar-developers mailing list
> Cougaar-developers at cougaar.org
> http://cougaar.org/mailman/listinfo/cougaar-developers
More information about the Cougaar-developers
mailing list