private void processMissingTarget(final AbstractInvocationContext context) { final URI destination = context.getDestination(); if (destination == null || context.getTargetAffinity() == Affinity.LOCAL) { // nothing we can/should do. return; } // Oops, we got some wrong information! addBlackListedDestination(context, destination); // clear the weak affinity so that cluster invocations can be re-targeted. context.setWeakAffinity(Affinity.NONE); context.setTargetAffinity(null); context.setDestination(null); context.requestRetry(); }
final List<Throwable> problems; final Set<URI> set = context.getAttachment(BL_KEY); try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { assert context.getLocator().getAffinity() instanceof ClusterAffinity; Logs.INVOCATION.tracef("Performed first-match discovery, no match, falling back to cluster discovery"); return merge(problems, doClusterDiscovery(context, fallbackFilterSpec)); } else {
if (! isBlackListed(context, affinity.getUri())) { if (! isBlackListed(context, weakAffinity.getUri())) { context.setDestination(weakAffinity.getUri()); context.setTargetAffinity(weakAffinity); } else if (affinity == Affinity.NONE && weakAffinity instanceof NodeAffinity) { filterSpec = FilterSpec.equal(FILTER_ATTR_NODE, ((NodeAffinity) weakAffinity).getNodeName()); return doFirstMatchDiscovery(context, filterSpec, null); } else if (affinity instanceof NodeAffinity) { filterSpec = FilterSpec.equal(FILTER_ATTR_NODE, ((NodeAffinity) affinity).getNodeName()); return doFirstMatchDiscovery(context, filterSpec, null); } else if (affinity instanceof ClusterAffinity) { if (weakAffinity instanceof NodeAffinity) { FilterSpec.hasAttribute(FILTER_ATTR_NODE) ); return doFirstMatchDiscovery(context, filterSpec, fallbackFilterSpec); } else if (weakAffinity instanceof URIAffinity || weakAffinity == Affinity.LOCAL) { FilterSpec.equal(FILTER_ATTR_CLUSTER, ((ClusterAffinity) affinity).getClusterName()) ); return doClusterDiscovery(context, filterSpec); filterSpec = getFilterSpec(locator.getIdentifier().getModuleIdentifier()); return doAnyDiscovery(context, filterSpec, locator);
public SessionID handleSessionCreation(final EJBSessionCreationInvocationContext context) throws Exception { if (context.getDestination() != null) { // already discovered! return context.proceed(); } List<Throwable> problems = executeDiscovery(context); if(WILDFLY_TESTSUITE_HACK && context.getDestination() == null) { Thread.sleep(2000); problems = executeDiscovery(context); } SessionID sessionID; try { sessionID = context.proceed(); } catch (NoSuchEJBException | RequestSendFailedException e) { processMissingTarget(context); throw withSuppressed(e, problems); } catch (Exception t) { throw withSuppressed(t, problems); } setupSessionAffinities(context); return sessionID; }
public void handleInvocation(final EJBClientInvocationContext context) throws Exception { if (context.getDestination() != null) { // already discovered! context.sendRequest(); return; } List<Throwable> problems = executeDiscovery(context); if(WILDFLY_TESTSUITE_HACK && context.getDestination() == null) { Thread.sleep(2000); problems = executeDiscovery(context); } try { context.sendRequest(); } catch (NoSuchEJBException | RequestSendFailedException e) { processMissingTarget(context); throw e; } finally { if (problems != null) for (Throwable problem : problems) { context.addSuppressed(problem); } } }
static boolean setNamingDestination(final AbstractInvocationContext context, final NamingProvider namingProvider) { final ProviderEnvironment providerEnvironment = namingProvider.getProviderEnvironment(); final List<URI> providerUris = providerEnvironment.getProviderUris(); List<URI> uris = findPreferredURIs(context, providerUris); if (uris == null) { uris = new ArrayList<>(providerUris.size()); for (URI uri : providerUris) { if (!isBlackListed(context, uri)) { uris.add(uri); } } } final int size = uris.size(); if (size == 0) { // we can't discover the location; fail return false; } else if (size == 1) { context.setDestination(uris.get(0)); return true; } else { context.setDestination(uris.get(ThreadLocalRandom.current().nextInt(size))); } if (context instanceof EJBSessionCreationInvocationContext) { DiscoveryEJBClientInterceptor.setupSessionAffinities((EJBSessionCreationInvocationContext)context); } return true; }
final List<Throwable> problems; final Set<URI> set = context.getAttachment(BL_KEY); try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { if (set == null || ! set.contains(location)) { final EJBReceiver transportProvider = clientContext.getTransportProvider(location.getScheme()); if (transportProvider != null && satisfiesSourceAddress(serviceURL, transportProvider)) { final AttributeValue nodeNameValue = serviceURL.getFirstAttributeValue(FILTER_ATTR_NODE); nodes = tryFilterToPreferredNodes(context, nodes);
try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { selectCluster(context, clusterAssociations, location); context.setDestination(location); if (nodeName != null) context.setTargetAffinity(new NodeAffinity(nodeName));
ServicesQueue discover(final FilterSpec filterSpec) { return getDiscovery().discover(EJB_SERVICE_TYPE, filterSpec); }
private static List<URI> findPreferredURIs(AbstractInvocationContext context, List<URI> uris) { Collection<URI> attachment = context.getAttachment(TransactionInterceptor.PREFERRED_DESTINATIONS); if (attachment == null) { return null; } HashSet<URI> preferred = new HashSet<>(attachment); List<URI> result = null; for (URI check : uris) { if (preferred.contains(check) && !isBlackListed(context, check)) { if (result == null) { result = new ArrayList<>(preferred.size()); } result.add(check); } } return result; }
public SessionID handleSessionCreation(final EJBSessionCreationInvocationContext context) throws Exception { if (context.getDestination() != null) { // already discovered! return context.proceed(); } List<Throwable> problems = executeDiscovery(context); if(WILDFLY_TESTSUITE_HACK && context.getDestination() == null) { Thread.sleep(2000); problems = executeDiscovery(context); } SessionID sessionID; try { sessionID = context.proceed(); } catch (NoSuchEJBException | RequestSendFailedException e) { processMissingTarget(context); throw withSuppressed(e, problems); } catch (Exception t) { throw withSuppressed(t, problems); } setupSessionAffinities(context); return sessionID; }
final List<Throwable> problems; final Set<URI> set = context.getAttachment(BL_KEY); try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { if (set == null || ! set.contains(location)) { final EJBReceiver transportProvider = clientContext.getTransportProvider(location.getScheme()); if (transportProvider != null && satisfiesSourceAddress(serviceURL, transportProvider)) { final AttributeValue nodeNameValue = serviceURL.getFirstAttributeValue(FILTER_ATTR_NODE); nodes = tryFilterToPreferredNodes(context, nodes);
public void handleInvocation(final EJBClientInvocationContext context) throws Exception { if (context.getDestination() != null) { // already discovered! context.sendRequest(); return; } List<Throwable> problems = executeDiscovery(context); if(WILDFLY_TESTSUITE_HACK && context.getDestination() == null) { Thread.sleep(2000); problems = executeDiscovery(context); } try { context.sendRequest(); } catch (NoSuchEJBException | RequestSendFailedException e) { processMissingTarget(context); throw e; } finally { if (problems != null) for (Throwable problem : problems) { context.addSuppressed(problem); } } }
static boolean setNamingDestination(final AbstractInvocationContext context, final NamingProvider namingProvider) { final ProviderEnvironment providerEnvironment = namingProvider.getProviderEnvironment(); final List<URI> providerUris = providerEnvironment.getProviderUris(); List<URI> uris = findPreferredURIs(context, providerUris); if (uris == null) { uris = new ArrayList<>(providerUris.size()); for (URI uri : providerUris) { if (!isBlackListed(context, uri)) { uris.add(uri); } } } final int size = uris.size(); if (size == 0) { // we can't discover the location; fail return false; } else if (size == 1) { context.setDestination(uris.get(0)); return true; } else { context.setDestination(uris.get(ThreadLocalRandom.current().nextInt(size))); } if (context instanceof EJBSessionCreationInvocationContext) { DiscoveryEJBClientInterceptor.setupSessionAffinities((EJBSessionCreationInvocationContext)context); } return true; }
try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { selectCluster(context, clusterAssociations, location); context.setDestination(location); if (nodeName != null) context.setTargetAffinity(new NodeAffinity(nodeName));
ServicesQueue discover(final FilterSpec filterSpec) { return getDiscovery().discover(EJB_SERVICE_TYPE, filterSpec); }
private static List<URI> findPreferredURIs(AbstractInvocationContext context, List<URI> uris) { Collection<URI> attachment = context.getAttachment(TransactionInterceptor.PREFERRED_DESTINATIONS); if (attachment == null) { return null; } HashSet<URI> preferred = new HashSet<>(attachment); List<URI> result = null; for (URI check : uris) { if (preferred.contains(check) && !isBlackListed(context, check)) { if (result == null) { result = new ArrayList<>(preferred.size()); } result.add(check); } } return result; }
if (! isBlackListed(context, affinity.getUri())) { if (! isBlackListed(context, weakAffinity.getUri())) { context.setDestination(weakAffinity.getUri()); context.setTargetAffinity(weakAffinity); } else if (affinity == Affinity.NONE && weakAffinity instanceof NodeAffinity) { filterSpec = FilterSpec.equal(FILTER_ATTR_NODE, ((NodeAffinity) weakAffinity).getNodeName()); return doFirstMatchDiscovery(context, filterSpec, null); } else if (affinity instanceof NodeAffinity) { filterSpec = FilterSpec.equal(FILTER_ATTR_NODE, ((NodeAffinity) affinity).getNodeName()); return doFirstMatchDiscovery(context, filterSpec, null); } else if (affinity instanceof ClusterAffinity) { if (weakAffinity instanceof NodeAffinity) { FilterSpec.hasAttribute(FILTER_ATTR_NODE) ); return doFirstMatchDiscovery(context, filterSpec, fallbackFilterSpec); } else if (weakAffinity instanceof URIAffinity || weakAffinity == Affinity.LOCAL) { FilterSpec.equal(FILTER_ATTR_CLUSTER, ((ClusterAffinity) affinity).getClusterName()) ); return doClusterDiscovery(context, filterSpec); filterSpec = getFilterSpec(locator.getIdentifier().getModuleIdentifier()); return doAnyDiscovery(context, filterSpec, locator);
public SessionID handleSessionCreation(final EJBSessionCreationInvocationContext context) throws Exception { if (context.getDestination() != null) { // already discovered! return context.proceed(); } List<Throwable> problems = executeDiscovery(context); if(WILDFLY_TESTSUITE_HACK && context.getDestination() == null) { Thread.sleep(2000); problems = executeDiscovery(context); } SessionID sessionID; try { sessionID = context.proceed(); } catch (NoSuchEJBException | RequestSendFailedException e) { processMissingTarget(context); throw withSuppressed(e, problems); } catch (Exception t) { throw withSuppressed(t, problems); } setupSessionAffinities(context); return sessionID; }
final List<Throwable> problems; final Set<URI> set = context.getAttachment(BL_KEY); try (final ServicesQueue queue = discover(filterSpec)) { ServiceURL serviceURL; while ((serviceURL = queue.takeService()) != null) { assert context.getLocator().getAffinity() instanceof ClusterAffinity; Logs.INVOCATION.tracef("Performed first-match discovery, no match, falling back to cluster discovery"); return merge(problems, doClusterDiscovery(context, fallbackFilterSpec)); } else {