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>