diff --git a/instrumentation/glassfish-3/build.gradle b/instrumentation/glassfish-3/build.gradle deleted file mode 100644 index b39b0ad221..0000000000 --- a/instrumentation/glassfish-3/build.gradle +++ /dev/null @@ -1,40 +0,0 @@ -dependencies { - implementation(project(":agent-bridge")) - - implementation("jakarta.servlet:jakarta.servlet-api:4.0.4") - implementation("org.glassfish.main.web:web-core:5.1.0") - implementation("org.eclipse.persistence:javax.persistence:2.2.1") -} - -jar { - manifest { attributes 'Implementation-Title': 'com.newrelic.instrumentation.glassfish-3' } -} - -verifyInstrumentation { - // maven-metadata.xml for this artifact only shows the latest version. - // This is the file that's read when trying to resolve a range of versions, such as [3.0,6.0). - // Therefore, range-based versions will not work here. - passes 'org.glassfish.main.web:web-core:3.1.2' - passes 'org.glassfish.main.web:web-core:3.1.2.2' - passes 'org.glassfish.main.web:web-core:4.0' - passes 'org.glassfish.main.web:web-core:4.1' - passes 'org.glassfish.main.web:web-core:4.1.1' - passes 'org.glassfish.main.web:web-core:4.1.2' - passes 'org.glassfish.main.web:web-core:5.0' - passes 'org.glassfish.main.web:web-core:5.0.1' - passes 'org.glassfish.main.web:web-core:5.1.0' - fails 'org.glassfish.main.web:web-core:6.0.0' - fails 'org.glassfish.main.web:web-core:6.1.0' - fails 'org.glassfish.main.web:web-core:6.2.0' - fails 'org.glassfish.main.web:web-core:6.2.1' - fails 'org.glassfish.main.web:web-core:6.2.2' - fails 'org.glassfish.main.web:web-core:6.2.3' - fails 'org.glassfish.main.web:web-core:6.2.4' - fails 'org.glassfish.main.web:web-core:6.2.5' -} - -site { - title 'Glassfish' - type 'Appserver' - versionOverride '[3.0,6.0)' -} diff --git a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/AsyncListenerFactory.java b/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/AsyncListenerFactory.java deleted file mode 100644 index d0c14450ed..0000000000 --- a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/AsyncListenerFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package com.nr.agent.instrumentation.glassfish3; - -import java.io.IOException; - -import javax.servlet.AsyncEvent; -import javax.servlet.AsyncListener; -import javax.servlet.ServletRequest; - -import org.apache.catalina.connector.Request; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.api.agent.weaver.CatchAndLog; - -public final class AsyncListenerFactory { - - private AsyncListenerFactory() { - } - - private static final AsyncListener ASYNC_LISTENER = new AsyncListener() { - - @Override - @CatchAndLog - public void onComplete(AsyncEvent asyncEvent) throws IOException { - ServletRequest servletRequest = asyncEvent.getSuppliedRequest(); - Request request = RequestFacadeHelper.getRequest(servletRequest); - if (request != null) { - AgentBridge.asyncApi.completeAsync(asyncEvent.getAsyncContext()); - } - } - - @Override - public void onTimeout(AsyncEvent asyncEvent) throws IOException { - // do nothing - } - - @Override - @CatchAndLog - public void onError(AsyncEvent asyncEvent) throws IOException { - ServletRequest servletRequest = asyncEvent.getSuppliedRequest(); - Request request = RequestFacadeHelper.getRequest(servletRequest); - if (request != null) { - AgentBridge.asyncApi.errorAsync(asyncEvent.getAsyncContext(), asyncEvent.getThrowable()); - } - } - - @Override - public void onStartAsync(AsyncEvent asyncEvent) throws IOException { - // do nothing - } - - }; - - public static AsyncListener getAsyncListener() { - return ASYNC_LISTENER; - } -} diff --git a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/RequestFacadeHelper.java b/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/RequestFacadeHelper.java deleted file mode 100644 index 93bf76d009..0000000000 --- a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/RequestFacadeHelper.java +++ /dev/null @@ -1,61 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package com.nr.agent.instrumentation.glassfish3; - -import java.lang.reflect.Field; -import java.util.logging.Level; - -import javax.servlet.ServletRequest; - -import org.apache.catalina.connector.Request; -import org.apache.catalina.connector.RequestFacade; - -import com.newrelic.api.agent.NewRelic; - -public class RequestFacadeHelper { - - private static final String REQUEST_FIELD_NAME = "request"; - - private static final Field REQUEST_FIELD = getRequestField(); - - private RequestFacadeHelper() { - - } - - private static Field getRequestField() { - try { - Field field = RequestFacade.class.getDeclaredField(REQUEST_FIELD_NAME); - field.setAccessible(true); - return field; - } catch (Exception e) { - NewRelic.getAgent().getLogger().log(Level.FINEST, e, "Unable to get the request field from RequestFacade"); - } - return null; - } - - private static Request getRequest(RequestFacade requestFacade) { - if (REQUEST_FIELD != null) { - try { - return (Request) REQUEST_FIELD.get(requestFacade); - } catch (Exception e) { - NewRelic.getAgent().getLogger().log(Level.FINEST, e, - "Unable to fetch the request field value from RequestFacade"); - } - } - return null; - } - - public static Request getRequest(ServletRequest servletRequest) { - if (servletRequest instanceof Request) { - return (Request) servletRequest; - } else if (servletRequest instanceof RequestFacade) { - return getRequest((RequestFacade) servletRequest); - } - return null; - } -} diff --git a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatRequest.java b/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatRequest.java deleted file mode 100644 index 1049fec3a7..0000000000 --- a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatRequest.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package com.nr.agent.instrumentation.glassfish3; - -import java.util.Collections; -import java.util.Enumeration; -import java.util.List; - -import javax.servlet.http.Cookie; -import javax.servlet.http.HttpServletRequest; - -import com.newrelic.api.agent.ExtendedRequest; -import com.newrelic.api.agent.HeaderType; - -public class TomcatRequest extends ExtendedRequest { - private final HttpServletRequest request; - - public TomcatRequest(HttpServletRequest request) { - super(); - this.request = request; - } - - @Override - public String getRequestURI() { - return request.getRequestURI(); - } - - @Override - public String getHeader(String name) { - return request.getHeader(name); - } - - @Override - public String getRemoteUser() { - return request.getRemoteUser(); - } - - @SuppressWarnings("rawtypes") - @Override - public Enumeration getParameterNames() { - return request.getParameterNames(); - } - - @Override - public String[] getParameterValues(String name) { - return request.getParameterValues(name); - } - - @Override - public Object getAttribute(String name) { - return request.getAttribute(name); - } - - @Override - public String getCookieValue(String name) { - Cookie[] cookies = request.getCookies(); - if (cookies != null) { - for (Cookie cookie : cookies) { - if (name.equals(cookie.getName())) { - return cookie.getValue(); - } - } - } - return null; - } - - @Override - public HeaderType getHeaderType() { - return HeaderType.HTTP; - } - - @Override - public String getMethod() { - return request.getMethod(); - } - - @Override - public List getHeaders(String name) { - Enumeration headers = request.getHeaders(name); - if (headers == null) { - return Collections.emptyList(); - } - return Collections.list(headers); - } -} diff --git a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatResponse.java b/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatResponse.java deleted file mode 100644 index 27371571fb..0000000000 --- a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatResponse.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package com.nr.agent.instrumentation.glassfish3; - -import javax.servlet.http.HttpServletResponse; - -import com.newrelic.api.agent.HeaderType; -import com.newrelic.api.agent.Response; - -public class TomcatResponse implements Response { - - private final org.apache.catalina.Response delegate; - private final HttpServletResponse response; - - public TomcatResponse(org.apache.catalina.Response response) { - this.delegate = response; - if (response.getResponse() instanceof HttpServletResponse) { - this.response = (HttpServletResponse) response.getResponse(); - } else { - this.response = null; - } - } - - @Override - public int getStatus() throws Exception { - return response.getStatus(); - } - - @Override - public String getStatusMessage() throws Exception { - return delegate.getDetailMessage(); - } - - @Override - public void setHeader(String name, String value) { - response.setHeader(name, value); - } - - @Override - public String getContentType() { - return delegate.getContentType(); - } - - @Override - public HeaderType getHeaderType() { - return HeaderType.HTTP; - } -} diff --git a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatServletRequestListener.java b/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatServletRequestListener.java deleted file mode 100644 index 3ef5dc52d4..0000000000 --- a/instrumentation/glassfish-3/src/main/java/com/nr/agent/instrumentation/glassfish3/TomcatServletRequestListener.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package com.nr.agent.instrumentation.glassfish3; - -import javax.servlet.ServletRequestEvent; -import javax.servlet.ServletRequestListener; -import javax.servlet.http.HttpServletRequest; - -import org.apache.catalina.connector.Request; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.api.agent.weaver.CatchAndLog; - -/** - * This class handles the initial request. An async dispatch is handled by - * {@link org.apache.catalina.core.ApplicationDispatcher}. - */ -public final class TomcatServletRequestListener implements ServletRequestListener { - - private static final String EXCEPTION_ATTRIBUTE_NAME = "javax.servlet.error.exception"; - - @CatchAndLog - @Override - public void requestDestroyed(ServletRequestEvent sre) { - Throwable exception = (Throwable) sre.getServletRequest().getAttribute(EXCEPTION_ATTRIBUTE_NAME); - if (exception != null) { - AgentBridge.privateApi.reportException(exception); - } - - AgentBridge.getAgent().getTransaction().requestDestroyed(); - } - - @CatchAndLog - @Override - public void requestInitialized(ServletRequestEvent sre) { - HttpServletRequest httpServletRequest = getHttpServletRequest(sre); - if (httpServletRequest == null) { - return; - } - - AgentBridge.getAgent().getTransaction(true).requestInitialized(getTomcatRequest(httpServletRequest), - getTomcatResponse(httpServletRequest)); - } - - private HttpServletRequest getHttpServletRequest(ServletRequestEvent sre) { - if (sre.getServletRequest() instanceof HttpServletRequest) { - return (HttpServletRequest) sre.getServletRequest(); - } - return null; - } - - private TomcatRequest getTomcatRequest(HttpServletRequest httpServletRequest) { - return new TomcatRequest(httpServletRequest); - } - - private TomcatResponse getTomcatResponse(HttpServletRequest httpServletRequest) { - Request request = RequestFacadeHelper.getRequest(httpServletRequest); - if (request != null) { - return new TomcatResponse(request.getResponse()); - } - return null; - } - -} diff --git a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Connector.java b/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Connector.java deleted file mode 100644 index 117015c76d..0000000000 --- a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Connector.java +++ /dev/null @@ -1,24 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package org.apache.catalina.connector; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.api.agent.weaver.Weave; -import com.newrelic.api.agent.weaver.Weaver; - -@Weave -public abstract class Connector { - - public void start() { - - AgentBridge.publicApi.setAppServerPort(getPort()); - Weaver.callOriginal(); - } - - public abstract int getPort(); -} diff --git a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/CoyoteWriter.java b/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/CoyoteWriter.java deleted file mode 100644 index 36b82a6707..0000000000 --- a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/CoyoteWriter.java +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package org.apache.catalina.connector; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.api.agent.NewRelic; -import com.newrelic.api.agent.weaver.Weave; -import com.newrelic.api.agent.weaver.Weaver; - -@Weave -public class CoyoteWriter { - - public void close() { - - NewRelic.getAgent().getTransaction().addOutboundResponseHeaders(); - Weaver.callOriginal(); - } -} diff --git a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Request.java b/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Request.java deleted file mode 100644 index 12daf0fbe1..0000000000 --- a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/connector/Request.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package org.apache.catalina.connector; - -import java.util.logging.Level; - -import javax.servlet.AsyncContext; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; -import javax.servlet.http.HttpServletRequest; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.api.agent.NewRelic; -import com.newrelic.api.agent.weaver.Weave; -import com.newrelic.api.agent.weaver.Weaver; -import com.nr.agent.instrumentation.glassfish3.AsyncListenerFactory; -import com.nr.agent.instrumentation.glassfish3.RequestFacadeHelper; - -@Weave -public abstract class Request implements HttpServletRequest { - - @SuppressWarnings("unused") - private AsyncContext startAsync(ServletRequest servletRequest, ServletResponse servletResponse, - boolean isStartAsyncWithZeroArg) { - - AsyncContext asyncContext = Weaver.callOriginal(); - - asyncContext.addListener(AsyncListenerFactory.getAsyncListener(), servletRequest, servletResponse); - NewRelic.getAgent().getLogger().log(Level.FINER, "Added async listener"); - - Request request = RequestFacadeHelper.getRequest(servletRequest); - if (request != null) { - AgentBridge.asyncApi.suspendAsync(request); - } - - return asyncContext; - } - - public abstract org.apache.catalina.Response getResponse(); - -} diff --git a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java b/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java deleted file mode 100644 index 755f5b6dd7..0000000000 --- a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/ApplicationDispatcher.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package org.apache.catalina.core; - -import javax.servlet.DispatcherType; -import javax.servlet.ServletRequest; -import javax.servlet.ServletResponse; - -import org.apache.catalina.connector.Request; - -import com.newrelic.agent.bridge.AgentBridge; -import com.newrelic.agent.bridge.Transaction; -import com.newrelic.api.agent.weaver.Weave; -import com.newrelic.api.agent.weaver.Weaver; -import com.nr.agent.instrumentation.glassfish3.RequestFacadeHelper; - -@Weave -public class ApplicationDispatcher { - - /** - * If this is an async dispatch there are no #ServletRequestListener calls, so handle async here. - * - * {@link ServletRequest#getAsyncContext()} throws an #IllegalStateException, and the asyncContext field in #Request - * is null, so use the #ServletRequest to find the suspended transaction. - * - * The transaction is suspended in {@link Request#startAsync(ServletRequest, ServletResponse, boolean)} - */ - public void dispatch(ServletRequest servletRequest, ServletResponse servletResponse, DispatcherType dispatcherType) { - - boolean isAsyncDispatch = dispatcherType == DispatcherType.ASYNC; - if (isAsyncDispatch) { - Request request = RequestFacadeHelper.getRequest(servletRequest); - if (request != null) { - AgentBridge.asyncApi.resumeAsync(request); - } - } - - Weaver.callOriginal(); - - if (isAsyncDispatch) { - if (servletRequest.isAsyncStarted()) { - Request request = RequestFacadeHelper.getRequest(servletRequest); - if (request != null) { - AgentBridge.asyncApi.suspendAsync(request); - } - } - AgentBridge.getAgent().getTransaction().requestDestroyed(); - } - } - -} diff --git a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/StandardContext.java b/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/StandardContext.java deleted file mode 100644 index c4a7733883..0000000000 --- a/instrumentation/glassfish-3/src/main/java/org/apache/catalina/core/StandardContext.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * - * * Copyright 2020 New Relic Corporation. All rights reserved. - * * SPDX-License-Identifier: Apache-2.0 - * - */ - -package org.apache.catalina.core; - -import java.util.EventListener; -import java.util.logging.Level; - -import com.newrelic.api.agent.NewRelic; -import com.newrelic.api.agent.weaver.Weave; -import com.newrelic.api.agent.weaver.Weaver; -import com.nr.agent.instrumentation.glassfish3.TomcatServletRequestListener; - -@Weave -public abstract class StandardContext { - - protected void contextListenerStart() { - - try { - addListener(new TomcatServletRequestListener()); - NewRelic.getAgent().getLogger().log(Level.FINER, "Registered ServletRequestListener for {0} : {1}", - this.getClass(), getPath()); - } catch (Exception e) { - NewRelic.getAgent().getLogger().log(Level.FINEST, e, "Error registering ServletRequestListener for {0}", - this.getClass()); - } - - Weaver.callOriginal(); - - } - - public abstract String getPath(); - - public abstract void addListener(EventListener listener); -} diff --git a/settings.gradle b/settings.gradle index 98de464c6d..0246755b9b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -122,7 +122,6 @@ include 'instrumentation:cxf-2.7' include 'instrumentation:ejb-3.0' include 'instrumentation:ejb-4.0' include 'instrumentation:flyway-core-8.0.0' -include 'instrumentation:glassfish-3' include 'instrumentation:glassfish-6' include 'instrumentation:glassfish-jmx' include 'instrumentation:glassfish-jul-extension-7'