Integrando J2EE com swing

Olá amigos, tenho um sistema J2EE rodando estável atrás de uma interface web. Por solicitação do cliente, preciso construir um cliente com interface swing para disponibilizar o mesmo serviço via internet (não me pergunte por que). O serviço esta alocado num servidor Sun Application Server visivel na web. Qual seria a melhor forma de conectar esta aplicação Swing com os serviços publicados neste servidor?
Pensei em 3 possibilidades:

1 - Web Services, mas tem a restrição de segurança;
2 - Colocar no servidor uma Camada RMI para que através dela seja feito o acesso;
3 - Fazer um Lookup via JNDI na interface remota do session do servidor no cliente para acessar os serviços.

gostaria que alguém comentasse qual a melhor solução dentre estas ou me indicasse outra e se a opção for pela solução de numero 3, como faço para executar este lookup remoto?
Abraços a todos!

Se é J2EE então seu Servidor tá cheio dos EJB’s, é só fazer um lookup no EJB que você precisa do mesmo modo como faria na aplicação web. De preferencia usando o padrão delegate para o lookup e a chamadas de metodos. Ae no caso você pode usar os mesmos delegates para web/swing.

Não entendi o porque do Web Services, e também para que criar uma camada RMI se o servidor já tem isso tudo pronto para você? O lookup você faz como se fosse na maquina local, a única diferença a url do Servidor
JNDI que está mapeando seus serviços.

Fale mais informações sobre sua aplicação e o servidor para que possamos entender o cenário melhor.

Valeu Hempx pelo esclarecimento. Quanto a aplicação é simples. 5 CMPs acessados por um session remote. minhas duvidas a respeito do que usar vem do fato de eu nunca ter me deparado com uma situação em que tenho que acessar um container EJB Apartir de um cliente swing, daí as duvidas. Quanto aos padrões empregados, sim, com certeza, sempre uso o Delegate e uma Classe especializada em fazer o Lookup.
Porém, se não estou enganado, para fazer lookup de um ejb de um container remoto, tenho que setar as devidas properties para localizar o conteiner. Vc tem algum exemplo deste código?
Abraços!

Não lembro muito bem como faz isso não, mas acho que não tem muito segredo. Você pega uma referência do seu servidor JNDI,
faz um lookup passando o nome JNDI do seu EJB. Você então vai tá de posse do Home do seu EJB, então da um create que você terá uma referência para ele.
Eu já fiz isso mas não lembro assim de cabeça, qualquer coisa posso procurar o código aqui caso você tenha dificuldades.
Abraço,

Espero que isso possa te ajudar no meu caso eu nao utilizei beans de sessão e nem CMP só utillizei utilizei BMP.

private PessoaRemoteHome home;
private PessoaRemote pessoa;
        public void conectarServidor() throws NamingException{
        try {
            Properties props = new Properties();
            props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
            props.put(Context.PROVIDER_URL, "jnp://192.168.3.21:1099");
            props.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
            Context ctx = new InitialContext(props);
            
            home = (PessoaRemoteHome)ctx.lookup("PessoaBean");
        }  catch (Exception e) {
            System.out.println("Caught exception!"+e.getMessage());
        }
    }

colocar o .jar na libraries da aplicação Swing

G:\rafsantos_J2ee\Conta3A\Conta3A-ejb\dist\Conta3A-EJBModule.jar

Meu inserir ficou assim

    private void inserirPessoa() {
        try {
            pessoa = home.create(jtfCPF.getText(), jtfNome.getText(), jtfEndereco.getText(), jtfCidade.getText(),
                                 jtfEstado.getText(), Integer.parseInt(jtfIdade.getText()));
        } catch (RemoteException ex) {
            ex.printStackTrace();
        } catch (CreateException ex) {
            JOptionPane.showMessageDialog(null, "O registro não foi incluido!", "Atenção", JOptionPane.INFORMATION_MESSAGE);
        }
    }

Valeu Robson!
Funcionou perfeito…