What is a service?
On the model that a purchaser is a person (it is too simple but more interesting is - a purchaser isa adult has attribute male|female is a person) we may say that one type of service is defined in terms of another type of service? A single sign-on service isa logon service has attribute single|multiple application isa security service. Then we can work forwards from havng a security service object, find the attribute of logon service is single and deduce this must be a single sign-on service. Probably no great shakes in this example, but imagine the tree and branch situation with security service at the root (level 0) and the next level having several branches. Here we find that (in this example) by inspecting just one property on level 1 we can infer out of all the alternative there could be the next level down at level 2, the correct service object type. This can be more complicated and incoperate different transitive, exclusive and other rules that can be changed declaratively.
So the run time type of single sign on is entwined with the configuration allowing other services to treat it correctly. Any other type would also be treated accordingly.
I would say there is a case for combining AOP and RDF at this point. Above is an example of what might be accomplished in RDF/OWL. But the implementation could be mediated through AOP, here seemingly going in reverse? Now we have the base object and we want to inject it using AOP to define the point cut to the classes involved. On injection the base type becomes the child type. In code we don't worry too much because of the above.
In configuration the objects are produced by what is efectively a lazzy factory, we know they will be produced when we need them.
Am I rambling, saying the obvious or the plain daft. I'm not sure. But i would like to push this to define more interesting service possibilities. Also, in the back of my mind is the idea that there could be yet another level of indirection that would lead to more dynamic object creation, maybe the answer to the problem of dynamic componants in Tapestry etc.
Adam
On 17/05/06, adasal <[EMAIL PROTECTED]> wrote:
Stefan,
I didn't get to this last night, always the problem, not enough time. First off the honest answer is that I don't know.
But here are some ideas.
Henry Storey is thinking about an alternative to EJB3 using RDF - somehoe. I assume this would be to do with the way that EJBs offer persistance services and make business objects available.
In other words he is thinking of rearchitecting the servies offered by EJBs so that it would become natural to look at, say, an object asking is this object a purchaser, if not we at least know it is a person, what else can we do with a person in this context?
But I am interested in the nature of services.
Persistance is just one. Attaching an RDF graph could be another.
Briefly reading the reference to A Practical Guide to Using an Aspect Library, I assume you have implemented something similar in HiveMind such that using the xml version of an AspectJ point cut certain classes can be identified as targets in a more succinct syntax than previously available in HimeMind.
So the first thing is that this in itself makes a difference as it cuts down on verbosity and increases clarity over the use of contribution points and their function.
It also seems that this is a neater path to configuring adaptors, but I am hazzy here.
The next thing would be the nature of contibutions. Is there any value in thinking about a contributed service as itself needing configuration that would depend on the interpretation of an RDF/OWL graph. In other words rules that define run time behaviour would be declared in RDF and be triggered by run time objects configured by HiveMind.
I'm trying to think of an example.
Let's say a person becomes a purchaser when they have something in their shopping cart.
Now we want to aim advertising (links etc to other goods and services we offer) differently to different users.
To the logged in user we offer advertising type A (aTA), to the purchaser we want to experiemnt, offering some aTb while others aTc. We create an advertising service AdvService, to deal with this. But we do a trick. This service reads in a bit of RDF, it is told to do so in HiveMind. The RDF is something we can easily change. It hold a little definition of what distinguishes different types of purchasers. In HiveMind we tell it that in needs to be injected with a person object.
In coding the service we inspect that object for whther it is a purchaser and if it is against the qualities we have defined in RDF that determines whether aTb or aTc.
aTa..c are collections of resources, so what better than to have them be RDF.
Typically they would be assembled from our RDF data store using a querry.
I expect we need another service in HiveMind to handle this! Let's call it RDFDataQuerry.
Since this is needed by AdvService it would alos be injected into it.
In code I guess we would do something like this, for aTb:-
RDFDataQuerry rdfDataQuerry = new RDFDataQuerry(aTb);
setAdvertisingView(rdfDataQuerry);
Anyway, I don't know if I am crazzy or if this would be really cool. I don't know how much this would use either RDF or AOP to best effect, either. But it is the sort of think I have in mind.
This example just cam to me now, but what I am actually interested in are issues of the relationship beteen different display (HTML view) elements in terms of rule like behaviour and validation.
So I would have to substitute a person object with some sort of (yet top be determined) document element, but I think the same things apply. I'm sure this can be pushed further.
Adam
On 16/05/06, adasal <[EMAIL PROTECTED] > wrote:Hi Stefan,
I will try to come back to you this evening (it seems rude to leave things too long).
Best,
AdamOn 16/05/06, Stefan Hübner < [EMAIL PROTECTED]> wrote:Hi Adam,
this is new stuff to me, but interesting. POJO-RDF-mapping makes great
sense. What are your ideas concerning a container like HiveMind in
such scenarios?
Stefan
2006/5/12, adasal < [EMAIL PROTECTED]>:
> Stefan,
> I am starting a new project at work and would be very interested on
> the principal that there is no time like the present.
> I am interested in what is being done, especially by Henry Story (see
> this thread Sommer: Semantic Web (Metadata) Mapper on
> [EMAIL PROTECTED] and his blog
> :- http://blogs.sun.com/roller/page/bblfish#sommer_semantic_object_metadata_mapper
>
> I would like to use HiveMind in this context, too. I expect dynamic
> service creation and binding depending on a semantic graph and would
> like to see where this goes. I would be very interested in your
> examples.
> Adam
>
>
> On 11/05/06, James Carman < [EMAIL PROTECTED] > wrote:
> > I would be very interested.
> >
> > -----Original Message-----
> > From: Stefan Hübner [mailto: [EMAIL PROTECTED] ]
> > Sent: Wednesday, May 10, 2006 6:42 PM
> > To: [email protected]
> > Subject: Re: AspectJ Support in HiveMind...
> >
> > Hi James,
> >
> > 2006/5/10, James Carman <[EMAIL PROTECTED] >:
> > > All,
> > >
> > > I would like to include AspectJ support into HiveMind. Basically, what
> > I'm
> > > looking to do is inject HiveMind-managed resources (services and maybe
> > even
> > > configurations) into singleton AspectJ aspects. I was wondering how you
> > > guys think I should go about it....
> >
> > supporting AspectJ is a promissing path to go! AspectJ5 in conjunction
> > with Java5's annotations feature is very powerfull and combining that
> > with a container opens very nice ways to design software. Just look on
> > Spring2 and their effort incorporating AspectJ support. To me,
> > HiveMind *needs* decent AOP support to remain a container framework of
> > choice for the next couple of years.
> >
> > Howard's thoughts on HiveMind 1.2 and Java5 are going in a direction
> > where direct incorparation of proper AOP features are going to become
> > possible.
> >
> > I made some promissing experiments with AspectJ and HiveMind to inject
> > HiveMind services into aspects. And further to use aspects to inject
> > HiveMind resources into normal POJOs where creation and configuration
> > via HiveMind is not possible - think about servlets and such. All of
> > that using AspectJ's great load time weaving feature. Are you
> > interested in those examples?
> >
> > > ... Here's my idea. Create a configuration
> > > point to let folks contribute to:
> > >
> > > <contribution configuration-id="aspectj.aspects">
> > > <aspect class="the aspect class is here">
> > > <!-- BuilderFactory-like stuff here -->
> > > </aspect>
> > > </contribution>
> > >
> > > Then, have an eager loaded service with an init method actually perform
> > the
> > > injection(s). What do you guys think?
> >
> > What I don't get is the example you gave, James. You'd like to
> > instantiate aspects and provide them via contribution - but for what?
> > how would you going to use those aspects then?
> >
> >
> > If you're going to look deeper into AspectJ support, that would be a
> > pleasing direction for HiveMind to evolve. It would be my pleasure to
> > provide some help to get it going.
> >
> >
> > Stefan Hübner
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
>
