@Override public void start(StartContext startContext) throws StartException { receiver = new LocalEjbReceiver(allowPassByReference, deploymentRepository.getValue()); }
static Object clone(final Class<?> target, final ObjectCloner cloner, final Object object, final boolean allowPassByReference) { if (object == null) { return null; } // don't clone primitives if (target.isPrimitive()) { return object; } if (allowPassByReference && target.isAssignableFrom(object.getClass())) { return object; } return clone(cloner, object); }
final EJBClientInvocationContext invocation = receiverContext.getClientInvocationContext(); final EJBLocator<?> locator = invocation.getLocator(); final EjbDeploymentInformation ejb = findBean(locator); final EJBComponent ejbComponent = ejb.getEjbComponent(); final ObjectCloner parameterCloner = createCloner(paramConfig); parameters = new Object[invocation.getParameters().length]; for (int i = 0; i < parameters.length; ++i) { parameters[i] = clone(method.getParameterTypes()[i], parameterCloner, invocation.getParameters()[i], allowPassByReference); final ObjectCloner resultCloner = createCloner(config); if (async) { if (ejbComponent instanceof SessionBeanComponent) { return; setSecurityContextOnAssociation(securityContext); StartupCountdown.restore(frame); try { } finally { StartupCountdown.restore(null); clearSecurityContextOnAssociation();
final LocalEjbReceiver byValueLocalEjbReceiver = new LocalEjbReceiver(nodeName, false, endpointValue, ejbRemoteConnectorServiceValue); newControllers.add(serviceTarget.addService(LocalEjbReceiver.BY_VALUE_SERVICE_NAME, byValueLocalEjbReceiver) .addDependency(DeploymentRepository.SERVICE_NAME, DeploymentRepository.class, byValueLocalEjbReceiver.getDeploymentRepository()) .addDependency(ClusteredBackingCacheEntryStoreSourceService.CLIENT_MAPPING_REGISTRY_COLLECTOR_SERVICE_NAME, RegistryCollector.class, byValueLocalEjbReceiver.getClusterRegistryCollectorInjector()) .install()); final LocalEjbReceiver byReferenceLocalEjbReceiver = new LocalEjbReceiver(nodeName, true, endpointValue, ejbRemoteConnectorServiceValue); newControllers.add(serviceTarget.addService(LocalEjbReceiver.BY_REFERENCE_SERVICE_NAME, byReferenceLocalEjbReceiver) .addDependency(DeploymentRepository.SERVICE_NAME, DeploymentRepository.class, byReferenceLocalEjbReceiver.getDeploymentRepository()) .addDependency(ClusteredBackingCacheEntryStoreSourceService.CLIENT_MAPPING_REGISTRY_COLLECTOR_SERVICE_NAME, RegistryCollector.class, byReferenceLocalEjbReceiver.getClusterRegistryCollectorInjector()) .install());
@Override protected void processInvocation(final EJBClientInvocationContext invocation, final EJBReceiverInvocationContext receiverContext) throws Exception { final EJBLocator locator = invocation.getLocator(); final EjbDeploymentInformation ejb = findBean(locator.getAppName(), locator.getModuleName(), locator.getDistinctName(), locator.getBeanName()); final EJBComponent ejbComponent = ejb.getEjbComponent(); parameters = new Object[invocation.getParameters().length]; for (int i = 0; i < parameters.length; ++i) { parameters[i] = clone(method.getParameterTypes()[i], parameterCloner, invocation.getParameters()[i], allowPassByReference); throw (Exception) clone(resultCloner, e); final Object clonedResult = clone(invocation.getInvokedMethod().getReturnType(), resultCloner, result, allowPassByReference); receiverContext.resultReady(new ImmediateResultProducer(clonedResult));
@Override protected <T> StatefulEJBLocator<T> openSession(EJBReceiverContext context, Class<T> viewType, String appName, String moduleName, String distinctName, String beanName) throws IllegalArgumentException { final EjbDeploymentInformation ejbInfo = findBean(appName, moduleName, distinctName, beanName); final EJBComponent component = ejbInfo.getEjbComponent(); if (!(component instanceof StatefulSessionComponent)) { throw MESSAGES.notStatefulSessionBean(beanName, appName, moduleName, distinctName); } final StatefulSessionComponent statefulComponent = (StatefulSessionComponent) component; final SessionID sessionID = statefulComponent.createSession(); return new StatefulEJBLocator<T>(viewType, appName, moduleName, beanName, distinctName, sessionID, statefulComponent.getCache().getStrictAffinity(), this.getNodeName()); }
protected SessionID createSession(final EJBReceiverSessionCreationContext receiverContext) throws Exception { final StatelessEJBLocator<?> statelessLocator = receiverContext.getClientInvocationContext().getLocator().asStateless(); final EjbDeploymentInformation ejbInfo = findBean(statelessLocator); final EJBComponent component = ejbInfo.getEjbComponent(); if (!(component instanceof StatefulSessionComponent)) { throw EjbLogger.ROOT_LOGGER.notStatefulSessionBean(statelessLocator.getAppName(), statelessLocator.getModuleName(), statelessLocator.getDistinctName(), statelessLocator.getBeanName()); } component.waitForComponentStart(); return ((StatefulSessionComponent) component).createSession(); }
private void addClusterNodes(final String clusterName, final Map<String, List<ClientMapping>> addedNodes) { if (addedNodes == null || addedNodes.isEmpty()) { return; } final List<EJBReceiverContext> receiverContexts = this.contexts; for (final EJBReceiverContext receiverContext : receiverContexts) { this.addClusterNodes(receiverContext.getClientContext(), clusterName, addedNodes); } }
final String addedNodeName = entry.getKey(); if (LocalEjbReceiver.this.getNodeName().equals(addedNodeName)) { clusterContext.addClusterNodes(new LocalClusterNodeManager()); continue; if (this.isLocalOnlyEJBClientContext(ejbClientContext)) { logger.debug("Skipping cluster node additions to EJB client context " + ejbClientContext + " since it can only handle local node"); continue;
@Override protected boolean exists(final String appName, final String moduleName, final String distinctName, final String beanName) { try { final EjbDeploymentInformation ejbDeploymentInformation = findBean(appName, moduleName, distinctName, beanName); return ejbDeploymentInformation != null; } catch (IllegalArgumentException iae) { return false; } }
@Override public void registryAdded(Registry<String, List<ClientMapping>> cluster) { final String clusterName = cluster.getName(); this.addClusterNodes(clusterName, cluster.getEntries()); // Register a listener for listening to removed/added nodes from the cluster final ClusterTopologyUpdateListener clusterTopologyUpdateListener = new ClusterTopologyUpdateListener(cluster); cluster.addListener(clusterTopologyUpdateListener); // keep track of this update listener so that we cleanup properly this.clusterTopologyUpdateListeners.add(clusterTopologyUpdateListener); }
public Object getResult() throws Exception { return LocalEjbReceiver.clone(invocation.getInvokedMethod().getReturnType(), resultCloner, result, allowPassByReference); }
@Override protected void associate(final EJBReceiverContext receiverContext) { this.contexts.add(receiverContext); final RegistryCollector<String, List<ClientMapping>> clusters = this.clusterRegistryCollector.getOptionalValue(); if (clusters == null) { return; } // for each cluster update the EJB client context with the current nodes in the cluster for (final Registry<String, List<ClientMapping>> cluster : clusters.getRegistries()) { this.addClusterNodes(receiverContext.getClientContext(), cluster.getName(), cluster.getEntries()); } }
private Object clone(final Class<?> target, final ObjectCloner cloner, final Object object, final boolean allowPassByReference) { if (object == null) { return null; } // don't clone primitives if (target.isPrimitive()) { return object; } if (allowPassByReference && target.isAssignableFrom(object.getClass())) { return object; } return clone(cloner, object); }
@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); } }