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

Re: [reverbel-sod] Descritores



Olá Rafael!

Os descritores de implantação do cliente devem ser empacotados em um
arquivo jar, mas este arquivo cliente deve ser implantado no servidor
de aplicações (e não colocado no classpath). Note que esse arquivo jar
não precisa conter o código Java do seu cliente. Isso é o que a
especificação J2EE chama de "Application Client". O objetivo desse
módulo "application client" que você implanta no servidor de
aplicações é registrar uma instância de javax.xml.rpc.Service no JNDI.
Seu código Java, que roda em uma outra máquina virtual, tem que apenas
fazer um lookup pelo nome que você definiu no application-client.xml:

ctx.lookup("java:comp/env/services/VideoRentalStoreService");

Aqui está o trecho da JSR-109 que fala sobre isso:

"The client developer is required to define a logical JNDI name for
the Web service called a service reference. This name is specified in
the deployment descriptor for the client. It is recommended, but not
required that all service reference logical names be organized under
the service subcontext of a JNDI name space. The container must bind
the Service Interface implementation under the client's environment
context, java:comp/env, using the logical name of the service
reference."

É por isso que os nomes no programa Java de vocês começam com
"java:comp/env/service" (notem que a parte "/service" é opcional, mas
recomendável. Vale ressaltar que no application-client.xml o nome que
vocês colocam é só "service/algumaCoisa", sem o "java:comp/env/".

Só notei uma coisa meio estranha no seu jboss-client.xml: o elemento
"wsdl-override" contém o valor
"http://localhost:8080/webservice?wsdl";. Acho que talvez o endereço do
seu web service não seja esse. Você pode digitar esse endereço em um
browser depois de implantar o web service, e o WSDL deve aparecer.

On 6/9/06, Rafael Cosentino <rcosen@xxxxxxxxx> wrote:
Tento obter um proxy registrado no JNDI assim:

Context ctx = getInitialContext();
Service service = (Service) ctx.lookup
("java:comp/env/services/VideoRentalStoreService");

protected InitialContext getInitialContext() throws NamingException
 {
       Properties env = new Properties();
       env.setProperty(Context.INITIAL_CONTEXT_FACTORY, "
org.jnp.interfaces.NamingContextFactory");
       env.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.naming.client");
       env.setProperty(Context.PROVIDER_URL, "jnp://localhost:1099");
       env.setProperty("j2ee.clientName", "client");
       return new InitialContext(env);
}

ocorre a seguinte Exception:

javax.naming.NameNotFoundException: client not bound
Essa exceção significa que não há nenhuma instância de
javax.xml.rpc.Service registrada no JNDI com o nome
"java:comp/env/services/VideoRentalStoreService". Isso deve estar
ocorrendo porque você não implantou o módulo cliente no servidor de
aplicações.

[]'s