Hi Marina,
a) No. WebSphere also allows a timer to be canceled by a non-owning bean.
This would be an incompatible change for our implementation. +1 for
dropping the rule in getAllTimers().
b) WebSphere does not allow a non-EJB caller to invoke cancel(). The
"Operations Allowed in the Methods of a ... Bean " tables indicate when
Timer methods can be called. Per spec, the container throws an
IllegalStateException if a method is invoked outside of the permitted
states. I haven't found anything that explicitly covers calls outside of
a bean, though. In any case, it does seem like an unnecessary restriction
to prevent invocation of Timer methods outside a bean.
-Jeremy
From: Marina Vatkina <marina.vatkina_at_oracle.com>
To: jsr345-experts_at_ejb-spec.java.net,
Date: 12/04/2012 01:03 AM
Subject: [jsr345-experts] EJB_SPEC-71 - Clarify rules on
Timer.cancel
Experts,
Please look at
http://java.net/jira/browse/EJB_SPEC-71 - which is a
separate issue on Timer.cancel mismatch in the spec.
Please let me know, if you think that:
a) A timer can be cancelled only by the bean that owns it (as in
getAllTimers() rule)
Or
b1) A timer can be cancelled by calling Timer.cancel() (i.e. the rule in
getAllTimers() should be removed)
b2) Timer can be cancelled by a non-EJB caller (i.e. the spec should
remove references to a bean or a Bean Provider when describing the timer
cancellation).
Depending on the outcome of your vote, I'll update the spec one way or
the other.
As a note: GlassFish (RI) allows a non-owning bean (I didn't check a
servlet) to cancel a timer by calling its cancel() method.
thanks,
-marina