]
Tomaz Cerar updated WFLY-4251:
------------------------------
Component/s: EE
EJB
@DependsOn not adherent to Java EE 7 spec
-----------------------------------------
Key: WFLY-4251
URL:
https://issues.jboss.org/browse/WFLY-4251
Project: WildFly
Issue Type: Bug
Components: EE, EJB
Affects Versions: 8.2.0.Final
Reporter: Matteo Mortari
Assignee: Jason Greene
Priority: Minor
*Premise*: actually, I'm leveraging this misalignment for implementing a
functionality; however, I don't believe is correct behavior accordingly to Java EE 7
specs, hence reporting it.
h5. Executive summary
With reference to attached reproducer, and example scenario below; the {{@DependsOn}}
annotation on wildfly 8.2.0.Final works also against Stateless EJB, but accordingly to
Java EE 7 specs {{@DependsOn}} annotation:
{quote}
Used to express an initialization dependency between singleton components.
{quote}
h5. Detailed description
Assume you have a {{@Singleton}} and while on {{@PreDestroy}} you need to persist some
entities, which are normally done through a Stateless EJB serving as a
"Controller"/"DAO", example:
{code:java}
@Singleton
@Startup
//@DependsOn(value={"AStatelessEJB"})
public class SingletonEJB {
private static final Logger LOG = LoggerFactory.getLogger(SingletonEJB.class);
@EJB
private AStatelessEJB sl;
@PostConstruct
public void init() {
LOG.info("SingletonEJB is here.");
}
@PreDestroy
public void shutdown() {
LOG.info("SingletonEJB is about to shutdown...");
sl.dummyPersist(); // line #30
}
}
{code}
with the {{@DependsOn}} annotation currently commented, and where:
{code:java}
@Stateless(name="AStatelessEJB", mappedName="AStatelessEJB")
public class AStatelessEJB {
private static final Logger LOG = LoggerFactory.getLogger(AStatelessEJB.class);
public void dummyPersist() {
LOG.info("called dummyPersist().");
}
}
{code}
just for simulating a "controller"/"DAO" example as a Stateless EJB.
Invoking wildfly shutdown will produce the following stacktrace:
{noformat}
19:26:34,570 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly
8.2.0.Final "Tweek" started in 98671ms - Started 347 of 399 services (107
services are lazy, passive or on-demand)
19:26:45,136 INFO [org.wildfly.extension.undertow] (MSC service thread 1-7) JBAS017535:
Unregistered web context: /wildfly82-dependson
...
19:26:45,213 INFO [com.acme.wildfly82_dependson.SingletonEJB] (ServerService Thread Pool
-- 24) SingletonEJB is about to shutdown...
...
19:26:45,213 ERROR [org.jboss.as.ejb3.invocation] (ServerService Thread Pool -- 24)
JBAS014134: EJB Invocation failed on component AStatelessEJB for method public void
com.acme.wildfly82_dependson.AStatelessEJB.dummyPersist():
org.jboss.as.ejb3.component.EJBComponentUnavailableException:
JBAS014559: Invocation cannot proceed as component is shutting down
...
at com.acme.wildfly82_dependson.AStatelessEJB$$$view2.dummyPersist(Unknown Source)
[classes:]
at com.acme.wildfly82_dependson.SingletonEJB.shutdown(SingletonEJB.java:30) [classes:]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) [rt.jar:1.8.0_05]
{noformat}
However, with the annotation un-commented and active:
{noformat}
19:21:44,713 INFO [org.jboss.as] (Controller Boot Thread) JBAS015874: WildFly
8.2.0.Final "Tweek" started in 109462ms - Started 347 of 399 services (107
services are lazy, passive or on-demand)
...
19:22:17,908 INFO [org.wildfly.extension.undertow] (MSC service thread 1-3) JBAS017535:
Unregistered web context: /wildfly82-dependson
19:22:17,971 INFO [org.wildfly.extension.undertow] (MSC service thread 1-8) JBAS017532:
Host default-host stopping
...
19:22:18,017 INFO [com.acme.wildfly82_dependson.SingletonEJB] (ServerService Thread Pool
-- 68) SingletonEJB is about to shutdown...
19:22:18,033 INFO [com.acme.wildfly82_dependson.AStatelessEJB] (ServerService Thread
Pool -- 68) called dummyPersist().
...
19:22:18,236 INFO [org.jboss.as.server.deployment] (MSC service thread 1-4) JBAS015877:
Stopped deployment wildfly82-dependson.war (runtime-name: wildfly82-dependson.war) in
334ms
{noformat}
But I'm puzzled because as stated above the Java EE specs javadoc describe the
{{@DependsOn}} annotation as _Used to express an initialization dependency between
singleton components._ , therefore although I'm happy it actually works, I'm
puzzled about the misalignments, hence reporting it.