[jboss-jira] [JBoss JIRA] (WFLY-4251) @DependsOn not adherent to Java EE 7 spec

Matteo Mortari (JIRA) issues at jboss.org
Wed Jan 14 13:49:49 EST 2015


Matteo Mortari created WFLY-4251:
------------------------------------

             Summary: @DependsOn not adherent to Java EE 7 spec
                 Key: WFLY-4251
                 URL: https://issues.jboss.org/browse/WFLY-4251
             Project: WildFly
          Issue Type: Bug
    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.



--
This message was sent by Atlassian JIRA
(v6.3.11#6341)


More information about the jboss-jira mailing list