Oracle Coherence is a data grid which means it manages data. It also supports some features of a compute grid by having agents that can be run inside grid to process data. The agents that are executed must be known to the Class loader before it can be invoked. This project is a step towards making the agent execution dynamic. Problem Statement:To allow a facility to dynamically change the implementation of agents that can be downloaded and executed on the data set. Approach: 1. Need to have an infrastructure to facilitate downloading classes. 2. A framework to execute the agent on the partition where the data are. Design Goal:1. Discovery of agent only happens for well defined caches. - If a processor is invoked on a cache starting with "discoverer-" perform the lookup on an external registry.
- If a processor is invoked on a regular cache system should continue to work as standard process.
2. EntryProcessors should continue to behave as usual. It should only run on the partitions that owns the keys. 3. EntryProcessors implementing InvocableMap.EntryProcessor against discoverer cache must behave as usual. Solution:Marry Jini with Oracle Coherence:
Jini provides a framework where Objects can be looked up against a lookup service (Reggie) and be downloaded to a local JVM to execute. Jini requires a HTTP server, a Lookup service and the service provider that registers itself with the lookup service to advertise the service definition. These services can be started (optional) as part of Oracle Coherence services. Use Coherence's InvocableMap framework: Agents must comply with Coherence's EntryProcessor definition that can directly be plugged in. Use a Custom Cache for discoverer caches.Challenges:1. Integrating "Remote-full" Jini with "Remote-less" Coherence. 2. Weigh in lookup vs cache managed agents. 3. Managing additional configuration setup. 4. rmic with interface inheritance. 4. Finding unknowns Status:1. Wrote almost 70% complete source (see attachment). Interested developers can download this jDeveloper 11g project. To run and compile you would need coherence.jar and Jini2_1 package installed. 2. Find time to complete implementations of known components (Important but not urgent). 3. Think to complete the rest. PS: To be able to compile the Discoverer project use AOP to change the signature of InvocableMap.EntryProcessor interface to extend Remote and throw RemoteException. |