Methods Summary |
---|
protected com.sun.enterprise.deployment.EjbDescriptor | createEjbDescriptor(java.lang.String elementName, com.sun.enterprise.deployment.annotation.AnnotationInfo ainfo)Create a new EjbDescriptor for a given elementName and AnnotationInfo.
AnnotatedElement ae = ainfo.getAnnotatedElement();
EjbMessageBeanDescriptor newDescriptor = new EjbMessageBeanDescriptor();
Class ejbClass = (Class)ae;
newDescriptor.setName(elementName);
newDescriptor.setEjbClassName(ejbClass.getName());
return newDescriptor;
|
protected java.lang.String | getAnnotatedName(java.lang.annotation.Annotation annotation)Return the name attribute of given annotation.
MessageDriven mdAn = (MessageDriven)annotation;
return mdAn.name();
|
public java.lang.Class | getAnnotationType()
return MessageDriven.class;
|
protected boolean | isValidEjbDescriptor(com.sun.enterprise.deployment.EjbDescriptor ejbDesc, java.lang.annotation.Annotation annotation)Check if the given EjbDescriptor matches the given Annotation.
return EjbMessageBeanDescriptor.TYPE.equals(ejbDesc.getType());
|
protected com.sun.enterprise.deployment.annotation.HandlerProcessingResult | setEjbDescriptorInfo(com.sun.enterprise.deployment.EjbDescriptor ejbDesc, com.sun.enterprise.deployment.annotation.AnnotationInfo ainfo)Set Annotation information to Descriptor.
This method will also be invoked for an existing descriptor with
annotation as user may not specific a complete xml.
MessageDriven mdAn = (MessageDriven)ainfo.getAnnotation();
Class ejbClass = (Class)ainfo.getAnnotatedElement();
EjbMessageBeanDescriptor ejbMsgBeanDesc =
(EjbMessageBeanDescriptor)ejbDesc;
HandlerProcessingResult procResult =
setMessageListenerInterface(
mdAn, ejbMsgBeanDesc, ejbClass, ainfo);
doDescriptionProcessing(mdAn.description(), ejbMsgBeanDesc);
doMappedNameProcessing(mdAn.mappedName(), ejbMsgBeanDesc);
for (ActivationConfigProperty acProp : mdAn.activationConfig()) {
EnvironmentProperty envProp = new EnvironmentProperty(
acProp.propertyName(), acProp.propertyValue(), "");
// with empty description
// xml override
if (ejbMsgBeanDesc.getActivationConfigValue(envProp.getName()) == null) {
ejbMsgBeanDesc.putActivationConfigProperty(envProp);
}
}
return procResult;
|
private com.sun.enterprise.deployment.annotation.HandlerProcessingResult | setMessageListenerInterface(javax.ejb.MessageDriven mdAn, com.sun.enterprise.deployment.EjbMessageBeanDescriptor msgEjbDesc, java.lang.Class ejbClass, com.sun.enterprise.deployment.annotation.AnnotationInfo ainfo)
String intfName = null;
// If @MessageDriven contains message listener interface, that takes
// precedence. Otherwise, the message listener interface is derived
// from the implements clause.
if( mdAn.messageListenerInterface() != Object.class ) {
intfName = mdAn.messageListenerInterface().getName();
} else {
for(Class next : ejbClass.getInterfaces()) {
if( !excludedFromImplementsClause(next) ) {
if( intfName == null ) {
intfName = next.getName();
} else {
EjbBundleDescriptor currentBundle =
((EjbBundleContext)ainfo.getProcessingContext().getHandler()).getDescriptor();
log(Level.SEVERE, ainfo,
localStrings.getLocalString(
"enterprise.deployment.annotation.handlers.ambiguousimplementsclausemdb",
"Implements clause for 3.x message driven bean class {0} in {1} declares more than one potential message-listener interface. In this case, the @MessageDriven.messageListenerInterface() attribute must be used to specify the message listener interface.",
new Object[] { ejbClass,
currentBundle.getModuleDescriptor().getArchiveUri() }));
return getDefaultFailedResult();
}
}
}
}
// if it's still null, check whether it's defined through
// deployment descriptor
// note: the descriptor class has a default value
// for the interface: javax.jms.MessageListener
// so intfName after this set, will never be null
if (intfName == null) {
intfName = msgEjbDesc.getMessageListenerType();
}
msgEjbDesc.setMessageListenerType(intfName);
return getDefaultProcessedResult();
|