<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-BR">
	<id>http://wiki.biserp.com.br/index.php?action=history&amp;feed=atom&amp;title=BISSocket</id>
	<title>BISSocket - Histórico de revisão</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.biserp.com.br/index.php?action=history&amp;feed=atom&amp;title=BISSocket"/>
	<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=BISSocket&amp;action=history"/>
	<updated>2026-04-08T20:13:08Z</updated>
	<subtitle>Histórico de revisões para esta página neste wiki</subtitle>
	<generator>MediaWiki 1.43.1</generator>
	<entry>
		<id>http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=1350&amp;oldid=prev</id>
		<title>Rodrigogml: /* Funcionamento */</title>
		<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=1350&amp;oldid=prev"/>
		<updated>2021-09-30T13:20:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Funcionamento&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 13h20min de 30 de setembro de 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l7&quot;&gt;Linha 7:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 7:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;BISSocketServer&amp;#039;&amp;#039;&amp;#039; - que é iniciada pelo servidor e escuta as conexões/solicitações do cliente.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;BISSocketServer&amp;#039;&amp;#039;&amp;#039; - que é iniciada pelo servidor e escuta as conexões/solicitações do cliente.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;BISSocketClient&amp;#039;&amp;#039;&amp;#039; - 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.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;* &amp;#039;&amp;#039;&amp;#039;BISSocketClient&amp;#039;&amp;#039;&amp;#039; - 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.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A descrição de funcionamento interna dos métodos e parâmetros está descrita em [[Métodos do BISSocket]].&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=1345&amp;oldid=prev</id>
		<title>Rodrigogml em 13h28min de 29 de setembro de 2021</title>
		<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=1345&amp;oldid=prev"/>
		<updated>2021-09-29T13:28:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;pt-BR&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Edição anterior&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Edição das 13h28min de 29 de setembro de 2021&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot;&gt;Linha 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Linha 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O BISSocket é um serviço &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;que abstrai a conexão entre dois pontos distintos &lt;/del&gt;através de uma conexão TCP &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;para transferência de objetos entre sistemas&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;A vantagem entre outras opções já oferecidas pelas plataformas, como &lt;/del&gt;o servidor &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;de aplicação, é &lt;/del&gt;que &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;são apenas classes &lt;/del&gt;do &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;O BISSocket é um serviço &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;oferecido pelo BIS e montado em cima da estrutura do [[FWSocket]] para expor alguns métodos da Fachada do BIS &lt;/ins&gt;através de uma conexão &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;simples &lt;/ins&gt;TCP. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Essa sistema permite que uma conexão com &lt;/ins&gt;o servidor &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;possa ser feita sem ter &lt;/ins&gt;que &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;carregar as bibliotecas &lt;/ins&gt;do &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;JNDI&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Synchronous Connection - &quot;Request/Response&quot; &lt;/del&gt;==&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;== &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Funcionamento &lt;/ins&gt;==&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Para criar esse ambiente basta seguir os seguintes passos:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;O funcionamento &lt;/ins&gt;é &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;dividido &lt;/ins&gt;em &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;duas classes&lt;/ins&gt;:&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Do lado servidor, crie uma instância da classe BISSocketSyncServer&#039;&#039;&#039; - 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 &lt;/del&gt;é &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;que uma vez iniciado o servidor, a thread é liberada e as conexões serão escutadas &lt;/del&gt;em &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uma Thread a parte.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;Do lado cliente, crie uma instância (ou várias a medida que forem necessárias) da classe BISSocketSyncClient&#039;&#039;&#039; - já para instanciar esta classe os argumentos necessários são&lt;/del&gt;: &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Asynchronous Connection &lt;/del&gt;- &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;Active Full&lt;/del&gt;-&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Duplex&quot; ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;BISSocketServer&#039;&#039;&#039; &lt;/ins&gt;- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;que é iniciada pelo servidor e escuta as conexões/solicitações do cliente.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Esta conexão é utilizada quando queremos estabelecer um canal de comunicação que pode ser iniciado &lt;/del&gt;por &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ambos os pontos (&lt;/del&gt;cliente &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;ou servidor)&lt;/del&gt;. &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Como por exemplo uma &lt;/del&gt;conexão &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;de chat, em &lt;/del&gt;que &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;o usuário pode envier mensagens quando quiser, e o servidor deve &lt;/del&gt;ter a &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;capacidade de enviar as mensagens assim que precisa&lt;/del&gt;.&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;BISSocketClient&#039;&#039;&#039; &lt;/ins&gt;- &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;classe responsável &lt;/ins&gt;por &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;simplificar as chamadas do &lt;/ins&gt;cliente. &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Basta passar o host e porta para &lt;/ins&gt;conexão &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;e chamar os métodos estáticos &lt;/ins&gt;que &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;tendem a &lt;/ins&gt;ter a &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;mesma assinatura da fachada do BIS&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot;&gt;&lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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. &lt;/del&gt;A &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;resposta virá &quot;em outro canal&quot; e será avisada pelo Listener.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;+&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;A &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;descrição de funcionamento interna dos métodos &lt;/ins&gt;e parâmetros está &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;descrita &lt;/ins&gt;em &lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;[[Métodos &lt;/ins&gt;do BISSocket&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;]]&lt;/ins&gt;.&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Para estabelecer essa conexão entre dois pontos basta seguir os seguintes passos:&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &#039;&#039;&#039;Do lado servidor&#039;&#039;&#039;, crie uma instância do BISSocketAsync &lt;/del&gt;e &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;chame o método startServer(). Neste método será obrigatório passar dois &lt;/del&gt;parâmetros &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;&quot;port&quot; que é o número da porta que o servidor passará a escutar para conexões, e &quot;listener&quot; que será o listener de eventos, chamado sempre que recebermos algum dado. Para encerrar o servidor basta chamar o método stopServer().&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;# &#039;&#039;&#039;Do lado cliente&#039;&#039;&#039;, 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 &lt;/del&gt;está &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;escutando, e listener - listener que será chamado quando recebermos dados do servidor.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Transmissão de Objetos ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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 &lt;/del&gt;em &lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;uma estrutura &quot;Map&quot;, 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 &quot;java.io.Serializable&quot;.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;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.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;== Propagação de Exceptions ==&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;Como as exceptions são serializáveis, caso alguma exceção ocorra durante o processamento &lt;/del&gt;do BISSocket&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;, 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.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;No caso de conexão síncrona&#039;&#039;&#039; - a exceção será lançada exatamente como era e poderá ser tratada como se não tivesse passado pelo BISSocket.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;* &#039;&#039;&#039;No caso de conexão assíncrona&#039;&#039;&#039; - a conexão assíncrona não propaga exceptions. Qualquer exception será ignorada e não propagada.&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt; &lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;diff-marker&quot; data-marker=&quot;−&quot;&gt;&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;{{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&lt;/del&gt;.&lt;del style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;}}&lt;/del&gt;&lt;/div&gt;&lt;/td&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-side-added&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
	<entry>
		<id>http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=151&amp;oldid=prev</id>
		<title>Rodrigogml: Criou página com &#039;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 outr...&#039;</title>
		<link rel="alternate" type="text/html" href="http://wiki.biserp.com.br/index.php?title=BISSocket&amp;diff=151&amp;oldid=prev"/>
		<updated>2015-04-14T01:55:28Z</updated>

		<summary type="html">&lt;p&gt;Criou página com &amp;#039;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 outr...&amp;#039;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;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.&lt;br /&gt;
&lt;br /&gt;
== Synchronous Connection - &amp;quot;Request/Response&amp;quot; ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
Para criar esse ambiente basta seguir os seguintes passos:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do lado servidor, crie uma instância da classe BISSocketSyncServer&amp;#039;&amp;#039;&amp;#039; - 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.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Do lado cliente, crie uma instância (ou várias a medida que forem necessárias) da classe BISSocketSyncClient&amp;#039;&amp;#039;&amp;#039; - 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.&lt;br /&gt;
&lt;br /&gt;
== Asynchronous Connection - &amp;quot;Active Full-Duplex&amp;quot; ==&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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á &amp;quot;em outro canal&amp;quot; e será avisada pelo Listener.&lt;br /&gt;
&lt;br /&gt;
Para estabelecer essa conexão entre dois pontos basta seguir os seguintes passos:&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Do lado servidor&amp;#039;&amp;#039;&amp;#039;, crie uma instância do BISSocketAsync e chame o método startServer(). Neste método será obrigatório passar dois parâmetros &amp;quot;port&amp;quot; que é o número da porta que o servidor passará a escutar para conexões, e &amp;quot;listener&amp;quot; que será o listener de eventos, chamado sempre que recebermos algum dado. Para encerrar o servidor basta chamar o método stopServer().&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;Do lado cliente&amp;#039;&amp;#039;&amp;#039;, 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.&lt;br /&gt;
&lt;br /&gt;
== Transmissão de Objetos ==&lt;br /&gt;
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 &amp;quot;Map&amp;quot;, 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 &amp;quot;java.io.Serializable&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
== Propagação de Exceptions ==&lt;br /&gt;
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.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No caso de conexão síncrona&amp;#039;&amp;#039;&amp;#039; - a exceção será lançada exatamente como era e poderá ser tratada como se não tivesse passado pelo BISSocket.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;No caso de conexão assíncrona&amp;#039;&amp;#039;&amp;#039; - a conexão assíncrona não propaga exceptions. Qualquer exception será ignorada e não propagada.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{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.}}&lt;/div&gt;</summary>
		<author><name>Rodrigogml</name></author>
	</entry>
</feed>