use of javax.ejb.LocalHome in project wildfly by wildfly.
the class HomeViewMergingProcessor method processComponentConfig.
private void processComponentConfig(final DeploymentUnit deploymentUnit, final EEApplicationClasses applicationClasses, final Module module, final DeploymentReflectionIndex deploymentReflectionIndex, final SessionBeanComponentDescription description) throws DeploymentUnitProcessingException, ClassNotFoundException {
String home = null;
String localHome = null;
//first check for annotations
if (!MetadataCompleteMarker.isMetadataComplete(deploymentUnit)) {
final EEModuleClassDescription clazz = applicationClasses.getClassByName(description.getComponentClassName());
//we only care about annotations on the bean class itself
if (clazz != null) {
final ClassAnnotationInformation<LocalHome, String> localAnnotations = clazz.getAnnotationInformation(LocalHome.class);
if (localAnnotations != null) {
if (!localAnnotations.getClassLevelAnnotations().isEmpty()) {
localHome = localAnnotations.getClassLevelAnnotations().get(0);
if (description.getEjbLocalView() == null) {
//If the local home is specified via annotation then the corresponding business interface is implied
//by the signature of the create method
//See EJB 3.1 21.4.5
final String localClassName = this.inferLocalInterfaceFromLocalHome(localHome, module, deploymentReflectionIndex, description);
description.addEjbLocalObjectView(localClassName);
}
}
}
final ClassAnnotationInformation<RemoteHome, String> remoteAnnotations = clazz.getAnnotationInformation(RemoteHome.class);
if (remoteAnnotations != null) {
if (!remoteAnnotations.getClassLevelAnnotations().isEmpty()) {
home = remoteAnnotations.getClassLevelAnnotations().get(0);
if (description.getEjbRemoteView() == null) {
//If the remote home is specified via annotation then the corresponding business interface is implied
//by the signature of the create method
//See EJB 3.1 21.4.5
final String remoteClassName = this.inferRemoteInterfaceFromHome(home, module, deploymentReflectionIndex, description);
description.addEjbObjectView(remoteClassName);
}
}
}
}
}
//now allow the annotations to be overridden by the DD
final SessionBeanMetaData descriptorData = description.getDescriptorData();
if (descriptorData != null) {
if (descriptorData.getHome() != null) {
home = descriptorData.getHome();
}
if (descriptorData.getLocalHome() != null) {
localHome = descriptorData.getLocalHome();
}
}
if (localHome != null) {
description.addLocalHome(localHome);
}
if (home != null) {
description.addRemoteHome(home);
}
// finally see if we have to infer the remote or local interface from the home/local home views, respectively
if (description.getEjbHomeView() != null && description.getEjbRemoteView() == null) {
final String remoteClassName = this.inferRemoteInterfaceFromHome(description.getEjbHomeView().getViewClassName(), module, deploymentReflectionIndex, description);
description.addEjbObjectView(remoteClassName);
}
if (description.getEjbLocalHomeView() != null && description.getEjbLocalView() == null) {
final String localClassName = this.inferLocalInterfaceFromLocalHome(description.getEjbLocalHomeView().getViewClassName(), module, deploymentReflectionIndex, description);
description.addEjbLocalObjectView(localClassName);
}
}
Aggregations