Ezek a példák három szolgáltatási felületet tartalmaznak, a megvalósításukat, egy szolgáltatási felület gyárat, egy ügyfélprogramot a szolgáltatások végrehajtásához és egy plugin.xml fájlt, amely regisztrálja a szolgáltatásokat.
Ennek a kiszolgálón való futtatásához szüksége lesz a java fájlok összeállított változatára (kivéve az ExampleClient fájlt) és a jelenleg futó csapat szervlet osztályútvonalában található plugin.xml fájlra. Az ExampleClient ügyfélként fut.
package com.ibm.team.core.services.examples; /** * Minta RPC szolgáltatás, amely egyszerű integrálszámítási matematikai műveleteket hajt végre. */ 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; /** * Az IExampleService megvalósítása. */ public class ExampleService implements IExampleService { // a metódusok megvalósítása a jellemző módon 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; /** * Példa tartalomszolgáltatás. * Vegye figyelembe, hogy általában nem kell metódusokat hozzáadni a felülethez, * de lehet, hogy el kíván majd helyezni néhány megosztott állandót. */ 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; /** * Az IExampleContentServer megvalósítása. */ public class ExampleContentService implements IExampleContentService { // megszámolja a szolgáltatás hívásainak számát. static private int counter = 0; /** * Ez a metódus az uri által meghatározott tartalmat adja vissza. * Ez a kiszolgálóról az ügyfélre való adatátvitelre használható. */ public TeamContent get(String uri) throws IOException { // az IExampleService egy példányának beszerzése IExampleService exampleService = (IExampleService) ITeamServiceContext.Current.getPeerService(IExampleService.class); // ezzel a szolgáltatással frissítse a számlálót counter = exampleService.add(counter, 1); // hozzon létre HTML-t a visszaküldéshez String page = "<p>Kért uri: <code>'" + uri + "'</code>.\n"; page += "<p>A szolgáltatást " + counter + " alkalommal hívta meg" + (számláló == 1 ? "" : "") + ".\n"; byte[] pageBytes = page.getBytes("UTF-8"); // építse össze a visszaadni kívánt TeamContent objektumot 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; } /** * Ez a metódus a megadott tartalmat tárolja. * Ez az ügyfélről a kiszolgálóra való adatátvitelre használható. */ public void put(TeamContent teamContent) throws IOException { // semmit nem csinál, így nem küldhető adat az // ügyfélről a kiszolgálóra ezzel a felülettel } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.ITeamRestService; /** * Példa REST szolgáltatás. * Vegye figyelembe, hogy általában nem kell metódusokat hozzáadni a felülethez, * de lehet, hogy el kíván majd helyezni néhány megosztott állandót. */ 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; /** * Az IExampleRestService megvalósítása. * Megjegyzés: ez az osztály kiterjeszti a TeamRestService szolgáltatást, ami lehetővé teszi * bizonyos metódusok kezelését anélkül, hogy ellenőrizné a HTTP metódust a szolgáltatás metódusban. */ public class ExampleRestService extends TeamRestService implements IExampleRestService { // megszámolja a szolgáltatás hívásainak számát. static private int counter = 0; /** * A GET metódus megvalósítása. */ public void perform_GET(String uri, ITeamServiceContext teamServiceContext) throws IOException { // az IExampleService egy példányának beszerzése IExampleService exampleService = (IExampleService) teamServiceContext.getPeerService(IExampleService.class); // ezzel a szolgáltatással frissítse a számlálót counter = exampleService.add(counter, 1); // a HTTP kérelem és válasz beszerzése a kontextusból HttpServletRequest request = teamServiceContext.getHttpServletRequest(); HttpServletResponse response = teamServiceContext.getHttpServletResponse(); // Író elhelyezése a kimeneti folyamra Writer writer = response.getWriter(); // írjon HTML-kódot response.setContentType("text/html"); writer.write("<p>A következőt kérte: '" + uri + "'.\n"); writer.write("<p>A lekérdezési karakterlánc a következő volt: '" + request.getQueryString() + ".\n"); writer.write("<p>A szolgáltatást " + counter + " alkalommal hívta meg" + (counter == 1 ? "" : "") + ".\n"); writer.write("<p>A jelenlegi idő: " + 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; /** * Ennek az osztálynak a fő metódusa ügyfélprogramként hív egyes szolgáltatásokat. */ public class ExampleClient { /** * Másoljon egy bemeneti folyamot a System.out helyre */ 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------------------"); } /** * Az a metódus, amely minden szolgáltatáshívást elvégez */ static public void main(String[] args) throws IOException { // hozzon létre új távoli konfigurációt, URL cím beállítása RemoteTeamServerConfiguration config = new RemoteTeamServerConfiguration(); config.setURL("http://localhost:9080/jazz"); // hozza létre a távoli csapatkiszolgálót, adjon hozzá szolgáltatásokat RemoteTeamServer server = RemoteTeamServer.create(config); server.addService(IExampleService.class, null); server.addService(IExampleContentService.class, null); server.addService(IExampleRestService.class, null); // szerezze be a szolgáltatás-megvalósítási objektumokat IExampleService rpcService = (IExampleService) server.getServiceImplementation(IExampleService.class); IExampleContentService contentService = (IExampleContentService) server.getServiceImplementation(IExampleContentService.class); // megjegyzés: a megvalósítás ebben az esetben a felületet NEM valósítja meg; // a REST szolgáltatások ebben a tekintetben eltérőek ITeamRestServiceClient restService = (ITeamRestServiceClient) server.getServiceImplementation(IExampleRestService.class); // egy RPC szolgáltatás hívása int result = rpcService.add(1, 2); System.out.println("\nÚgy tűnik, 1 + 2 = " + result + "."); // tartalomszolgáltatás hívása TeamContent teamContent = contentService.get("/something"); InputStream iStream = teamContent.getInputStream(); System.out.println("\nA tartalomszolgáltatás tartalma :: /something:"); try { copyToSystemOut(iStream); } // győződjön meg róla, hogy a TeamContent bemeneti folyam zárva van, vagy az // alapjául szolgáló szoftvercsatorna nem lesz zárva finally { if (null != iStream) iStream.close(); } // egy REST szolgáltatás hívása HttpMethod method = restService.getGetMethod("/something-else"); try { restService.executeMethod(method); System.out.println("\nA REST szolgáltatás tartalma :: /something-else:"); copyToSystemOut(method.getResponseBodyAsStream()); } // győződjön meg róla, hogy a metódus a releaseConnection() szolgáltatást hívja, vagy az // alapjául szolgáló szoftvercsatorna nem lesz zárva finally { method.releaseConnection(); } } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.registry.ITeamServiceInterfaceFactory; /** * Gyári osztály, amelyet a rendszer a szolgáltatások eclipse * beépülő modulokkal való regisztrációja során a szolgáltatásosztályok betöltésére használ. * Semmi különös, csak be kell tudnunk tölteni egy osztálypéldányt * adott névvel, a nyilvánvaló módon. Nem szükséges * semmi bonyolultabbat csinálni, bár szüksége lesz egy ilyenre * minden kiszolgálói beépülő modul jar fájljában. */ 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 = "Példa RPC szolgáltatás" /> <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 = "Példa tartalomszolgáltatás" /> <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 = "Példa REST szolgáltatás" /> </extension> </plugin>