Esses exemplos incluem três interfaces de serviço, suas implementações, um factory de interface de serviço, um programa cliente para realizar os serviços, e um plugin.xml que pode registrar os serviços.
Para executar isso no servidor, será necessário ter a versão compilada dos arquivos Java (exceto ExampleClient), e o plugin.xml disponível do caminho de classe do servlet team atualmente em execução. ExampleClient executa como um cliente.
pacote com.ibm.team.core.services.examples; /** * Serviço RPC de exemplo que pode executar operações matemáticas integrais simples. */ 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); }
pacote com.ibm.team.core.services.examples; /** * Implementação de IExampleService. */ classe pública ExampleService implements IExampleService { // implemente os métodos do modo típico 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; } }
pacote com.ibm.team.core.services.examples; importar com.ibm.team.core.services.ITeamContentService; /** * Serviço de conteúdo de exemplo. * Note que normalmente você não incluirá nenhum método nessa interface, * porém, você pode desejar colocar algumas constantes compartilhadas aqui. */ interface pública IExampleContentService estende ITeamContentService { }
pacote com.ibm.team.core.services.examples; importar java.io.ByteArrayInputStream; importar java.io.IOException; importar java.sql.Timestamp; importar com.ibm.team.core.services.ITeamServiceContext; importar com.ibm.team.core.services.TeamContent; /** * Implementação de IExampleContentServer. */ a classe pública ExampleContentService implementa IExampleContentService { // contar o número de vezes que esse serviço foi chamado. contador int privado estático = 0; /** * Esse método retorna o conteúdo especificado pela URI. * Isso é usado para transformar dados do servidor para o cliente. */ public TeamContent get(URI da cadeia) lança IOException { // obter uma instância do IExampleService IExampleService exampleService = (IExampleService) ITeamServiceContext.Current.getPeerService(IExampleService.class); // usar esse serviço para atualizar o contador contador = exampleService.add(contador, 1); // construir algum HTML para enviar de volta Página da cadeia = "<p>Você solicitou URI: <código>'" + URI + "'</código>.\n"; página += "<p>Você chamou esse serviço " + contador + " horário" + (contador == 1 ? "" : "s") + ".\n"; byte[] pageBytes = page.getBytes("UTF-8"); // compilar nosso objeto TeamContent a ser retornado 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; } /** * Esse método armazena o conteúdo especificado. * Isso é usado para transferir dados do cliente para o servidor. */ public void put(TeamContent teamContent) lança IOException { // não faz nada, assim não há como enviar dados do // cliente para o servidor com essa interface } }
pacote com.ibm.team.core.services.examples; importar com.ibm.team.core.services.ITeamRestService; /** * Serviço REST de exemplo. * Note que normalmente você não incluirá nenhum método nessa interface, * porém, você pode desejar colocar algumas constantes compartilhadas aqui. */ public interface IExampleRestService estende ITeamRestService { }
pacote com.ibm.team.core.services.examples; importar java.util.Date; importar java.io.IOException; importar java.io.Writer; importar javax.servlet.http.HttpServletRequest; importar javax.servlet.http.HttpServletResponse; importar com.ibm.team.core.services.ITeamServiceContext; importar com.ibm.team.core.services.TeamRestService; /** * Implementação de IExampleRestService. * Note que essa classe estende TeamRestService, que fornece uma maneira de manipular * métodos específicos sem verificar o método de HTTP no método de serviço. */ public class ExampleRestService estende TeamRestService implementa IExampleRestService { // contar o número de vezes que esse serviço foi chamado. contador int privado estático = 0; /** * Implementação do método GET. */ public void perform_GET(String uri, ITeamServiceContext teamServiceContext) lança IOException { // obter uma instância do IExampleService IExampleService exampleService = (IExampleService) teamServiceContext.getPeerService(IExampleService.class); // usar esse serviço para atualizar o contador contador = exampleService.add(contador, 1); // obter a solicitação de HTTP e responder a partir do contexto HttpServletRequest request = teamServiceContext.getHttpServletRequest(); HttpServletResponse response = teamServiceContext.getHttpServletResponse(); // obter um Writer no fluxo de saída Writer writer = response.getWriter(); // gravar algum HTML response.setContentType("text/html"); writer.write("<p>Você pediu: '" + uri + "'.\n"); writer.write("<p>A cadeia de consultas era: '" + request.getQueryString() + ".\n"); writer.write("<p>Você chamou esse serviço " + counter + " time" + (counter == 1 ? "" : "s") + ".\n"); writer.write("<p>O horário atual é " + new Date() + ".\n"); } }
pacote com.ibm.team.core.services.examples; importar java.io.IOException; importar java.io.InputStream; importar org.apache.commons.httpclient.HttpMethod; importar com.ibm.team.core.services.ITeamRestServiceClient; importar com.ibm.team.core.services.RemoteTeamServer; importar com.ibm.team.core.services.RemoteTeamServerConfiguration; importar com.ibm.team.core.services.TeamContent; /** * O método principal dessa classe chama alguns serviços como um cliente. */ public class ExampleClient { /** * Copiar um fluxo de entrada para System.out */ static private void copyToSystemOut(InputStream iStream) lança 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------------------"); } /** * Método que faz todas as chamadas de serviço. */ static public void main(String[] args) lança IOException { // criar uma nova configuração remota, configurando a URL RemoteTeamServerConfiguration config = new RemoteTeamServerConfiguration(); config.setURL("http://localhost:9080/jazz"); // criar o servidor remoto team, incluir alguns serviços RemoteTeamServer server = RemoteTeamServer.create(config); server.addService(IExampleService.class, null); server.addService(IExampleContentService.class, null); server.addService(IExampleRestService.class, null); // obter os objetos de implementação de serviço IExampleService rpcService = (IExampleService) server.getServiceImplementation(IExampleService.class); IExampleContentService contentService = (IExampleContentService) server.getServiceImplementation(IExampleContentService.class); // note que a implementação nesse caso NÃO implementa a interface; // Serviços REST diferem dessa maneira ITeamRestServiceClient restService = (ITeamRestServiceClient) server.getServiceImplementation(IExampleRestService.class); // chamar um serviço RPC int result = rpcService.add(1, 2); System.out.println("\nTurns out, 1 + 2 = " + result + ", after all."); // chamar um serviço de conteúdo TeamContent teamContent = contentService.get("/something"); InputStream iStream = teamContent.getInputStream(); System.out.println("\nContent from content service :: /something:"); try { copyToSystemOut(iStream); } // certificar-se de que o fluxo de entrada de TeamContent está fechado, ou o // soquete subjacente não será fechado finally { if (null != iStream) iStream.close(); } // chamar um serviço REST HttpMethod method = restService.getGetMethod("/something-else"); try { restService.executeMethod(method); System.out.println("\nContent from REST service :: /something-else:"); copyToSystemOut(method.getResponseBodyAsStream()); } // certificar-se de que o método chama releaseConneciton(), ou o // soquete subjacente não será fechado finally { method.releaseConnection(); } } }
pacote com.ibm.team.core.services.examples; importar com.ibm.team.core.services.registry.ITeamServiceInterfaceFactory; /** * Uma classe factory usada durante o registro de serviços por meio do eclipse * plug-ins para carregar instâncias de suas classes de serviço. * Nada especial aqui, apenas precisamos poder carregar uma instância * de Classe com um determinado nome, da maneira óbvia. Não é necessário * fazer nada mais elaborado, porém, você precisará de uma delas em * cada um de seus jars de plug-in do servidor. */ public class TeamServiceInterfaceFactory implementa 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" nome = "com.ibm.team.core.services.examples" versão = "1.0.0" nome do provedor = "IBM"> <ponto de extensão="com.ibm.team.core.services.serviceProvider"> <serviço 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" nome = "Serviço RPC de Exemplo" /> <serviço 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" nome = "Example Content Service" /> <serviço 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" nome = "Serviço REST de Exemplo" /> </extensão> </plug-in>