Module einbinden

Nachfolgend ein einfaches Beispiel, wie Enterprise Apps transparent in bestehende Anwendungen eingebunden werden können – um diese z.B. zu erweitern oder sukzessive über Client Server Grenzen hinweg zu modularisieren (siehe auch Service Broker einbinden und Installation).

Die Anwendung instantiiert hierzu einfach einen ServiceHandler über die isa.CoreBootstrap Klasse und kann über dieses Objekt dann mit Standard Java Mitteln auf lokale oder remote Module und Services zugreifen – das ist alles.

Das Projekt als Zip Datei zum Download (Eclipse Kepler) von GitHub.
Eine bestehende Anwendung

package com.example;

//just two imports
//from one library isa.CoreBoostrap.jar
import isa.Bootstrap;
import isa.ServiceHandler;

/**
 * your application class
 * the world's smallest and simplest modular client server application
 * - NO special project
 * - NO special packaging
 * - NO deployment
 * - NO runtime
 * - NO special programming
 *
 * get a service - call it - that's it
 */
public class ThirdPartyApplication {

	//the isa service handler
	protected ServiceHandler handler = null;
	//your module services
	protected TestModuleIFace localService = null;
	protected TestServiceIFace remoteService = null;

	public ThirdPartyApplication() {
	}

	/**
	* Three steps to become modular and service oriented
	* 1. have your own application
	*/
	public static void main(String[] args) {
		ThirdPartyApplication lApl = new ThirdPartyApplication();

		try{
			lApl.go();
		}catch(Exception e){
			e.printStackTrace();
		}
	}

	/**
	*/
	protected void go() throws Exception{
		Object lRet = null;

		//2. get a service handler from isa.Bootstrap
		handler = Bootstrap.getInstance("").getServiceHandler();

		//3. get a service from a module and call it
		localService = (TestModuleIFace)handler.getService(
			"com.example.ThirdPartyTestModule[version=1.0.0]",
			TestModuleIFace.class);
		lRet = localService.sayHello("World");
		System.out.println("Local Service Call returned: "+lRet);

		//just one more step
		//and this is a complete client-server application
		handler.connect("user", "password",
			"http://integrating-architecture.de", "8080",
			"isa.esb.ServiceBrokerWebConnector[version=1.0.*]");

		//get a remote service from a module and call it
		remoteService = (TestServiceIFace)handler.getService(
			"isa.TestService[version=1.0.0.DEV-SNAPSHOT]",
			TestServiceIFace.class);
		lRet = remoteService.run("HELLO WORLD");
		System.out.println("Remote Service Call returned: "+lRet);
	}

	/**
	* the interface definitions
	*/
	/**
	* complex business module interface
	*/
	protected interface TestModuleIFace{
		public String sayHello(String pName);
	}

	/**
	* complex remote business module interface
	*/
	protected interface TestServiceIFace{
		public Object run(Object pIn);
	}
}

Hinweise:

  • die Signaturen der Service Interfaces können natürlich beliebig sein und auch beliebige Datentypen verwenden. Die hier verwendeten sind nur Demo Beispiele.
  • eine strengere Modularität würde darüber hinaus keine eigenen Interfaces verwenden sondern solche, die von den Modulen selbst definiert und zur Verfügung gestellt werden
  • technisch gibt es keinen Unterschied zwischen lokalen und serverbasierten, remoten Modulen. Findet der Handler kein lokales Modul und ist er mit einem Server verbunden dann leitet er die Anfrage automatisch an diesen weiter. (ThirdPartyTestModule könnte unverändert auch auf dem Server liegen)
  • welche Techniken und/oder Protokolle (z.B. EJB) das Connector Modul unterstützt hängt allein von diesem selbst ab und hat nichts mit den fachlichen Modulen bzw. den Services zu tun.

Die TestModul Klasse

package com.example;

public class ThirdPartyTestModule {

	public ThirdPartyTestModule() {
	}

	/**
	 */
	public String sayHello(String pName){
		return "Hello "+pName;
	}

}

Das Projekt und die Module

ThirdPartyApplicationDemoJavaProject

Hinweise

  • das Verzeichnis “plugins” ist das Standardverzeichnis für ISA Module, der Ort (Repository) wo dieses Verzeichnis liegt kann jedoch frei gewählt werden
  • die Module isa.CoreBootstrap und isa.Core (zusammen ca. 200 KB) sind obligatorisch, sie bilden das Modulsystem wobei lediglich das Bootstrap Modul im Application ClassPath liegen muss
  • alle weiteren Module sind optional und können nach Bedarf frei gewählt werden