Tyto příklady obsahují tři rozhraní služby, jejich implementace, továrnu rozhraní služby, klientský program pro provádění služeb a plugin.xml, který může služby registrovat.
Chcete-li je spustit na serveru, budete muset zajistit, abyste měli kompilovanou verzi souborů java (kromě ExampleClient) a plugin.xml dostupný z cesty ke třídě aktuálně spuštěného týmového servletu. ExampleClient se spouští jako klient.
package com.ibm.team.core.services.examples; /** * Příklad služby RPC, který může provádět jednoduché celočíselné matematické operace. */ veřejné rozhraní 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; /** * Implementace služby IExampleService. */ veřejná třída ExampleService implementuje IExampleService { // implementuje metodu typickým způsobem 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říklad služby obsahu. * Pamatujte, že obvykle nebudete přidávat k tomuto rozhraní žádné metody, * ačkoli možná sem budete chtít umístit některé sdílené konstanty. */ veřejné rozhraní IExampleContentService rozšiřuje 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; /** * Implementace IExampleContentServer. */ veřejná třída ExampleContentService implementuje IExampleContentService { // spočítejte počet vyvolání této služby. static private int counter = 0; /** * Tato metoda vrací obsah specifikovaný pomocí identifikátoru URI. * Používá se k přenosu dat ze serveru klientovi. */ veřejný TeamContent get(String uri) vyvolá IOException { // získejte instanci služby IExampleService IExampleService exampleService = (IExampleService) ITeamServiceContext.Current.getPeerService(IExampleService.class); // použijte tuto službu k aktualizaci počítadla counter = exampleService.add(counter, 1); // zkonstruujte nějaké HTML k odeslání zpět String page = "<p>Požadovali jste uri: <code>'" + uri + "'</code>.\n"; page += "<p>Vyvolali jste tuto službu " + counter + " krát" + (counter == 1 ? "" : "s") + ".\n"; byte[] pageBytes = page.getBytes("UTF-8"); // sestavte náš objekt TeamContent, který bude vrácen 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; } /** * Tato metoda ukládá specifikovaný obsah. * Používá se k přenosu dat od klienta na server. */ veřejný void put(TeamContent teamContent) vyvolá IOException { // nedělá nic, takže neexistuje způsob, jak odeslat data // od klienta na server pomocí tohoto rozhraní } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.ITeamRestService; /** * Příklad služby REST. * Pamatujte, že obvykle nebudete přidávat k tomuto rozhraní žádné metody, * ačkoli možná sem budete chtít umístit některé sdílené konstanty. */ veřejné rozhraní IExampleRestService rozšiřuje 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; /** * Implementace IExampleRestService. * Pamatujte, že tato třída rozšiřuje TeamRestService tím, že poskytuje způsob, jak zpracovat * specifické metody bez kontroly metody HTTP v metodě služby. */ veřejná třída ExampleRestService rozšiřuje TeamRestService implementuje IExampleRestService { // spočítejte počet vyvolání této služby. static private int counter = 0; /** * Implementace metody GET. */ veřejný void perform_GET(String uri, ITeamServiceContext teamServiceContext) vyvolá IOException { // získejte instanci služby IExampleService IExampleService exampleService = (IExampleService) teamServiceContext.getPeerService(IExampleService.class); // použijte tuto službu k aktualizaci počítadla counter = exampleService.add(counter, 1); // získejte požadavek HTTP a odpověď od kontextu HttpServletRequest request = teamServiceContext.getHttpServletRequest(); HttpServletResponse response = teamServiceContext.getHttpServletResponse(); // získejte zapisovač na výstupním proudu Writer writer = response.getWriter(); // zapište nějaké HTML response.setContentType("text/html"); writer.write("<p>Požadovali jste: '" + uri + "'.\n"); writer.write("<p>Řetězec dotazu byl: '" + request.getQueryString() + ".\n"); writer.write("<p>Vyvolali jste tuto službu " + counter + " krát" + (counter == 1 ? "" : "s") + ".\n"); writer.write("<p>Aktuální čas je " + 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; /** * Hlavní metoda této třídy volá některé služby jako klient. */ public class ExampleClient { /** * Zkopírujte vstupní proud do System.out */ statický soukromý void copyToSystemOut(InputStream iStream) vyvolá 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------------------"); } /** * Metoda, která provádí všechna volání služby. */ statický veřejný void main(String[] args) vyvolá IOException { // vytvořte novou vzdálenou konfiguraci, nastavující adresu URL RemoteTeamServerConfiguration config = new RemoteTeamServerConfiguration(); config.setURL("http://localhost:9080/jazz"); // vytvořte vzdálený server týmu, přidejte některé služby RemoteTeamServer server = RemoteTeamServer.create(config); server.addService(IExampleService.class, null); server.addService(IExampleContentService.class, null); server.addService(IExampleRestService.class, null); // získejte objekty implementace služby IExampleService rpcService = (IExampleService) server.getServiceImplementation(IExampleService.class); IExampleContentService contentService = (IExampleContentService) server.getServiceImplementation(IExampleContentService.class); // pamatujte, že implementace v tomto případě NEIMPLEMENTUJE rozhraní; // služby REST se tímto způsobem liší ITeamRestServiceClient restService = (ITeamRestServiceClient) server.getServiceImplementation(IExampleRestService.class); // vyvolejte službu RPC int result = rpcService.add(1, 2); System.out.println("\nNakonec vychází 1 + 2 = " + result + "."); // vyvolejte službu obsahu TeamContent teamContent = contentService.get("/něco"); InputStream iStream = teamContent.getInputStream(); System.out.println("\nObsah ze služby obsahu :: /něco:"); try { copyToSystemOut(iStream); } // zkontrolujte, zda je vstupní proud TeamContent zavřený, nebo // nebude základní soket zavřen finally { if (null != iStream) iStream.close(); } // vyvolejte službu REST HttpMethod method = restService.getGetMethod("/něco jiného"); try { restService.executeMethod(method); System.out.println("\nObsah ze služby REST :: /něco jiného:"); copyToSystemOut(method.getResponseBodyAsStream()); } // zkontrolujte, zda metoda volá releaseConneciton(), nebo // nebude základní soket zavřen finally { method.releaseConnection(); } } }
package com.ibm.team.core.services.examples; import com.ibm.team.core.services.registry.ITeamServiceInterfaceFactory; /** * Třída továrny použitá během registrace služeb prostřednictvím modulů plug-in * eclipse k načtení instancí vašich tříd služeb. * Není zde nic fantastického, prostě potřebujeme být schopni načíst instanci * třídy s daným názvem obvyklým způsobem. Není zapotřebí * dělat nic propracovanějšího, ačkoli budete potřebovat jednu z nich * v každém ze svých souborů jar modulu plug-in serveru. */ veřejná třída TeamServiceInterfaceFactory implementuje 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říklad služby RPC" /> <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říklad služby obsahu" /> <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říklad služby REST" /> </extension> </plugin>