Listeners - Listener iniciando um socket - como melhorar isso?

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 ! :wink: