Я использую Swarm Wildfly для развертывания этого приложения. В основном я создаю приложение с поддержкой websocket.Inject EJB в классе @serverEndpoint приводит к ошибке NullPointerException
Я хотел бы ввести один синглтон, который будет запущен при запуске, который изменит результат переменной.
После доступа к ссылке «/ rafflethis» пользователь сможет увидеть результат, который будет отправлен через сеанс.
Результатом является то, что roll
переменная нуль
Это класс
@Singleton
@Startup
@ConcurrencyManagement(ConcurrencyManagementType.CONTAINER)
public class runMe implements RaffleManager{
private static final Logger LOGGER = Logger.getLogger(runMe.class.getName());
private static String result;
@PostConstruct
public void onStartup() {
System.out.println("Initialization success.");
}
@Schedule(second = "*/10", minute = "*", hour = "*", persistent = false)
public void run() throws Exception{
int i = 0;
while (true) {
Thread.sleep(1000L);
result = UUID.randomUUID().toString().toUpperCase();
i++;
LOGGER.log(Level.INFO, "i : " + i);
}
}
public String getResult() {
return result;
}
}
интерфейс
public interface RaffleManager {
String getResult();
}
И "/ rafflethis"
@ServerEndpoint("/rafflethis")
public class RaffleThis implements Serializable {
@EJB
RaffleManager roll;
private static final Set<Session> sessions = Collections.synchronizedSet(new HashSet<Session>());
private static void sendMessageToAll(String message) {
for (Session s : sessions) {
try {
s.getBasicRemote().sendText(message);
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
@OnOpen
public void monitorLuckyDip(Session session) throws Exception {
sessions.add(session);
while(true) {
sendMessageToAll(roll.getResult());
}
}
}
Любое руководство, с чего я должен от головы? Благодаря!
Да, я знаю класс runMe, я просто слишком ленив, чтобы переименовать его. Спасибо за ответ.В будущем я увижу, что проблема может быть решена с помощью этого метода. Я нашел решение, на которое я отвечу ниже. Спасибо за вашу помощь и ответ! –