Java AppServer-01: Digite Application Server

15 de setembro, 2009 por Enrique Deixe uma resposta »

Agora temos um serviço RPC pode ser usado como base para a implementação de um servidor de aplicação, mas apenas um serviço RPC não é suficiente. Para isso, vamos implementar esses módulos e serviços:

  • Segurança: autenticação, autorização e auditoria

  • Pool de conexões ao banco de dados

  • Serviço de mensagens assíncronas

E, além de ter uma API para adicionar serviços, o servidor irá fornecer uma API para adicionar módulos de usuário. Agora, o diagrama de componente de servidor:

Diagrama de componentes

Diagrama de componentes

Os componentes de camada superior usado funcionalidades dos componentes da camada inferior. Agora, vamos explorar cada um dos componentes.

Segurança reinos gerente

Isso é obrigatório em qualquer AppServer. No Gerenciador de Segurança Realms instala os reinos de segurança. O que é uma região de segurança? Conceitualmente é um componente que controla o acesso aos serviços. Do ponto de vista técnico, é a implementação da interface:

  SecurityRealm de interface {public
     / **
      * O método de login.
      * Os credenciais @ param As credenciais para validar
      * @ Throws LoginException Se um ocurrs exeption durante o login
      * /
     void login (credenciais credenciais) lança LoginException;

     / **
      * O método logout.
      * Os credenciais @ param As credenciais
      * /
     vazio logout (credenciais credenciais);

     / **
      * Este método retorna true se e somente se o método do serviço pode ser
      * Executado Com as credenciais fornecidas.
      *
      * Os credenciais @ param as credenciais do usuário que executa
      * @ Param serviceName o nome do serviço
      * @ MethodName Param o nome do método para executar
      * @ Param params os parametros para passar para o método
      * @ Throws NotExecutedException que sinaliza a execução não é permitido para as credenciais dadas, serviceName, methodName e params
      * /
     anular executionAllowed (credenciais credenciais, ServiceName String, String methodName, Object ... params) throws NotExecutedException;
 } 

Existem apenas três métodos: login, logout e isExecutionAllowed. O dois primeiro referem-se ao conceito de autenticação e o terceiro refere-se ao conceito de liberação, mas também pode ser associado com auditoria e que é sempre executado antes de invocar o serviço.

O gerente de segurança usa os reinos interceptores que aparecem em Java RPC-07: o onPreExecution método () método é chamado executionAllowed () o domínio de segurança e continua a execução se isso não dá a exceção NotExecutedException. Por segurança, não são executadas se houver qualquer outra exceção (ou erro) na executionAllowed () e assim evita um bug quebrar o sistema de segurança.

Em seguida, colocando método de código arbitrário executionAllowed () pode autorizar ou proibir a execução de um método de um serviço com certos parâmetros.

O gerente de segurança reinos gerencia uma coleção de domínios de segurança. Eles correm todos e só autorizada levado para a chamada se tudo autorizado. O servidor tem implementado uma região de segurança com base no nome de usuário e senha e abstrato reino outra garantia para auditoria (log).

  classe abstrata pública estende AbstractUserPasswordSecurityRealm SecurityRealmAdapter {

     público AbstractUserPasswordSecurityRealm () {
     }

     void login pública (Credenciais c) lança LoginException {
         UserPasswordCredentials cred = (UserPasswordCredentials) c;
         if (cred! = null) {
             String user = cred.getUser ();
             Cred.getPassword pass String = ();
             validar (usuário, pass);
         Else {}
             throw new LoginException ("credenciais nulas");
         }
     }

     public void executionAllowed (credenciais credenciais, ServiceName String, String, methodName objeto ... params) throws {NotExecutedException
         if (credenciais == null) {
             jogar NotExecutedException novo ("não logado");
         }
     }

     public void validar (String user, pass String) lança LoginException;
 } 

Gerente do Módulo

Como vimos, o servidor é extensível. Mas como? Através de módulos. Um módulo é apenas um bean que tem um nome e dois métodos para gerenciar o ciclo de vida: startup () e shutdown (). Em seguida, o servidor tem um método para obter o formulário de pelo nome. À medida que a interface é tão simples, facilmente adaptado a incorporar qualquer serviço para o servidor. Por exemplo, serviço de mensagens assíncrona foi implementado separadamente e criou um módulo para atender este servidor de aplicativos. Mesmo com o pool de conexões com o banco de dados. A interface:

  Módulo de interface {public
     vazio setName (String nome);
     Cordas getName ();

     inicialização void () throws Exception;
     desligamento void ();
 } 

Para um módulo de um serviço, pedimos o ServerContext:

ServerContext.getModule (moduleName);

A classe nuclear ServerContext um conjunto de métodos estáticos que fornecem acesso a diferentes partes do servidor de aplicativos. O desatacan mais comumente são GetModule () e getServerConfig (). O primeiro que vimos. O segundo retorna um mapa com as propriedades que são carregados a partir de um arquivo de configuração. Vamos ver a configuração em uma seção dedicada a este.

Carregador de Serviços

Este é o componente responsável por ler um arquivo de configuração e criar serviços da RPC. Ele é implementado como um módulo de e pode ser facilmente substituído por outro e é acoplada para o servidor. Basicamente lê um arquivo de configuração que descrevem os serviços com seus parâmetros e adiciona-los para o servidor.

No próximo artigo vou descrever o pool de conexões para o banco de dados e serviço de mensagens. Além disso, vou descrever os arquivos de configuração.

Até a próxima.

Blogger Mensagem Digg Reddit Google Reader Ação
Anúncio

Deixe um comentário

Spam protecção por WP de Captcha-Livre