package org.acme;
public class MyClass {
@Resource(name="providerURL") String field;
}
<env-entry>
<env-entry-name>providerURL</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>ldap://localhost:389/</env-entry-value>
</env-entry>
OR
package org.acme;
public class MyClass {
@Resource String field;
}
<env-entry>
<env-entry-name>org.acme.MyClass/field</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>ldap://localhost:389/</env-entry-value>
</env-entry>
OR
package org.acme;
public class MyClass {
String field;
}
<env-entry>
<env-entry-name>providerUrl</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>ldap://localhost:389/</env-entry-value>
<injection-target>
<injection-target-class>org.acme.MyClass</injection-target>
<injection-target-name>field</injection-target-name>
</injection-target>
</env-entry>
Overriding defaults:
@Resource int maxExemptions = 4; <env-entry> <env-entry-name>maxExemptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>15</env-entry-value> </env-entry>
If you download the entire source from CVS (jboss-head), there are examples in the ejb3 JUnit tests. Take a look at the enventry test. Here is an example bean and ejb-jar.xml
@Stateless(name="TestEnvEntry")
@Remote(TestEnvEntry.class)
@RemoteBinding(jndiBinding="TestEnvEntry")
public class TestEnvEntryBean implements TestEnvEntry
{
private static final Logger log = Logger.getLogger(TestEnvEntryBean.class);
@Resource(name="maxExceptions") private int maxExceptions = 4;
@Resource private int numExceptions = 3;
private int minExceptions = 1;
public int getMaxExceptions() { return maxExceptions; }
public int getNumExceptions() { return numExceptions; }
public int getMinExceptions() { return minExceptions; }
}
<ejb-jar> <display-name>EnvEntry Tests</display-name> <enterprise-beans> <ejb-name>TestEnvEntry</ejb-name> <env-entry> <env-entry-name>maxExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>15</env-entry-value> </env-entry> <env-entry> <env-entry-name>minExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>5</env-entry-value> <injection-target> <injection-target-class>org.jboss.ejb3.test.enventry.TestEnvEntryBean</injection-target-class> <injection-target-name>minExceptions</injection-target-name> </injection-target> </env-entry> <env-entry> <env-entry-name>org.jboss.ejb3.test.enventry.TestEnvEntryBean/numExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>10</env-entry-value> </env-entry> <ejb-name>ExtendedTestEnvEntry</ejb-name> <env-entry> <env-entry-name>maxExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>14</env-entry-value> </env-entry> <env-entry> <env-entry-name>minExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>6</env-entry-value> <injection-target> <injection-target-class>org.jboss.ejb3.test.enventry.ExtendedTestEnvEntryBean</injection-target-class> <injection-target-name>minExceptions</injection-target-name> </injection-target> </env-entry> <env-entry> <env-entry-name>org.jboss.ejb3.test.enventry.ExtendedTestEnvEntryBean/numExceptions</env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>11</env-entry-value> </env-entry> </enterprise-beans> </ejb-jar>
--------------
Here is an example.
All three work but I have shown the first 2 in this example
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee ../../../testapp/ejb-jar_3_0.xsd "> <enterprise-beans> <session> <ejb-name>com.suresh.ejb.test.HelloBean</ejb-name> <remote>com.suresh.ejb.test.Hello</remote> <ejb-class>com.suresh.ejb.test.HelloBean</ejb-class> <session-type>Stateless</session-type> <transaction-type>Container</transaction-type> <env-entry> <env-entry-name>com.suresh.ejb.test.HelloBean/urls</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>@ldap.url@</env-entry-value> </env-entry> <env-entry> <env-entry-name>username</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>@user.name@</env-entry-value> </env-entry> <env-entry> <env-entry-name>password</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>what</env-entry-value> </env-entry> <env-entry> <env-entry-name>com.suresh.ejb.test.HelloBean/location</env-entry-name> <env-entry-type>java.lang.String</env-entry-type> <env-entry-value>Australia</env-entry-value> </env-entry> <resource-ref> <res-ref-name>jdbc/user</res-ref-name> <res-type>javax.sql.Datasource</res-type> <res-auth>Container</res-auth> <mapped-name>java:UserDB</mapped-name> </resource-ref> </session> </enterprise-beans> </ejb-jar>
package com.suresh.ejb.test;
import java.sql.Connection;
import java.sql.ResultSet;
import javax.annotation.Resource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
import com.suresh.ejb.test.Hello;
@javax.ejb.Stateless(name="com.suresh.ejb.test.HelloBean")
@javax.ejb.TransactionAttribute (value=javax.ejb.TransactionAttributeType.SUPPORTS)
@javax.annotation.Resource(name="jdbc/user",
type=DataSource.class,
authenticationType=javax.annotation.Resource.AuthenticationType.CONTAINER,
mappedName="java:UserDB")
public class HelloBean implements Hello {
@Resource private String urls;
@Resource(name="username") private String provider;
@Resource(name="password") private String pwd;
@Resource private String location;
public String greet() {
return urls + " " + location + " " + pwd + " " + provider + " at " + greet1();
}
// Example of a datasource.
public String greet1() {
String data = null;
Connection c = null;
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp.ejb3/env/jdbc/user");
ResultSet rs = ds.getConnection().createStatement().executeQuery("select sysdate from dual");
while (rs.next()) {
data = rs.getString(1);
}
} catch (Exception e) {
System.err.println(e);
e.printStackTrace();
} finally {
try {
c.close();
} catch (Exception e) {
}
}
return data;
}
}
Hello.java
package comsuresh.ejb.test;
import javax.ejb.Remote;
@Remote
public interface Hello {
public String greet();
}
This article was generated from the following discussion: EJB 3.0 and env-entry injection
Comments