Richard Zowalla created TOMEE-4715:
--------------------------------------

             Summary: TomEE embedded application runner does not inject 
@Resource into the @Application descriptor
                 Key: TOMEE-4715
                 URL: https://issues.apache.org/jira/browse/TOMEE-4715
             Project: TomEE
          Issue Type: Bug
            Reporter: Richard Zowalla


Fields annotated with {{@Resource}} in the {{@Application}} descriptor class 
are not injected if the application is started via 
{{TomEEEmbeddedApplicationRunner}} \({{@RunWithTomEEEmbedded}}, 
{{TomEEEmbeddedSingleRunner}}\).

{code:java}
@Application
@Classes\(cdi = true, context = "app"\)
public class TheApp {{code}
@Resource
private DataSource dataSource; // stays null

@Configuration
public Properties config() {
    final Properties p = new Properties();
    p.put("db", "new://Resource?type=DataSource");
    p.put("db.JdbcDriver", "org.hsqldb.jdbcDriver");
    p.put("db.JdbcUrl", "jdbc:hsqldb:mem:test");
    return p;
}
{code}

}
{code}

h3. Cause

{{TomEEEmbeddedApplicationRunner#composerInject\(...\)}} only uses 
{{OWBInjector}} and handles the runner specific annotations \({{@RandomPort}}, 
{{@Application}}, {{@LifecycleTask}}, {{@Args}}\). Jakarta EE resource 
injection is not processed for the descriptor or test instance.

h3. Expected behaviour

The same descriptor works with {{ApplicationComposer}} 
\({{@RunWithApplicationComposer}}\), where {{@Resource}} is injected. As 
TOMEE\-4707 removes the embedded HTTP server, tests using 
{{@EnableServices\("jaxrs"\)}} need to move to TomEE embedded, so both runners 
should behave the same here.

h3. Workaround

Look up the resource via the container JNDI context:

{code:java}
SystemInstance.get\(\).getComponent\(ContainerSystem.class\).getJNDIContext\(\).lookup\("openejb/Resource/db"\);
{code}

Seen with 11.0.0\-SNAPSHOT.





--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to