Ondrej Zizka [
http://community.jboss.org/people/ozizka%40redhat.com] created the
document:
"EJB 3.0 and env-entry injection"
To view the document, visit:
http://community.jboss.org/docs/DOC-15944
--------------------------------------------------------------
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>
@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(a)</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(a)</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 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:
http://community.jboss.org/thread/106082 EJB 3.0 and env-entry injection
--------------------------------------------------------------
Comment by going to Community
[
http://community.jboss.org/docs/DOC-15944]
Create a new document in EJB 3.0 at Community
[
http://community.jboss.org/choose-container!input.jspa?contentType=102&am...]