next up previous
Next: About this document ... Up: ep1 Previous: O Internet Communication Engine

O Que Você Deve Fazer

Neste exercício você implementará um invocador ICE que siga o esquema descrito na seção 1. Seu ICEInvoker receberá invocações remotas através do protocolo do ICE e repassará cada invocação para o container MBean associado ao EJB alvo. O invocador que você escreverá será voltado exclusivamente para clientes Java, pois utilizará proxies dinâmicos no lado do cliente. Antes de escrever esse invocador você deve ler o material sobre service MBeans do JBoss (esse material está no xerox do CAMAT) e estudar detalhadamente o código de algum dos invocadores existentes no JBoss. (O JRMPInvoker é um bom modelo. O IIOPInvoker não é, pois ele não segue o esquema descrito na seção 1.)

Além de ser um service MBean do JBoss, seu ICEInvoker deve ser um servente ICE que implementa a seguinte interface SLICE:

    module org {

        module jboss {

            module invocation {

                module ice {

                    sequence<byte> JavaSerializedObject;

                    exception InvocationException {
                        JavaSerializedObject javaException;
                    };

                    interface Invoker {
                        nonmutating string getServerHostName();
                        JavaSerializedObject invoke(JavaSerializedObject invocation)
                            throws InvocationException;
                    };
                };
            };
        };
    };
O arquivo SLICE com a definição dessa interface está disponível em http://www.ime.usp.br/~reverbel/SMA-03/trabalhos/ep1/ep1.ice. Os arquivos-fonte Java automaticamente gerados (pelo slice2java) a partir dessa definição estão disponíveis no diretório http://www.ime.usp.br/~reverbel/SMA-03/trabalhos/ep1/generated/.

Use o método startService() para registrar o servente ICE com um adaptador de objetos2e para obter um ICE proxy3 para a interface org.jboss.invocation.ice.Invoker.

Escreva também a classe ICEInvokerProxy, que implementa um invoker proxy associado a um ICEInvoker. Esse invoker proxy possui um ICE proxy para o objeto ICE remoto implementado por seu ICEInvoker. Ele implementa a interface org.jboss.invocation.Invoker simplesmente repassando as chamadas ao ICEInvoker remoto. É importante que o ICEInvokerProxy seja externalizável e que seus métodos readExternal() e writeExternal() sejam definidos de modo a permitir que ele seja passado por valor do servidor para os clientes.

Para testar e exercitar seu ICEInvoker, crie uma configuração do JBoss que use esse invocador como default. Implante num servidor com essa configuração os EJBs desenvolvidos no ``EP zero'', que (em princípio) não devem precisar de alteração alguma para funcionarem com o ICEInvoker.

Sua solução deve rodar em JBoss 3.2.2. Use o programa ant para automatizar a geração do seu invocador.

Este exercício deve ser feito preferencialmente em equipes de duas pessoas. O ideal é o esquema de ``programação pareada'' (pair programming) de XP. Como alguns podem ter restrições de horário que os impeçam de trabalhar assim, aceitarei também exercícios individuais.

Dúvidas sobre o enunciado devem ser enviadas para reverbel-sma@ime.usp.br.





Bom trabalho!


next up previous
Next: About this document ... Up: ep1 Previous: O Internet Communication Engine
Francisco Reverbel
2003-09-16