gardellajp [https://community.jboss.org/people/gardellajp] created the discussion
"LocalTaskService don't remove listeners, it is a bug?" To view the discussion, visit: https://community.jboss.org/message/721802#721802 -------------------------------------------------------------- Hi, Recently I've found that when use LocalTaskService don't remove the listeners that are created in: public void registerForEvent(EventKey key, boolean remove, EventResponseHandler responseHandler) { SimpleEventTransport transport = new SimpleEventTransport(taskServiceSession, responseHandler, remove); taskServiceSession.getService().getEventKeys().register(key, transport); } Notice that a client of this method can't remove it later, becouse the method return void. This method is called by SyncWSHumanTaskHandler.connect() private void registerTaskEvents() { TaskCompletedHandler eventResponseHandler = new TaskCompletedHandler(); TaskEventKey key = new TaskEventKey(TaskCompletedEvent.class, -1); client.registerForEvent(key, false, eventResponseHandler); key = new TaskEventKey(TaskFailedEvent.class, -1); client.registerForEvent(key, false, eventResponseHandler); key = new TaskEventKey(TaskSkippedEvent.class, -1); client.registerForEvent(key, false, eventResponseHandler); } See that the listeners aren't save to remove later. If don't remove the listeners, they are invoqued later. I fixed this with an update of LocalTaskService. When register the events, I save each listener to then dispose it. public void registerForEvent(EventKey key, boolean remove, EventResponseHandler responseHandler) { SimpleEventTransport transport = new SimpleEventTransport(taskServiceSession, responseHandler, remove); taskServiceSession.getService().getEventKeys().register(key, transport); //ADDED eventsRegistered.add(new KeyAndTransport(key, transport)); //END ADDED } The class KeyAndTransport have two instances variables, the key and the transport. The instance variable eventsRegistered is a collection. Then, when is disconnected, I remove the listeners. public void disconnect() throws Exception { // do nothing // ADDED removeListeners(); // END ADDED } private synchronized void removeListeners() { for (KeyAndTransport k : eventsRegistered) { taskServiceSession.getService().getEventKeys().unregister(k.getKey(), k.getTransport()); } eventsRegistered.clear(); } I attach the complete file. I want to know if this is a bug or a miss use of this clasess. I have problems when use more than one session, with this change, work well with multiple sessions. Note that in my project I open and close session in each request, so when I close the session (and other resources) I can't remove the listener with the actual API. Juan -------------------------------------------------------------- Reply to this message by going to Community [https://community.jboss.org/message/721802#721802] Start a new discussion in jBPM at Community [https://community.jboss.org/choose-container!input.jspa?contentType=1&containerType=14&container=2034]
_______________________________________________ jboss-user mailing list [email protected] https://lists.jboss.org/mailman/listinfo/jboss-user
