[Prévia] [Próxima] [Prévia por assunto] [Próxima por assunto]
[Índice cronológico] [Índice de assunto]

Re: VideoRentalStoreService



Olá Daniel,

estou respondendo para a lista pois mais pessoas podem estar com
problemas parecidos com o seu.

On 6/17/06, Daniel Creão <ldaugusto@xxxxxxxxx> wrote:
Ja programei as classes de implementação RPC e Doc fazem 3 dias mas não
consigo colocar o servidor no ar, nem encontro um bom exemplo para ajudar
então estou com várias dúvidas:
Na descrição do EP3 foi sugerida a criação de uma classe
VideoRentalStoreService que extends ServiceMBeanSupport e implements
VideoRentalStoreServiceMBean. Mas quando 'compila' o WSDL com o wscompile
ele também gera uma VideoRentalStoreService mas que extends
javax.xml.rpc.Service. O fato de ter 2 classes com o mesmo nome (ainda que
em pacotes diferentes) me complicou um pouco: devo usar a classe gerada pelo
WSDL para o servidor e esquecer a outra classe? Achava que devia usar a
mesma classe sugerida na descrição do EP, de forma que ela lide tanto com
WebServices quanto com CORBA simultaneamente. Qual o certo?
É verdade, não tinha reparado no nome em comum, mas note que o
primeiro VideoRentalStoreService é uma classe e o segundo uma
interface. É o seguinte: a classe VideoRentalStoreService que
implementa VideoRentalStoreServiceMBean só é referenciada no
jboss-service.xml. Nenhum código cliente e nenhum outro descritor de
implantação referencia tal classe. Essa classe é uma espécie de
equivalente a classe com o método main do seu servidor CORBA: o código
que estava no main passa para o startService do
VideoRentalStoreService (sem a chamada a ORB.run()). Resumindo: essa
classe VideoRentalStoreService só tem a ver com a parte CORBA, e não
vai ser referenciada de nenhuma parte da implementação do web service
(nem código nem descritores).

A interface VideoRentalStoreService gerada pelo wscompile pode ou não
ser usada na implementação do seu web service (a alternativa seria
usar a interface javax.xml.rpc.Service). Se você for usá-la, precisa
colocar no seu application-client.xml uma linha parecida com esta:

<service-interface>videorentalstore.webservice.VideoRentalStoreService</service-interface>

Observe a definição desta interface:

public interface VideoRentalStoreService extends javax.xml.rpc.Service {
   public videorentalstore.webservice.RentalServiceRPC
getRentalServiceRPCPort() ...;
   public videorentalstore.webservice.RentalServiceDoc
getRentalServiceDocPort() ...;
}

Veja que ela não tem nada a ver com CORBA, e portanto pode ser usada
apenas na implementação do seu web service. Nesse caso, seu cliente
seria mais ou menos parecido com isso:

     VideoRentalStoreService service = (VideoRentalStoreService) new
InitialContext()
           .lookup("java:comp/env/service/videorental");
     RentalServiceRPC rpcPort = (RentalServiceRPC)
service.getRentalServiceRPCPort();

Ou seja, essa interface apenas especifica quais métodos você pode
esperar no objeto que você "pega" no JNDI (lookup).

Espero ter esclarecido. Qualquer dúvida por favor volte a perguntar.