public void baseAfterReceive()

in apm-agent-plugins/apm-jms-plugin/apm-jms-plugin-base/src/main/java/co/elastic/apm/agent/jms/JmsInstrumentationHelper.java [273:350]


    public void baseAfterReceive(Class<?> clazz, String methodName,
                                 @Nullable final Object abstractSpanObj,
                                 @Nullable final MESSAGE message,
                                 @Nullable final Throwable throwable) {
        AbstractSpan<?> abstractSpan = null;
        if (abstractSpanObj instanceof AbstractSpan<?>) {
            abstractSpan = (AbstractSpan<?>) abstractSpanObj;
        }
        DESTINATION destination = null;
        String destinationName = null;
        boolean discard = false;
        boolean addDetails = true;
        if (message != null) {
            try {
                destination = getJMSDestination(message);
                destinationName = extractDestinationName(message, destination);
                discard = ignoreDestination(destinationName);
            } catch (Exception e) {
                logger.error("Failed to retrieve meta info from Message", e);
            }

            if (abstractSpan instanceof Transaction<?>) {
                Transaction<?> transaction = (Transaction<?>) abstractSpan;
                if (discard) {
                    transaction.ignoreTransaction();
                } else {
                    transaction
                        .withType(MESSAGING_TYPE)
                        .addLink(propertyAccessorGetter(), message);
                    addMessageDetails(message, abstractSpan);
                }
            } else if (abstractSpan != null) {
                abstractSpan.addLink(propertyAccessorGetter(), message);
            }
        } else if (abstractSpan instanceof Transaction) {
            // Do not report polling transactions if not yielding messages
            ((Transaction<?>) abstractSpan).ignoreTransaction();
            addDetails = false;
        }

        if (abstractSpan != null) {
            try {
                if (discard) {
                    abstractSpan.requestDiscarding();
                } else if (addDetails) {
                    if (message != null && destinationName != null) {
                        abstractSpan.appendToName(" from ");
                        addDestinationDetails(destination, destinationName, abstractSpan);
                        setMessageAge(message, abstractSpan);
                    }
                    abstractSpan.captureException(throwable);
                }
            } finally {
                abstractSpan.deactivate().end();
            }
        }

        if (!discard && tracer.currentTransaction() == null
            && message != null
            && messagingConfiguration.getMessagePollingTransactionStrategy() != MessagingConfiguration.JmsStrategy.POLLING
            && !"receiveNoWait".equals(methodName)) {

            Transaction<?> messageHandlingTransaction = startJmsTransaction(message, clazz);
            if (messageHandlingTransaction != null) {
                messageHandlingTransaction.withType(MESSAGE_HANDLING)
                    .withName(RECEIVE_NAME_PREFIX);

                if (destinationName != null) {
                    messageHandlingTransaction.appendToName(" from ");
                    addDestinationDetails(destination, destinationName, messageHandlingTransaction);
                    addMessageDetails(message, messageHandlingTransaction);
                    setMessageAge(message, messageHandlingTransaction);
                }

                messageHandlingTransaction.activate();
            }
        }
    }