Using JSAGA within an equinox application¶
Equinox is the OSGi implementation used by the eclipse platform. This page explain how to address the problems of integrating JSAGA into an eclipse applications.
httpg:// URLs¶
httpg:// URLs are not supported by default by the URL implementation of the JDK. So, a problem arise when one tries to use the srm adaptator of JSAGA. To solve this :
- Create a bundle with an activator depending on the jsaga bundle and org.eclipse.osgi
Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: org.simexplorer.jsaga Bundle-SymbolicName: org.simexplorer.jsaga Bundle-Version: 1.0.0 Bundle-Activator: org.simexplorer.jsaga.internal.Activator Bundle-ActivationPolicy: lazy Bundle-RequiredExecutionEnvironment: JavaSE-1.6 Import-Package: org.osgi.framework;version="1.3.0" Require-Bundle: fr.in2p3.jsaga;bundle-version="1.0.0", org.eclipse.osgi;bundle-version="3.4.2", Export-Package: org.simexplorer.jsaga
- Implement the following class in you bundle
import java.io.IOException; class HttpgURLStreamHandlerService extends AbstractURLStreamHandlerService { @Override public URLConnection openConnection( final URL url ) throws IOException { return new GSIHttpURLConnection( url ); } }
- Register the handler during bundle the activation process
@SuppressWarnings("unchecked") private void initializeURLProtocol( final BundleContext context ) { String protocol = "httpg"; Hashtable properties = new Hashtable(); properties.put( URLConstants.URL_HANDLER_PROTOCOL, new String[]{protocol}); context.registerService( URLStreamHandlerService.class.getName(), new HttpgURLStreamHandlerService(), properties ); }
- You'll need furthermore to specify the following properties
System.setProperty("jsaga.universe.create.if.missing", "true"); System.setProperty("saga.factory", "fr.in2p3.jsaga.impl.SagaFactoryImpl");