Jakarta ee ManagedTaskListener don';行不通

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

我打算为用Java开发的JavaEE应用程序实现一个异步测试启动器,但我的ManagedTaskListener实现不“侦听”事件

我有这个测试实现:

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));