Generally speaking, string literals should be replaced with string constants in source code. This rule also holds when it comes to annotation-based resource injections.

For field or setter injections, any string constants can be declared in the enclosing class. The following example shows how to declare an env-entry in web.xml and inject it to a servlet class.
public static final String ADMIN_EMAIL = "adminEmail";

@Resource(name=ADMIN_EMAIL)
private String adminEmail;

<env-entry>
<description>admin email</description>
<env-entry-name>adminEmail</env-entry-name>
<env-entry-value>admin@example.x</env-entry-value>
</env-entry>
The name attribute is mandatory and used to match this injection to the appropriate env-entry in web.xml. This env-entry can be injected into several other classes, and therefore it is desirable to declare its name as a constant. This string constant may also reside in a separate class (e.g., a Constants class, utility class, or even some interface), depending on how it is used.

For type-level injections, these string constants must be declared in a separate class in order to be referenced in type-level annotations. This is probably because any field declarations have not be parsed when type-level annotations in the same class are processed. The follwoing example shows how to inject a stateful EJB reference at a servlet class level.
import static test.Constants.FOO_EJB_NAME;
import static test.Constants.FOO_EJB_REF_NAME;

@EJB(name=FOO_EJB_REF_NAME, beanName=FOO_EJB_NAME, beanInterface=FooBean.class)
public class Servlet2 extends HttpServlet {...}
In the above injection, beanName is optional only if there is only one EJB with business interface FooBean, and hence no ambiguity in mapping the EJB reference to target EJB. name and beanInterface attributes are always required when the @EJB injection is used at type level.
0

Add a comment

Labels
Archive
Popular Posts
Popular Posts
  • Two JVM options are often used to tune JVM heap size: -Xmx for maximum heap size, and -Xms for initial heap size. Here are some common mi...
  • Simple enum . The ; after the last element is optional, when this is the end of enum definition. public enum Color { WHITE, BLACK, RED, ...
  • How to set project classpath in Eclipse and NetBeans are similar: just right-click the project name, choose Properties to bring up the Prope...
  • Let's say I need to spawn multiple threads to do the work, and continue to the next step only after all of them complete. I will need t...
  • This is a sample web.xml based on Servlet 2.5 (part of Java EE 5) that declares common elements. All top-level elements are optional, and c...
  • The default string value for java enum is its face value, or the element name. However, you can customize the string value by overriding toS...
  • Prior to JDK 6, we can check if a string is empty in 2 ways: if(s != null && s.length() == 0) if(("").equals(s)) Checking ...
  • When writing javadocs, IntelliJ automatically adds a closing tag for html elements. For instance, after typing <lt>, it automaticaly a...
  • StringBuilder was introduced in JDK 1.5. What's the difference between StringBuilder and StringBuffer? According to javadoc , StringBu...
  • With array, we can easily declare and initialize it at the same time: String[] favorites = new String[] {"EJB", "JPA", ...
Loading