@Override public void start(StartContext context) throws StartException { deploymentRepository.getValue().add(identifier, ModuleDeployment.this); }
@Override public void stop(StopContext context) { deploymentRepository.getValue().remove(identifier); }
deploymentRepository.addListener(listener); return () -> deploymentRepository.removeListener(listener);
private EjbDeploymentInformation findBean(final EJBLocator<?> locator) { final String appName = locator.getAppName(); final String moduleName = locator.getModuleName(); final String distinctName = locator.getDistinctName(); final String beanName = locator.getBeanName(); final DeploymentModuleIdentifier moduleIdentifier = new DeploymentModuleIdentifier(appName, moduleName, distinctName); final ModuleDeployment module = deploymentRepository.getModules().get(moduleIdentifier); if (module == null) { throw EjbLogger.ROOT_LOGGER.unknownDeployment(locator); } final EjbDeploymentInformation ejbInfo = module.getEjbs().get(beanName); if (ejbInfo == null) { throw EjbLogger.ROOT_LOGGER.ejbNotFoundInDeployment(locator); } return ejbInfo; }
@Override public void start(StartContext context) throws StartException { final DeploymentRepository repository = deploymentRepositoryValue.getValue(); moduleIdentifier = new DeploymentModuleIdentifier(APP_NAME, MODULE_NAME, DISTINCT_NAME); final InjectedValue<ComponentView> injectedHomeView = new InjectedValue<ComponentView>(); injectedHomeView.setValue(new ImmediateValue<ComponentView>(new ManagementHomeEjbComponentView())); final InjectedValue<ComponentView> injectedRemoteView = new InjectedValue<ComponentView>(); injectedRemoteView.setValue(new ImmediateValue<ComponentView>(new ManagementRemoteEjbComponentView(mbeanServerValue.getValue()))); Map<String, InjectedValue<ComponentView>> views = new HashMap<String, InjectedValue<ComponentView>>(); views.put(ManagementHome.class.getName(), injectedHomeView); views.put(Management.class.getName(), injectedRemoteView); final EjbDeploymentInformation ejb = new ManagementEjbDeploymentInformation(EJB_NAME, views, SecurityActions.getClassLoader(this.getClass())); final ModuleDeployment deployment = new ModuleDeployment(moduleIdentifier, Collections.singletonMap(EJB_NAME, ejb)); repository.add(moduleIdentifier, deployment); repository.startDeployment(moduleIdentifier); doPrivileged((PrivilegedAction<Void>) () -> { final ClassLoader classLoader = getClass().getClassLoader(); EJBClientContext.getContextManager().setClassLoaderDefault(classLoader, ejbClientContextValue.getValue().getClientContext()); Discovery.getContextManager().setClassLoaderDefault(classLoader, Discovery.create(associationServiceInjector.getValue().getLocalDiscoveryProvider())); return null; }); }
/** * Does all the necessary cleanup when a channel is no longer usable */ private void cleanupOnChannelDown() { // we no longer are interested in cluster topology updates, so unregister the update listener for (final ClusterTopologyUpdateListener clusterTopologyUpdateListener : this.clusterTopologyUpdateListeners) { clusterTopologyUpdateListener.unregisterListener(); } this.deploymentRepository.removeListener(this); this.clientMappingRegistryCollector.removeListener(this); }
@Override public void start(final StartContext context) throws StartException { deploymentRepository.getValue().addListener(deploymentListener); // register ourselves as a listener to new cluster formations/removal @SuppressWarnings("unchecked") final RegistryCollector<String, List<ClientMapping>> clusters = this.clusterRegistryCollector.getValue(); // register for cluster formation/removal events clusters.addListener(this); // for each cluster add a listener for cluster node addition/removal events and also // update the EJB client context with the current nodes in the cluster for (final Registry<String, List<ClientMapping>> cluster : clusters.getRegistries()) { this.addClusterNodes(cluster.getName(), cluster.getEntries()); final ClusterTopologyUpdateListener clusterTopologyUpdateListener = new ClusterTopologyUpdateListener(cluster); cluster.addListener(clusterTopologyUpdateListener); // keep track of this update listener so that we cleanup properly this.clusterTopologyUpdateListeners.add(clusterTopologyUpdateListener); } }
@Override public void run() { deploymentRepository.getValue().startDeployment(identifier); } };
private EjbDeploymentInformation findEJB(final String appName, final String moduleName, final String distinctName, final String beanName) { final DeploymentModuleIdentifier ejbModule = new DeploymentModuleIdentifier(appName, moduleName, distinctName); final Map<DeploymentModuleIdentifier, ModuleDeployment> modules = this.deploymentRepository.getStartedModules(); if (modules == null || modules.isEmpty()) { return null; } final ModuleDeployment moduleDeployment = modules.get(ejbModule); if (moduleDeployment == null) { return null; } return moduleDeployment.getEjbs().get(beanName); }
/** * Notifies local transaction context that server is resumed, and restarts deployment controller. */ @Override public void resume() { this.suspended = false; localTransactionContextInjectedValue.getValue().resumeRequests(); ServerActivityCallback listener = listenerUpdater.get(this); if (listener != null) { listenerUpdater.compareAndSet(this, listener, null); } deploymentRepositoryInjectedValue.getValue().resume(); }
newControllers.add(context.getServiceTarget().addService(DeploymentRepository.SERVICE_NAME, new DeploymentRepository()).install());
private EjbIIOPService serviceForLocator(final EJBLocator<?> locator, DeploymentRepository deploymentRepository) { final ModuleDeployment module = deploymentRepository.getModules().get(new DeploymentModuleIdentifier(locator.getAppName(), locator.getModuleName(), locator.getDistinctName())); if (module == null) { EjbLogger.ROOT_LOGGER.couldNotFindEjbForLocatorIIOP(locator); return null; } final EjbDeploymentInformation ejb = module.getEjbs().get(locator.getBeanName()); if (ejb == null) { EjbLogger.ROOT_LOGGER.couldNotFindEjbForLocatorIIOP(locator); return null; } final EjbIIOPService factory = ejb.getIorFactory(); if (factory == null) { EjbLogger.ROOT_LOGGER.ejbNotExposedOverIIOP(locator); return null; } return factory; }
@Override public void stop(final StopContext context) { for (EJBReceiverContext ctx : contexts) { ctx.close(); } this.contexts.clear(); deploymentRepository.getValue().removeListener(deploymentListener); // remove ourselves from cluster creation/removal event notifications @SuppressWarnings("unchecked") RegistryCollector<String, List<ClientMapping>> collector = this.clusterRegistryCollector.getValue(); collector.removeListener(this); // we no longer are interested in cluster topology updates, so unregister the update listener for (final ClusterTopologyUpdateListener clusterTopologyUpdateListener : this.clusterTopologyUpdateListeners) { clusterTopologyUpdateListener.unregisterListener(); } }
public void startReceiving() { final Channel channel = this.channelAssociation.getChannel(); channel.addCloseHandler(new ChannelCloseHandler()); channel.receiveMessage(this); // listen to module availability/unavailability events this.deploymentRepository.addListener(this); // listen to new clusters (a.k.a groups) being started/stopped this.clientMappingRegistryCollector.addListener(this); // Send the cluster topology for existing clusters in the registry // and for each of these clusters added ourselves as a listener for cluster // topology changes (members added/removed events in the cluster) final Collection<Registry<String, List<ClientMapping>>> clusters = this.clientMappingRegistryCollector.getRegistries(); try { this.sendNewClusterFormedMessage(clusters); } catch (IOException ioe) { // just log and don't throw an error EjbLogger.EJB3_LOGGER.failedToSendClusterFormationMessageToClient(ioe, channel); } for (final Registry<String, List<ClientMapping>> cluster : clusters) { // add the topology update listener final ClusterTopologyUpdateListener clusterTopologyUpdateListener = new ClusterTopologyUpdateListener(cluster, this); cluster.addListener(clusterTopologyUpdateListener); // keep track of this topology update listener so that we can unregister it when the channel is closed and // we no longer are interested in the topology updates this.clusterTopologyUpdateListeners.add(clusterTopologyUpdateListener); } }
protected EjbDeploymentInformation findEJB(final String appName, final String moduleName, final String distinctName, final String beanName) { final DeploymentModuleIdentifier ejbModule = new DeploymentModuleIdentifier(appName, moduleName, distinctName); final ModuleDeployment moduleDeployment = this.deploymentRepository.getModules().get(ejbModule); if (moduleDeployment == null) { return null; } return moduleDeployment.getEjbs().get(beanName); }
@Override public void stop(StopContext context) { deploymentRepository.getValue().remove(identifier); }
@Override public void start(StartContext context) throws StartException { deploymentRepository.getValue().add(identifier, this); }
@Override public void listenerAdded(final DeploymentRepository repository) { for (Map.Entry<DeploymentModuleIdentifier, ModuleDeployment> entry : repository.getModules().entrySet()) { final DeploymentModuleIdentifier module = entry.getKey(); LocalEjbReceiver.this.registerModule(module.getApplicationName(), module.getModuleName(), module.getDistinctName()); } }
@Override public void stop(StopContext context) { deploymentRepositoryValue.getValue().remove(moduleIdentifier); doPrivileged((PrivilegedAction<Void>) () -> { final ClassLoader classLoader = getClass().getClassLoader(); EJBClientContext.getContextManager().setClassLoaderDefault(classLoader, null); Discovery.getContextManager().setClassLoaderDefault(classLoader, null); return null; }); }
@Override public void listenerAdded(DeploymentRepository repository) { // get the initial available modules and send a message to the client final Map<DeploymentModuleIdentifier, ModuleDeployment> availableModules = this.deploymentRepository.getModules(); if (availableModules != null && !availableModules.isEmpty()) { try { EjbLogger.ROOT_LOGGER.debug("Sending initial module availability message, containing " + availableModules.size() + " module(s) to channel " + this.channelAssociation.getChannel()); this.sendModuleAvailability(availableModules.keySet().toArray(new DeploymentModuleIdentifier[availableModules.size()])); } catch (IOException e) { EjbLogger.ROOT_LOGGER.failedToSendModuleAvailabilityMessageToClient(e, this.channelAssociation.getChannel()); } } }