Jakarta ee ManagedTaskListener don';行不通
我打算为用Java开发的JavaEE应用程序实现一个异步测试启动器,但我的ManagedTaskListener实现不“侦听”事件 我有这个测试实现:Jakarta ee ManagedTaskListener don';行不通,jakarta-ee,ejb,executorservice,Jakarta Ee,Ejb,Executorservice,我打算为用Java开发的JavaEE应用程序实现一个异步测试启动器,但我的ManagedTaskListener实现不“侦听”事件 我有这个测试实现: package com.co.seti.sima.commons.executor; import java.util.concurrent.Callable; import java.util.concurrent.Future; import javax.enterprise.concurrent.ManagedExecutorServi
package com.co.seti.sima.commons.executor;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import javax.enterprise.concurrent.ManagedExecutorService;
import javax.enterprise.concurrent.ManagedTaskListener;
public class TestLauncher implements Callable<ResultadoPruebaDTO>, ManagedTaskListener {
/* (non-Javadoc)
* @see javax.enterprise.concurrent.ManagedTaskListener#taskAborted(java.util.concurrent.Future, javax.enterprise.concurrent.ManagedExecutorService, java.lang.Object, java.lang.Throwable)
*/
public void taskAborted(Future<?> arg0, ManagedExecutorService arg1, Object arg2, Throwable arg3) {
// TODO Auto-generated method stub
System.out.println("Se obortó la ejecucion");
}
/* (non-Javadoc)
* @see javax.enterprise.concurrent.ManagedTaskListener#taskDone(java.util.concurrent.Future, javax.enterprise.concurrent.ManagedExecutorService, java.lang.Object, java.lang.Throwable)
*/
public void taskDone(Future<?> arg0, ManagedExecutorService arg1, Object arg2, Throwable arg3) {
// TODO Auto-generated method stub
System.out.println("Tark done");
}
/* (non-Javadoc)
* @see javax.enterprise.concurrent.ManagedTaskListener#taskStarting(java.util.concurrent.Future, javax.enterprise.concurrent.ManagedExecutorService, java.lang.Object)
*/
public void taskStarting(Future<?> arg0, ManagedExecutorService arg1, Object arg2) {
// TODO Auto-generated method stub
System.out.println("Starting task");
}
/* (non-Javadoc)
* @see javax.enterprise.concurrent.ManagedTaskListener#taskSubmitted(java.util.concurrent.Future, javax.enterprise.concurrent.ManagedExecutorService, java.lang.Object)
*/
public void taskSubmitted(Future<?> arg0, ManagedExecutorService arg1, Object arg2) {
// TODO Auto-generated method stub
System.out.println("Task submit");
}
/* (non-Javadoc)
* @see java.util.concurrent.Callable#call()
*/
public String call() throws Exception {
return "Task Executed";
}
}
执行开始和结束都很好,但侦听器不记录事件
我不明白,请帮助。您必须使用ManagedTaskListener和ManagedTask实现一个类。此clase可以是可调用的或可运行的
private static class DukeMessage implements ManagedTask, ManagedTaskListener, Callable<Long> {
private final ChatMessage cmsg;
private final Session session;
public DukeMessage(ChatMessage cmsg, Session session) {
this.cmsg = cmsg;
this.session = session;
}
public synchronized void sendAll(Session session, Object msg) {
try {
for (Session s : session.getOpenSessions()) {
if (s.isOpen()) {
s.getBasicRemote().sendObject(msg);
logger.log(Level.INFO, "Sent: {0}", msg.toString());
}
}
} catch (IOException | EncodeException e) {
logger.log(Level.INFO, e.toString());
}
}
@Override
public ManagedTaskListener getManagedTaskListener() {
return this;
}
@Override
public Map<String, String> getExecutionProperties() {
return new HashMap<>();
}
@Override
public Long call() throws Exception {
try {
String resp = "Respuesta de Duke!";
//botbean.respond(cmsg.getMessage());
sendAll(session, new ChatMessage("Duke", cmsg.getName(), resp));
} catch (Exception ex) {
System.out.println(ex);
}
return 0L;
}
//@Override
//public void run() {
//try {
//String resp = "Respuesta de Duke!";
//botbean.respond(cmsg.getMessage());
//sendAll(session, new ChatMessage("Duke", cmsg.getName(), //resp));
//} catch (Exception ex) {
//System.out.println(ex);
//}
//}
@Override
public void taskSubmitted(Future<?> future, ManagedExecutorService executor, Object task) {
System.out.println("taskSubmitted");
}
@Override
public void taskAborted(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
System.out.println("taskAborted");
}
@Override
public void taskDone(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
System.out.println("taskDone");
}
@Override
public void taskStarting(Future<?> future, ManagedExecutorService executor, Object task) {
System.out.println("taskStarting");
}
}
或
为什么您的任务要实现
ManagedTaskListener
?我认为它应该实现ManagedTask
,根据doc“任务可以选择提供一个ManagedTaskListener,通过使用ManagedTask接口接收生命周期事件的通知”。尝试为侦听器创建第二个类,并使您的TestLauncher
实现。@Geinmachi您应该将其作为一个答案。侦听器是否适用于invokeAll()?。或仅用于提交和执行。它不适用于invokeAll(),它只适用于提交和执行。不适合我。
private static class DukeMessage implements ManagedTask, ManagedTaskListener, Callable<Long> {
private final ChatMessage cmsg;
private final Session session;
public DukeMessage(ChatMessage cmsg, Session session) {
this.cmsg = cmsg;
this.session = session;
}
public synchronized void sendAll(Session session, Object msg) {
try {
for (Session s : session.getOpenSessions()) {
if (s.isOpen()) {
s.getBasicRemote().sendObject(msg);
logger.log(Level.INFO, "Sent: {0}", msg.toString());
}
}
} catch (IOException | EncodeException e) {
logger.log(Level.INFO, e.toString());
}
}
@Override
public ManagedTaskListener getManagedTaskListener() {
return this;
}
@Override
public Map<String, String> getExecutionProperties() {
return new HashMap<>();
}
@Override
public Long call() throws Exception {
try {
String resp = "Respuesta de Duke!";
//botbean.respond(cmsg.getMessage());
sendAll(session, new ChatMessage("Duke", cmsg.getName(), resp));
} catch (Exception ex) {
System.out.println(ex);
}
return 0L;
}
//@Override
//public void run() {
//try {
//String resp = "Respuesta de Duke!";
//botbean.respond(cmsg.getMessage());
//sendAll(session, new ChatMessage("Duke", cmsg.getName(), //resp));
//} catch (Exception ex) {
//System.out.println(ex);
//}
//}
@Override
public void taskSubmitted(Future<?> future, ManagedExecutorService executor, Object task) {
System.out.println("taskSubmitted");
}
@Override
public void taskAborted(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
System.out.println("taskAborted");
}
@Override
public void taskDone(Future<?> future, ManagedExecutorService executor, Object task, Throwable exception) {
System.out.println("taskDone");
}
@Override
public void taskStarting(Future<?> future, ManagedExecutorService executor, Object task) {
System.out.println("taskStarting");
}
}
mes.submit(new DukeMessage(cmsg, session));
mes.execute(new DukeMessage(cmsg, session));