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>