Я невероятно новичок в разработке Java EE и пытаюсь создать прослушиватель UDP в GlassFish. Это всегда должно быть запущено. Поэтому я верю, что бин Singleton выполнит эту задачу.
Вот проблема. Код работает, но он вызывает сбои GlassFish. Несмотря на развертывание приложения, страница администратора GlassFish просто зависает. Я также не могу получить доступ к другим элементам развернутого приложения WAR, что наводит меня на мысль, что существует проблема с многопоточностью. Тем не менее, я всегда предполагал, что у EJB нет проблем с многопоточностью. Я сделал это в Eclipse.
@Singleton
@LocalBean
public class UDPListener {
public UDPListener()
{
DatagramSocket datagramSocket = null;
try
{
datagramSocket = new DatagramSocket(9090);
} catch (SocketException e) { e.printStackTrace(); }
byte[] buffer = new byte[100];
// Create a datagram packet.
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while(true)
{
// Receive the packet.
try {
datagramSocket.receive(packet);
} catch (IOException e) { e.printStackTrace(); }
buffer = packet.getData();
// Print the data:
System.out.println(new String(buffer));
}
}
}
Есть что-то, что я пропускаю? Я просматривал учебник по Java EE 6, и в нем упоминается кое-что о параллельном доступе. Однако я не уверен, что это проблема.
Спасибо
РЕДАКТИРОВАТЬ: Просто чтобы добавить больше информации, мне нужно по сути создать Бин, который будет всегда запускать, прослушивать и отвечать на входящие UDP-пакеты. Как мне создать экземпляр этого компонента таким образом, чтобы он не уничтожал основной поток?