sexta-feira, 17 de julho de 2015

Encerrando conexão REST JavaAndroid DataSnap

Prezados,

Pra quem utiliza Java ou esta começando a utilizar REST com DataSnap já deve ter percebido que uma conexão que é feita com o Proxy gerado pelo win32proxydownloader da embarcadero não encerra a sessão no servidor DataSnap.

Levando em consideração que seu  DSRESTConnection seja "conn"; Mesmo se você colocar conn.CloseSession; ele irá apagar o conteúdo da variável session, porem no servidor DataSnap a conexão permanecerá ativa. Pois bem se vc fizer muitas requisições DataSnap logo logo seu servidor estará com varias sessões abertas consumindo memoria e sem a menor ncesessidade.

Para resolver essa questão criei um método estático dentro da minha classe TJ3Conexao;
Nela você deve passar como parâmetro o objeto da conexão que está utilizando.

Segue o codigo:

public static void CloseConexao(DSRESTConnection _con)
{
String auxurl = _con.getProtocol() + "://"+ _con.getHost() + ":" + Integer.toString(_con.getPort()) + "/datasnap/rest/CloseSession/";
String auxsession = "dssession=" + _con.getSessionID();
_con.CloseSession();
try
{
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(auxurl);
get.setHeader(new BasicHeader("Accept", "application/json"));
get.setHeader(new BasicHeader("Content-Type", "text/xml; charset=utf-8"));
get.setHeader(new BasicHeader("Pragma", auxsession));
client.execute(get);
} catch (Throwable e)
{
e.printStackTrace();
}
}
}

Qualquer dúvida entre em contato.

Atenciosamente,

Nelson Lima ;-)

Nenhum comentário:

Postar um comentário