Olá a todos, eu estou iniciando em Java Web e tenho a seguinte situação: Um rastreador GPS envia dados para um IP Y PORTA X do meu servidor via GPRS, preciso captuar esses dados e armazenar em banco de dados. Construi o segunite esquema:
Um Listener iniciando um socket:
public void contextInitialized(ServletContextEvent arg0) {
SockServer sockServer = new SockServer(null);
sockServer.startListener();
}
E por fim a classe que compõe abre o socket em uma porta Y:
public class SockServer implements Runnable {
private static final int PORT = 8090;
private Socket talkSocket;
public SockServer(Socket socket){
talkSocket = socket;
}
public void startListener() {
System.out.println("...Executando server...");
try {
Socket talkSocket = new Socket();
ServerSocket serverSocket = new ServerSocket(PORT);
while (true) {
talkSocket = serverSocket.accept();
System.out.println("Cliente conectado!");
SockServer server = new SockServer(talkSocket);
Thread thread = new Thread(server);
thread.start();
}
} catch (IOException e1) {
e1.printStackTrace();
}
}
@Override
public void run() {
try {
BufferedReader input = new BufferedReader(new InputStreamReader(talkSocket.getInputStream()));
String data = (String) input.readLine();
GpsParamsDAO.insert(data);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Isto está funcionando sobre o Jboss 5.0, os dados são armazenados no banco de dados normalmente, mas acho que este código está ruim, esta classe SocketServer eu não consegui fazer de outra forma, essa é a primeira vez que utilizo Sockets.
Uma outra questão é na hora que vou encerrar o Jboss, ele simplesmente não encerra, fica parado na linha “Stopping service jboss.web” e para finalizá-lo tenho que “matar” a instância da JVM que está no task mngr do Windows, isso pode ser por causa da porta que está aberta aguardando conexões, eu gostaria de encerrar o Jboss normalmente, resumindo, alguém pode me dar uma dica de como melhorar esse socket server e essa Thread ?
Obrigado !