GigaSpaces XAP Connector
From JPPF 3.3 Documentation
|
Main Page > GigaSpaces XAP Connector |
About GigaSPaces and JPPF
GigaSpaces is a full-fledged, non-J2EE application server that can handle, among other features, large distributed datasets. Integrating JPPF within GigaSpaces XAP adds the ability to perform intensive computations on those data, seamlessly and without impacting the performance of the applications running within GigaSpaces. It also provides JPPF applications with capabilities that were so far missing form its desing: clustering, replication, transaction management, data access, etc ...
Installation
Prerequisites
Before installing, please make sure you have the following already installed in your environment:
- Java Runtime Environment (JRE) version 1.5 or later
- Apache Ant version 1.6.2 or later
- GigaSpaces XAP version 6.6 or later
Installing
To install the JPPF / GigaSpaces integration package, perform the following steps:
- download the JPPF-2.x-GigaSpaces-.zip file from the JPPF download page
- Unzip this file in a location of your choice, this will create a new folder named "JPPF-GigaSpaces"
- Edit the file "JPPF-GigaSpaces/build.properties" in a text editor and set the appropriate path for the GigaSpaces XAP install root folder
- you are now ready to use the JPPF / GigaSpaces integration
Deploying the JPPF processing unit
- In the GigaSpaces Management Center, start a Grid Service Manager (GSM):
- Next, start a Grid Service Container (GSC):
- Next we will deploy a JPPF client as a Processing Unit. To start, open the deployment wizard, as in the screenshot below:
- On the next screen, select the Processing Unit jar file to deploy, located at
<JPPF-GigaSpaces>/JPPF-GigaSpaces-ProcessingUnit/pu/JPPF-GigaSpaces-ProcessingUnit.jar:
- After selecting the jar file, click "finish" and wait until the processing unit is deployed:
Deploying the sample web application
We will now deploy a sample web application packaged as a war file
1. First ensure that the JPPF processing unit has been deployed
2. Open the deployment wizard and select the war file to deploy, located at:
<JPPF-GigaSpaces>/JPPF-GigaSpaces-Client/build/jppftest.war
3. After selecting the war file, click "finish" and wait until the web application is deployed, the UI should now show both processing unit and web app deployed under the GSM:
4. The web application is now ready to be used at this URL: http://localhost:8080/jppftest
Considerations for deploying JPPF-enabled applications
Available APIs
The JPPF processing unit publishes all its libraries in its shared-lib folder, which makes the required JPPF APIs available to other applications deployed within GigaSpaces:
- the job and tasks APIs: JPPFTask, JPPFJob, DataProvider, ExecutionPolicy
- the service API used to submit jobs to the JPPF service: JPPFService
Spring descriptor
Access to the JPPF service is realized by declaring it as a remoted Spring bean in your application. This is done as follows:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:os-core="http://www.openspaces.org/schema/core"
xmlns:os-events="http://www.openspaces.org/schema/events"
xmlns:os-remoting="http://www.openspaces.org/schema/remoting"
xmlns:os-sla="http://www.openspaces.org/schema/sla"
xmlns:os-jms="http://www.openspaces.org/schema/jms"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.openspaces.org/schema/core
http://www.openspaces.org/schema/core/openspaces-core.xsd
http://www.openspaces.org/schema/events
http://www.openspaces.org/schema/events/openspaces-events.xsd
http://www.openspaces.org/schema/remoting
http://www.openspaces.org/schema/remoting/openspaces-remoting.xsd
http://www.openspaces.org/schema/jms
http://www.openspaces.org/schema/jms/openspaces-jms.xsd
http://www.openspaces.org/schema/sla
http://www.openspaces.org/schema/sla/openspaces-sla.xsd">
<!-- Declaration of the JPPF space. -->
<os-core:space id="space" url="jini://*/*/JPPFSpace" />
<os-core:giga-space id="gigaSpace" space="space"/>
<!-- The JPPF service proxy. -->
<os-remoting:sync-proxy
id="jppfService" giga-space="gigaSpace"
interface="org.jppf.gigaspaces.JPPFService"/>
<!--
The GSClient bean, uses the proxied service
without any knowledge of the remoting invocation.
-->
<bean id="gsclient" class="org.jppf.gigaspaces.test.GSClient">
<property name="jppfService" ref="jppfService"/>
</bean>
</beans>
This descriptor can be found in the distribution as:
<JPPF-GigaSpaces>/JPPF-GigaSpaces-Client/src/client.xml
Usage in application code
Obtaining a reference to the JPPF service is done via the Spring application context:
// Parse the application context and instantiate the bean
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath:client.xml");
context.start();
// Get a reference to the created bean
GSClient gsc = (GSClient) context.getBean("gsclient");
The call to context.start() causes the Sprint bean's afterPropertiesSet() method to be invoked:
/**
* Called after the Spring bean init and submits a JPPF job to the JPPF space.
* @throws Exception if any error occurs.
* @see org.springframework.beans.factory.InitializingBean#afterPropertiesSet()
*/
public void afterPropertiesSet() throws Exception {
// Create a new job and add a task
JPPFJob newJob = new JPPFJob();
newJob.addTask(new HelloTask());
// invoke the JPPF service proxy to submit the job
this.job = jppfService.submitJob(newJob);
}
Putting it all together, here is the code used in our sample web application:
package org.jppf.gigaspaces.test;
import org.jppf.client.JPPFJob;
import org.jppf.gigaspaces.*;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Client class used to invoke a JPPF job submission service
* deployed as a processing unit.
*/
public class GSClient implements InitializingBean {
private JPPFService jppfService = null;
private JPPFJob job = null;
// Entry point for execution of this client as a standalone application.
public static void main(String[] args) {
execute();
}
/**
* Initialize the Spring context, invoke the appropriate bean method,
* and store the results of the JPPF execution.
* @return the results as a <code>JPPFJob</code> instance.
*/
public static JPPFJob execute() {
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("classpath:client.xml");
context.start();
GSClient gsc = (GSClient) context.getBean("gsclient");
return gsc.getJob();
}
// Called after the Spring bean init and submits a JPPF job to the JPPF space.
public void afterPropertiesSet() throws Exception {
JPPFJob newJob = new JPPFJob();
newJob.addTask(new HelloTask());
this.job = jppfService.submitJob(newJob);
}
// Get a proxy to the service deployed in a GS space.
public JPPFService getJppfService() {
return jppfService;
}
// Set a proxy to the service deployed in a GS space.
public void setJppfService(JPPFService service) {
this.jppfService = service;
}
// Get the resulting JPPF job instance.
public JPPFJob getJob() {
return job;
}
}
| Main Page > GigaSpaces XAP Connector |


