Diese Beispiele umfassen unter anderem drei Serviceschnittstellen und deren Implmentierungen, eine Serviceschnittstellen-Factory, ein Clientprogramm zum Testen der Services und eine Datei "plugin.xml" zum Registrieren der Services.
Für die Ausführung auf dem Server müssen Sie sicherstellen, dass die kompilierte Version der Java-Dateien (mit Ausnahme von ExampleClient) und die Datei "plugin.xml" über den Klassenpfad des derzeit aktiven Team-Servlets verfügbar sind. ExampleClient wird als Client ausgeführt.
package com.ibm.team.core.services.examples; /** * Beispiel-RPC-Service, der einfache Integralrechnungen ausführen kann */ public interface IExampleService { public int add(int x, int y); public int sub(int x, int y); public int mul(int x, int y); public int div(int x, int y); }
package com.ibm.team.core.services.examples; /** * Implementierung von IExampleService */ public class ExampleService implements IExampleService { // Methoden auf übliche Weise implementieren public int add(int x, int y) { return x + y; } public int sub(int x, int y) { return x - y; } public int mul(int x, int y) { return x * y; } public int div(int x, int y) { return x / y; } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.ITeamContentService; /** * Beispiel-Content-Service * Normalerweise werden Sie keine Methoden zu dieser Schnittstelle hinzufügen. * Allerdings können Sie hier einige gemeinsam genutzte Konstanten angeben. */ public interface IExampleContentService extends ITeamContentService { }
package com.ibm.team.core.services.examples; import java.io.ByteArrayInputStream; import java.io.IOException; import java.sql.Timestamp; import com.ibm.team.core.services.ITeamServiceContext; import com.ibm.team.core.services.TeamContent; /** * Implementierung von IExampleContentServer */ public class ExampleContentService implements IExampleContentService { // Aufrufe für diesen Service zählen static private int counter = 0; /** * Diese Methode gibt den vom URI angegebenen Inhalt zurück. * Sie wird für die Übertragung der Daten vom Server zum Client verwendet. */ public TeamContent get(String uri) throws IOException { // Instanz von IExampleService anfordern IExampleService exampleService = (IExampleService) ITeamServiceContext.Current.getPeerService(IExampleService.class); // Service für Zähleraktualisierung verwenden counter = exampleService.add(counter, 1); // HTML zum Zurückssenden konstruieren String page = "<p>You requested uri: <code>'" + uri + "'</code>.\n"; page += "<p>You have called this service " + counter + " time" + (counter == 1 ? "" : "s") + ".\n"; byte[] pageBytes = page.getBytes("UTF-8"); // Zurückzugebendes TeamContent-Objekt erstellen TeamContent teamContent = new TeamContent(); teamContent.setContentType("text/html;; charset=utf-8"); teamContent.setLastModified(new Timestamp(System.currentTimeMillis())); teamContent.setInputStream(new ByteArrayInputStream(pageBytes)); teamContent.setSize(pageBytes.length); return teamContent; } /** * Diese Methode speichert den angegebenen Inhalt. * Sie wird für die Übertragung der Daten vom Client zum Server verwendet. */ public void put(TeamContent teamContent) throws IOException { // Keine Aktion, sodass keine Möglichkeit besteht, mit diesem // Interface Daten vom Client zum Server zu senden } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.ITeamRestService; /** * Beispiel-REST-Service * Normalerweise werden Sie keine Methoden zu dieser Schnittstelle hinzufügen. * Allerdings können Sie hier einige gemeinsam genutzte Konstanten angeben. */ public interface IExampleRestService extends ITeamRestService { }
package com.ibm.team.core.services.examples; import java.util.Date; import java.io.IOException; import java.io.Writer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.ibm.team.core.services.ITeamServiceContext; import com.ibm.team.core.services.TeamRestService; /** * Implementierung von IExampleRestService * Diese Klasse erweitert TeamRestService, sodass bestimmte Methoden gehandhabt * werden können, ohne die HTTP-Methode in der Servicemethode zu überprüfen */ public class ExampleRestService extends TeamRestService implements IExampleRestService { // Aufrufe für diesen Service zählen static private int counter = 0; /** * Implementierung der Methode GET */ public void perform_GET(String uri, ITeamServiceContext teamServiceContext) throws IOException { // Instanz von IExampleService anfordern IExampleService exampleService = (IExampleService) teamServiceContext.getPeerService(IExampleService.class); // Service für Zähleraktualisierung verwenden counter = exampleService.add(counter, 1); // HTTP-Anforderung und -Antwort aus dem Kontxt abrufen HttpServletRequest request = teamServiceContext.getHttpServletRequest(); HttpServletResponse response = teamServiceContext.getHttpServletResponse(); // Writer für Ausgabedatenstrom anfordern Writer writer = response.getWriter(); // HTML schreiben response.setContentType("text/html"); writer.write("<p>You requested: '" + uri + "'.\n"); writer.write("<p>The query string was: '" + request.getQueryString() + ".\n"); writer.write("<p>You have called this service " + counter + " time" + (counter == 1 ? "" : "s") + ".\n"); writer.write("<p>The current time is " + new Date() + ".\n"); } }
package com.ibm.team.core.services.examples; import java.io.IOException; import java.io.InputStream; import org.apache.commons.httpclient.HttpMethod; import com.ibm.team.core.services.ITeamRestServiceClient; import com.ibm.team.core.services.RemoteTeamServer; import com.ibm.team.core.services.RemoteTeamServerConfiguration; import com.ibm.team.core.services.TeamContent; /** * Die Hauptmethode dieser Klasse ruft einige Services als Client auf. */ public class ExampleClient { /** * Eingabedatenstrom in System.out kopieren */ static private void copyToSystemOut(InputStream iStream) throws IOException { System.out.println("------------------"); byte[] buffer = new byte[8192]; int read; while ((read=iStream.read(buffer)) > 0) { System.out.write(buffer,0,read); } System.out.println("\n------------------"); } /** * Methode für alle Serviceaufrufe */ static public void main(String[] args) throws IOException { // Neue ferne Konfuguration erstellen und URL setzen RemoteTeamServerConfiguration config = new RemoteTeamServerConfiguration(); config.setURL("http://localhost:9080/jazz"); // Fernen Teamserver erstellen, Services hinzufügen RemoteTeamServer server = RemoteTeamServer.create(config); server.addService(IExampleService.class, null); server.addService(IExampleContentService.class, null); server.addService(IExampleRestService.class, null); // Serviceimplementierungsobjekte abrufen IExampleService rpcService = (IExampleService) server.getServiceImplementation(IExampleService.class); IExampleContentService contentService = (IExampleContentService) server.getServiceImplementation(IExampleContentService.class); // Die Implementierung umfasst in diesem Fall nicht das Interface. // Die REST-Services unterscheiden sich in diesem Punkt. ITeamRestServiceClient restService = (ITeamRestServiceClient) server.getServiceImplementation(IExampleRestService.class); // RPC-Service aufrufen int result = rpcService.add(1, 2); System.out.println("\nTurns out, 1 + 2 = " + result + ", after all."); // Content Service aufrufen TeamContent teamContent = contentService.get("/something"); InputStream iStream = teamContent.getInputStream(); System.out.println("\nContent from content service :: /something:"); try { copyToSystemOut(iStream); } // Sicherstellen, dass der TeamContent-Eingabedatenstrom geschossen ist, // weil sonst das zugrunde liegende Socket nicht geschlossen wird. finally { if (null != iStream) iStream.close(); } // REST-Service aufrufen HttpMethod method = restService.getGetMethod("/something-else"); try { restService.executeMethod(method); System.out.println("\nContent from REST service :: /something-else:"); copyToSystemOut(method.getResponseBodyAsStream()); } // Sicherstellen, dass die Methode releaseConnection() aufruft, // weil sonst das zugrunde liegende Socket nicht geschlossen wird. finally { method.releaseConnection(); } } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.registry.ITeamServiceInterfaceFactory; /** * Eine Factory-Klasse, die bei der Registrierung von Services über die Eclipse-Plug-ins * verwendet wird, um Instanzen Ihrer Serviceklassen zu laden. * Das ist nichts Ausgefallenes. Es muss lediglich eine Instanz einer Klasse mit einem * gegebenen Namen auf einleuchtende Weise geladen werden können. Weitere Ausarbeitungs- * schritte sind nicht erforderlich. Allerdings ist in jeder Ihrer Server-Plug-in-JARs * eine dieser Klassen erforderlich. */ public class TeamServiceInterfaceFactory implements ITeamServiceInterfaceFactory { public Class getServiceInterface(String interfaceClassName) { try { return Class.forName(interfaceClassName); } catch (ClassNotFoundException e) { e.printStackTrace(); } return null; } }
<?xml version="1.0" encoding="utf-8"?> <?eclipse version="3.0"?> <plugin id = "com.ibm.team.core.services.examples" name = "com.ibm.team.core.services.examples" version = "1.0.0" provider-name = "IBM"> <extension point="com.ibm.team.core.services.serviceProvider"> <service id = "com.ibm.team.core.services.examples.IExampleService" interfaceClass = "com.ibm.team.core.services.examples.IExampleService" implementationClass = "com.ibm.team.core.services.examples.ExampleService" interfaceFactoryClass = "com.ibm.team.core.services.examples.TeamServiceInterfaceFactory" name = "Example RPC Service" /> <service id = "com.ibm.team.core.services.examples.IExampleContentService" interfaceClass = "com.ibm.team.core.services.examples.IExampleContentService" implementationClass = "com.ibm.team.core.services.examples.ExampleContentService" interfaceFactoryClass = "com.ibm.team.core.services.examples.TeamServiceInterfaceFactory" name = "Example Content Service" /> <service id = "com.ibm.team.core.services.examples.IExampleRestService" interfaceClass = "com.ibm.team.core.services.examples.IExampleRestService" implementationClass = "com.ibm.team.core.services.examples.ExampleRestService" interfaceFactoryClass = "com.ibm.team.core.services.examples.TeamServiceInterfaceFactory" name = "Example REST Service" /> </extension> </plugin>