}
// @Resource annotation
IJAnnotationResource jAnnotationResource = fieldMetaData.getJAnnotationResource();
if (jAnnotationResource != null) {
// Set default name if not present.
jAnnotationResource.setName(getJndiName(jAnnotationResource.getName(), fieldMetaData));
// Update annotation value with data set on the class
updateAnnotationResource(jAnnotationResource);
// Get Mapped Name / lookup Name
String mappedName = jAnnotationResource.getMappedName();
String lookupName = jAnnotationResource.getLookup();
// Use MessageDestinationLink if present !
String messageDestinationLink = jAnnotationResource.getMessageDestinationLink();
if (messageDestinationLink != null) {
try {
mappedName = this.containerJNDIResolver.getMessageDestinationJNDIUniqueName(messageDestinationLink);
} catch (EZBJNDIResolverException e) {
throw new IllegalStateException("No JNDI name found when analyzing @Resource annotation '"
+ jAnnotationResource + "' for the class '" + this.classAnnotationMetadata.getClassName()
+ "'.", e);
}
}
// validate
validateAccessFieldAnnotation(fieldMetaData);
if (SESSION_CONTEXT.equals(itfName)) {
logger.debug("Add injection for @Resource on attribute {0} of class {1} for the type {2}",
fieldMetaData.getFieldName(), this.classAnnotationMetadata.getClassName(), itfName);
// this.attribute = getEasyBeansContext();
mv.visitVarInsn(ALOAD, 0);
addCallGetEasyBeansContext(mv, "javax/ejb/SessionContext");
mv.visitFieldInsn(PUTFIELD, this.classAnnotationMetadata.getClassName(), fieldMetaData.getFieldName(),
"Ljavax/ejb/SessionContext;");
// Define the type (if missing)
jAnnotationResource.setType(SESSION_CONTEXT);
bindResource(jAnnotationResource, mv);
} else if (MESSAGEDRIVEN_CONTEXT.equals(itfName)) {
logger.debug("Add injection for @Resource on attribute {0} of class {1} for the type {2}",
fieldMetaData.getFieldName(), this.classAnnotationMetadata.getClassName(), itfName);
// this.attribute = getEasyBeansContext();
mv.visitVarInsn(ALOAD, 0);
addCallGetEasyBeansContext(mv, "javax/ejb/MessageDrivenContext");
mv.visitFieldInsn(PUTFIELD, this.classAnnotationMetadata.getClassName(), fieldMetaData.getFieldName(),
"Ljavax/ejb/MessageDrivenContext;");
// Define the type (if missing)
jAnnotationResource.setType(MESSAGEDRIVEN_CONTEXT);
bindResource(jAnnotationResource, mv);
} else if (EJBCONTEXT.equals(itfName)) {
logger.debug("Add injection for @Resource on attribute {0} of class {1} for the type {2}",
fieldMetaData.getFieldName(), this.classAnnotationMetadata.getClassName(), itfName);
// this.attribute = getEasyBeansContext();
mv.visitVarInsn(ALOAD, 0);
addCallGetEasyBeansContext(mv, "javax/ejb/EJBContext");
mv.visitFieldInsn(PUTFIELD, this.classAnnotationMetadata.getClassName(), fieldMetaData.getFieldName(),
"Ljavax/ejb/EJBContext;");
// Define the type (if missing)
jAnnotationResource.setType(EJBCONTEXT);
bindResource(jAnnotationResource, mv);
} else if (isEnvEntry(typeInterface)) { // Env-Entry
JndiType type = JAVA_COMP_ENV;
// Lookup name exists ?
if (lookupName == null) {
lookupName = jAnnotationResource.getName();
}
if (lookupName.startsWith("java:")) {
type = JAVA;
}
callAttributeJndi(lookupName, typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), type);
} else if (USERTRANSACTION_ITF.equals(itfName)) {
callAttributeJndi("UserTransaction", typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), JAVA_COMP);
callBindAttributeJndi(jAnnotationResource.getName(), "java:comp/UserTransaction", mv, fieldMetaData);
} else if (URL_ITF.equals(itfName)) {
// Bind object in java:comp/env
callBindLookupURLRef(jAnnotationResource.getName(), mappedName, mv);
// Set attribute
callAttributeJndi(jAnnotationResource.getName(), typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), JAVA_COMP_ENV);
} else if (TIMERSERVICE_ITF.equals(itfName)) {
// Needs to get timerservice with the bean's context.
//this.fieldtimerService = getEasyBeansContext().getInternalTimerService();
mv.visitVarInsn(ALOAD, 0);
addCallGetEasyBeansContext(mv, null);
mv.visitMethodInsn(INVOKEINTERFACE, Type.getInternalName(EZBEJBContext.class), "getInternalTimerService",
"()Ljavax/ejb/TimerService;");
mv.visitFieldInsn(PUTFIELD, this.classAnnotationMetadata.getClassName(), fieldMetaData.getFieldName(),
"Ljavax/ejb/TimerService;");
callBindAttributeJndi(jAnnotationResource.getName(), "java:comp/TimerService", mv, fieldMetaData);
} else if (ORB_ITF.equals(itfName)) {
callAttributeJndi("ORB", typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), JAVA_COMP);
callBindAttributeJndi(jAnnotationResource.getName(), "java:comp/ORB", mv, fieldMetaData);
} else if (lookupName != null && !lookupName.equals("")) {
JndiType type = REGISTRY;
// Lookup name ?
if (lookupName.startsWith("java:")) {
type = JAVA;
}
callAttributeJndi(lookupName, typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), type);
} else if (mappedName != null && !mappedName.equals("")) {
callAttributeJndi(mappedName, typeInterface, mv, fieldMetaData,
this.classAnnotationMetadata.getClassName(), REGISTRY);
callBindAttributeJndi(jAnnotationResource.getName(), mappedName, mv, fieldMetaData);
}
}
// @WebServiceRef annotation