@Override public void deploy(final DeploymentPhaseContext phaseContext) throws DeploymentUnitProcessingException { final DeploymentUnit deploymentUnit = phaseContext.getDeploymentUnit(); if (!IIOPDeploymentMarker.isIIOPDeployment(deploymentUnit)) { return; } final EEModuleDescription moduleDescription = deploymentUnit.getAttachment(Attachments.EE_MODULE_DESCRIPTION); if (!EjbDeploymentMarker.isEjbDeployment(deploymentUnit)) { return; } // a bean-name -> IIOPMetaData map, reflecting the assembly descriptor IIOP configuration. Map<String, IIOPMetaData> iiopMetaDataMap = new HashMap<String, IIOPMetaData>(); final EjbJarMetaData ejbMetaData = deploymentUnit.getAttachment(EjbDeploymentAttachmentKeys.EJB_JAR_METADATA); if (ejbMetaData != null && ejbMetaData.getAssemblyDescriptor() != null) { List<IIOPMetaData> iiopMetaDatas = ejbMetaData.getAssemblyDescriptor().getAny(IIOPMetaData.class); if (iiopMetaDatas != null && iiopMetaDatas.size() > 0) { for (IIOPMetaData metaData : iiopMetaDatas) { iiopMetaDataMap.put(metaData.getEjbName(), metaData); } } } final DeploymentClassIndex classIndex = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.CLASS_INDEX); final DeploymentReflectionIndex deploymentReflectionIndex = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.REFLECTION_INDEX); final Module module = deploymentUnit.getAttachment(org.jboss.as.server.deployment.Attachments.MODULE); if (moduleDescription != null) { for (final ComponentDescription componentDescription : moduleDescription.getComponentDescriptions()) { if (componentDescription instanceof EJBComponentDescription) { final EJBComponentDescription ejbComponentDescription = (EJBComponentDescription) componentDescription; if (ejbComponentDescription.getEjbRemoteView() != null && ejbComponentDescription.getEjbHomeView() != null) { // check if there is IIOP metadata for the bean - first using the bean name, then the // wildcard "*" if needed. IIOPMetaData iiopMetaData = iiopMetaDataMap.get(ejbComponentDescription.getEJBName()); if (iiopMetaData == null) { iiopMetaData = iiopMetaDataMap.get(IIOPMetaData.WILDCARD_BEAN_NAME); } // the bean will be exposed via IIOP if it has IIOP metadata that applies to it or if // IIOP access // has been enabled by default in the EJB3 subsystem. if (iiopMetaData != null || settingsService.isEnabledByDefault()) { processEjb( ejbComponentDescription, classIndex, deploymentReflectionIndex, module, phaseContext.getServiceTarget(), iiopMetaData); } } } } } }
private void processEjb( final EJBComponentDescription componentDescription, final DeploymentClassIndex classIndex, final DeploymentReflectionIndex deploymentReflectionIndex, final Module module, final ServiceTarget serviceTarget, final IIOPMetaData iiopMetaData) { componentDescription.setExposedViaIiop(true); // Create bean method mappings for container invoker final EJBViewDescription remoteView = componentDescription.getEjbRemoteView(); final ClassIndex remoteClass; try { remoteClass = classIndex.classIndex(remoteView.getViewClassName()); } catch (ClassNotFoundException e) { throw EjbLogger.ROOT_LOGGER.failedToLoadViewClassForComponent( e, componentDescription.getEJBClassName()); } final EJBViewDescription homeView = componentDescription.getEjbHomeView(); final ClassIndex homeClass; try { homeClass = classIndex.classIndex(homeView.getViewClassName()); } catch (ClassNotFoundException e) { throw EjbLogger.ROOT_LOGGER.failedToLoadViewClassForComponent( e, componentDescription.getEJBClassName()); } componentDescription .getEjbHomeView() .getConfigurators() .add(new IIOPInterceptorViewConfigurator()); componentDescription .getEjbRemoteView() .getConfigurators() .add(new IIOPInterceptorViewConfigurator()); final InterfaceAnalysis remoteInterfaceAnalysis; try { // TODO: change all this to use the deployment reflection index remoteInterfaceAnalysis = InterfaceAnalysis.getInterfaceAnalysis(remoteClass.getModuleClass()); } catch (RMIIIOPViolationException e) { throw EjbLogger.ROOT_LOGGER.failedToAnalyzeRemoteInterface( e, componentDescription.getComponentName()); } final Map<String, SkeletonStrategy> beanMethodMap = new HashMap<String, SkeletonStrategy>(); final AttributeAnalysis[] remoteAttrs = remoteInterfaceAnalysis.getAttributes(); for (int i = 0; i < remoteAttrs.length; i++) { final OperationAnalysis op = remoteAttrs[i].getAccessorAnalysis(); if (op != null) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", op.getJavaName(), op.getIDLName()); // translate to the deployment reflection index method // TODO: this needs to be fixed so it just returns the correct method final Method method = translateMethod(deploymentReflectionIndex, op); beanMethodMap.put(op.getIDLName(), new SkeletonStrategy(method)); final OperationAnalysis setop = remoteAttrs[i].getMutatorAnalysis(); if (setop != null) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", setop.getJavaName(), setop.getIDLName()); // translate to the deployment reflection index method // TODO: this needs to be fixed so it just returns the correct method final Method realSetmethod = translateMethod(deploymentReflectionIndex, setop); beanMethodMap.put(setop.getIDLName(), new SkeletonStrategy(realSetmethod)); } } } final OperationAnalysis[] ops = remoteInterfaceAnalysis.getOperations(); for (int i = 0; i < ops.length; i++) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", ops[i].getJavaName(), ops[i].getIDLName()); beanMethodMap.put( ops[i].getIDLName(), new SkeletonStrategy(translateMethod(deploymentReflectionIndex, ops[i]))); } // Initialize repository ids of remote interface final String[] beanRepositoryIds = remoteInterfaceAnalysis.getAllTypeIds(); // Create home method mappings for container invoker final InterfaceAnalysis homeInterfaceAnalysis; try { // TODO: change all this to use the deployment reflection index homeInterfaceAnalysis = InterfaceAnalysis.getInterfaceAnalysis(homeClass.getModuleClass()); } catch (RMIIIOPViolationException e) { throw EjbLogger.ROOT_LOGGER.failedToAnalyzeRemoteInterface( e, componentDescription.getComponentName()); } final Map<String, SkeletonStrategy> homeMethodMap = new HashMap<String, SkeletonStrategy>(); final AttributeAnalysis[] attrs = homeInterfaceAnalysis.getAttributes(); for (int i = 0; i < attrs.length; i++) { final OperationAnalysis op = attrs[i].getAccessorAnalysis(); if (op != null) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", op.getJavaName(), op.getIDLName()); homeMethodMap.put( op.getIDLName(), new SkeletonStrategy(translateMethod(deploymentReflectionIndex, op))); final OperationAnalysis setop = attrs[i].getMutatorAnalysis(); if (setop != null) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", setop.getJavaName(), setop.getIDLName()); homeMethodMap.put( setop.getIDLName(), new SkeletonStrategy(translateMethod(deploymentReflectionIndex, setop))); } } } final OperationAnalysis[] homeops = homeInterfaceAnalysis.getOperations(); for (int i = 0; i < homeops.length; i++) { EjbLogger.ROOT_LOGGER.debugf( " %s\n %s", homeops[i].getJavaName(), homeops[i].getIDLName()); homeMethodMap.put( homeops[i].getIDLName(), new SkeletonStrategy(translateMethod(deploymentReflectionIndex, homeops[i]))); } // Initialize repository ids of home interface final String[] homeRepositoryIds = homeInterfaceAnalysis.getAllTypeIds(); final EjbIIOPService service = new EjbIIOPService( beanMethodMap, beanRepositoryIds, homeMethodMap, homeRepositoryIds, settingsService.isUseQualifiedName(), iiopMetaData, module); final ServiceBuilder<EjbIIOPService> builder = serviceTarget.addService( componentDescription.getServiceName().append(EjbIIOPService.SERVICE_NAME), service); builder.addDependency( componentDescription.getCreateServiceName(), EJBComponent.class, service.getEjbComponentInjectedValue()); builder.addDependency(homeView.getServiceName(), ComponentView.class, service.getHomeView()); builder.addDependency( remoteView.getServiceName(), ComponentView.class, service.getRemoteView()); builder.addDependency(CorbaORBService.SERVICE_NAME, ORB.class, service.getOrb()); builder.addDependency(POARegistry.SERVICE_NAME, POARegistry.class, service.getPoaRegistry()); builder.addDependency( CorbaPOAService.INTERFACE_REPOSITORY_SERVICE_NAME, POA.class, service.getIrPoa()); builder.addDependency( CorbaNamingService.SERVICE_NAME, NamingContextExt.class, service.getCorbaNamingContext()); builder.addDependency( IORSecConfigMetaDataService.SERVICE_NAME, IORSecurityConfigMetaData.class, service.getIORSecConfigMetaDataInjectedValue()); builder.addDependency( Services.JBOSS_SERVICE_MODULE_LOADER, ServiceModuleLoader.class, service.getServiceModuleLoaderInjectedValue()); // we need the arjunta transaction manager to be up, as it performs some initialization that is // required by the orb interceptors builder.addDependency(TxnServices.JBOSS_TXN_ARJUNA_TRANSACTION_MANAGER); builder.install(); }