|
|
(Uma revisão intermediária pelo mesmo usuário não está sendo mostrada) |
Linha 1: |
Linha 1: |
| O BISSocket é um serviço que abstrai a conexão entre dois pontos distintos através de uma conexão TCP para transferência de objetos entre sistemas. A vantagem entre outras opções já oferecidas pelas plataformas, como o servidor de aplicação, é que são apenas classes do Java e não precisam de bibliotecas externas. Assim um sistema simples para ser anexado em projetos pequenos e portáteis, como utilitários ou para dispositivos móveis. | | O BISSocket é um serviço oferecido pelo BIS e montado em cima da estrutura do [[FWSocket]] para expor alguns métodos da Fachada do BIS através de uma conexão simples TCP. Essa sistema permite que uma conexão com o servidor possa ser feita sem ter que carregar as bibliotecas do JNDI. |
|
| |
|
| == Synchronous Connection - "Request/Response" == | | == Funcionamento == |
| Uma das maneiras de se estabelecer uma comunicação entre dois pontos é o modo síncrono. Neste modo o cliente abre uma conexão com o servidor, transfere os dados (como uma requisição) e aguarda pela resposta que virá em seguida. Este modo de funcionamento é similar ao funcionamento de um servidor HTTP.
| |
|
| |
|
| Para criar esse ambiente basta seguir os seguintes passos:
| | O funcionamento é dividido em duas classes: |
| * '''Do lado servidor, crie uma instância da classe BISSocketSyncServer''' - para criar esta classe são exigidos dois parâmetros, o primeiro é a porta em que o sistema aceitará conexões, o segundo é um listener que será chamado sempre que recebermos algum novo objeto através da conexão. Com a instância criada, chame o método startServer(). Provavelmente esta instância deverá ser controlada por um Singleton o outro pattern que permita que o objeto esteja disponível para toda aplicação e não apenas para a Thread corrente. Uma das razões para isso é que uma vez iniciado o servidor, a thread é liberada e as conexões serão escutadas em uma Thread a parte.
| |
| * '''Do lado cliente, crie uma instância (ou várias a medida que forem necessárias) da classe BISSocketSyncClient''' - já para instanciar esta classe os argumentos necessários são: host e porta para conectar no BISSocketServer. Criada a instância, basta usar o método sendData(). Este método cria a conexão toda vez que é chamado, envia os dados e aguarda que o retorno venha do servidor.
| |
|
| |
|
| == Asynchronous Connection - "Active Full-Duplex" ==
| | * '''BISSocketServer''' - que é iniciada pelo servidor e escuta as conexões/solicitações do cliente. |
| Esta conexão é utilizada quando queremos estabelecer um canal de comunicação que pode ser iniciado por ambos os pontos (cliente ou servidor). Como por exemplo uma conexão de chat, em que o usuário pode envier mensagens quando quiser, e o servidor deve ter a capacidade de enviar as mensagens assim que precisa.
| | * '''BISSocketClient''' - classe responsável por simplificar as chamadas do cliente. Basta passar o host e porta para conexão e chamar os métodos estáticos que tendem a ter a mesma assinatura da fachada do BIS. |
| | |
| Embora ainda tenhamos um lado Servidor - que mantém uma porta aberta para conexão - e outro Cliente - que inicia a conexão, ao contrário do método Synchronous a conexão deste método ficará aberta o tempo todo. Não será criada apenas quando tivermos dados a serem enviados. Ambas as classes enviam dados, mas não esperam resposta na hora. A resposta virá "em outro canal" e será avisada pelo Listener.
| |
| | |
| Para estabelecer essa conexão entre dois pontos basta seguir os seguintes passos:
| |
| # '''Do lado servidor''', crie uma instância do BISSocketAsync e chame o método startServer(). Neste método será obrigatório passar dois parâmetros "port" que é o número da porta que o servidor passará a escutar para conexões, e "listener" que será o listener de eventos, chamado sempre que recebermos algum dado. Para encerrar o servidor basta chamar o método stopServer().
| |
| # '''Do lado cliente''', cria uma instância do BISSocketAsync, exatamente como no lado servidor, no entanto devemos chamar o método connect(). Esse método recebe 3 parametros: host - endereço do servidor, port - porta na qual o server está escutando, e listener - listener que será chamado quando recebermos dados do servidor.
| |
| | |
| == Transmissão de Objetos ==
| |
| O conteúdo a ser transmitido deve ser colocado em uma instância do BISSocketObjectMap. Este objeto é tem a função de ser um container para os dados a serem transmitidos. Baseado em uma estrutura "Map", permite que diversos objetos sejam colocados dentro e identificados com uma chave. Como os objetos são transmitidos através da serialização do Java, obrigatoriamente o objetos a serem transmitidos devem implementar "java.io.Serializable".
| |
| | |
| Assim como para o funcionamento correto da desserialização todas as classes com mesma versão devem estar disponível do outro lado da conexão.
| |
| | |
| == Propagação de Exceptions ==
| |
| Como as exceptions são serializáveis, caso alguma exceção ocorra durante o processamento do BISSocket, ou a chamada do listener permita que a exceção suba até o BISSocket, essa exceção será capturada e retornada para o outro lado da conexão.
| |
| * '''No caso de conexão síncrona''' - a exceção será lançada exatamente como era e poderá ser tratada como se não tivesse passado pelo BISSocket.
| |
| * '''No caso de conexão assíncrona''' - a conexão assíncrona não propaga exceptions. Qualquer exception será ignorada e não propagada.
| |
| | |
| | |
| {{nota|Transporte da Exceção|Para transportar a exceção o BIS a serializa e envia na estrutura Map na propriedade descrita na constante BISSocketObjectMap.PROPERTY_EXCEPTION.}}
| |
O BISSocket é um serviço oferecido pelo BIS e montado em cima da estrutura do FWSocket para expor alguns métodos da Fachada do BIS através de uma conexão simples TCP. Essa sistema permite que uma conexão com o servidor possa ser feita sem ter que carregar as bibliotecas do JNDI.
Funcionamento
O funcionamento é dividido em duas classes:
- BISSocketServer - que é iniciada pelo servidor e escuta as conexões/solicitações do cliente.
- BISSocketClient - classe responsável por simplificar as chamadas do cliente. Basta passar o host e porta para conexão e chamar os métodos estáticos que tendem a ter a mesma assinatura da fachada do BIS.