fix conflicts
Project: http://git-wip-us.apache.org/repos/asf/tomee/repo Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/b8f17bc2 Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/b8f17bc2 Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/b8f17bc2 Branch: refs/heads/tomee-1.7.x Commit: b8f17bc2d7473d9f28c27192cc0112f03a0b36ee Parents: a1992b4 Author: Otavio Santana <[email protected]> Authored: Fri Dec 15 07:56:44 2017 -0300 Committer: Thiago Veronezi <[email protected]> Committed: Wed Jan 17 12:54:08 2018 -0500 ---------------------------------------------------------------------- .../core/mdb/AbstractEndpointHandler.java | 11 +- .../openejb/core/mdb/EndpointHandler.java | 137 +------------------ 2 files changed, 13 insertions(+), 135 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tomee/blob/b8f17bc2/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/AbstractEndpointHandler.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/AbstractEndpointHandler.java b/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/AbstractEndpointHandler.java index 3df2438..5310c44 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/AbstractEndpointHandler.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/AbstractEndpointHandler.java @@ -25,18 +25,23 @@ import javax.ejb.EJBException; import javax.jms.Message; import javax.resource.spi.ApplicationServerInternalException; import javax.resource.spi.UnavailableException; +import javax.resource.spi.endpoint.MessageEndpoint; +import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.util.Arrays; -abstract class AbstractEndpointHandler { +abstract class AbstractEndpointHandler implements InvocationHandler, MessageEndpoint { protected State state = State.NONE; protected volatile Boolean isAmq; protected Object instance; - //final - protected BaseMdbContainer container; + protected final BaseMdbContainer container; + + AbstractEndpointHandler(BaseMdbContainer container) { + this.container = container; + } public abstract void beforeDelivery(final Method method) throws ApplicationServerInternalException; http://git-wip-us.apache.org/repos/asf/tomee/blob/b8f17bc2/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java ---------------------------------------------------------------------- diff --git a/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java b/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java index 0b45b5d..dfde6b8 100644 --- a/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java +++ b/container/openejb-core/src/main/java/org/apache/openejb/core/mdb/EndpointHandler.java @@ -17,33 +17,24 @@ package org.apache.openejb.core.mdb; -import org.apache.openejb.ApplicationException; import org.apache.openejb.BeanContext; import org.apache.openejb.SystemException; -import javax.ejb.EJBException; import javax.resource.spi.ApplicationServerInternalException; import javax.resource.spi.UnavailableException; -import javax.resource.spi.endpoint.MessageEndpoint; import javax.transaction.xa.XAResource; -import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; -import java.util.Arrays; -public class EndpointHandler implements InvocationHandler, MessageEndpoint { - private volatile Boolean isAmq; +public class EndpointHandler extends AbstractEndpointHandler { - private final BaseMdbContainer container; private final BeanContext deployment; private final MdbInstanceFactory instanceFactory; private final XAResource xaResource; - private State state = State.NONE; - private Object instance; public EndpointHandler(final BaseMdbContainer container, final BeanContext deployment, final MdbInstanceFactory instanceFactory, final XAResource xaResource) throws UnavailableException { - this.container = container; + super(container); this.deployment = deployment; this.instanceFactory = instanceFactory; this.xaResource = xaResource; @@ -51,38 +42,7 @@ public class EndpointHandler implements InvocationHandler, MessageEndpoint { } - public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable { - - final String methodName = method.getName(); - final Class<?>[] parameterTypes = method.getParameterTypes(); - - if (method.getDeclaringClass() == Object.class) { - if ("toString".equals(methodName) && parameterTypes.length == 0) { - return toString(); - } else if ("equals".equals(methodName) && parameterTypes.length == 1) { - return equals(args[0]); - } else if ("hashCode".equals(methodName) && parameterTypes.length == 0) { - return hashCode(); - } else { - throw new UnsupportedOperationException("Unkown method: " + method); - } - } - - if ("beforeDelivery".equals(methodName) && Arrays.deepEquals(new Class[]{Method.class}, parameterTypes)) { - beforeDelivery((Method) args[0]); - return null; - } else if ("afterDelivery".equals(methodName) && parameterTypes.length == 0) { - afterDelivery(); - return null; - } else if ("release".equals(methodName) && parameterTypes.length == 0) { - release(); - return null; - } else { - final Object value = deliverMessage(method, args); - return value; - } - } - + @Override public void beforeDelivery(final Method method) throws ApplicationServerInternalException { // verify current state switch (state) { @@ -107,95 +67,8 @@ public class EndpointHandler implements InvocationHandler, MessageEndpoint { state = State.BEFORE_CALLED; } - public Object deliverMessage(final Method method, final Object[] args) throws Throwable { - - boolean callBeforeAfter = false; - - // verify current state - switch (state) { - case NONE: - try { - beforeDelivery(method); - } catch (final ApplicationServerInternalException e) { - throw (EJBException) new EJBException().initCause(e.getCause()); - } - callBeforeAfter = true; - state = State.METHOD_CALLED; - break; - case BEFORE_CALLED: - state = State.METHOD_CALLED; - break; - case RELEASED: - throw new IllegalStateException("Message endpoint factory has been released"); - case METHOD_CALLED: - case SYSTEM_EXCEPTION: - throw new IllegalStateException("The last message delivery must be completed with an afterDeliver before another message can be delivered"); - } - - Throwable throwable = null; - Object value = null; - try { - // deliver the message - value = container.invoke(instance, method, null, args); - } catch (final SystemException se) { - throwable = se.getRootCause() != null ? se.getRootCause() : se; - state = State.SYSTEM_EXCEPTION; - } catch (final ApplicationException ae) { - throwable = ae.getRootCause() != null ? ae.getRootCause() : ae; - } finally { - // if the adapter is not using before/after, we must call afterDelivery to clean up - if (callBeforeAfter) { - try { - afterDelivery(); - } catch (final ApplicationServerInternalException e) { - throwable = throwable == null ? e.getCause() : throwable; - } catch (final UnavailableException e) { - throwable = throwable == null ? e : throwable; - } - } - } - - if (throwable != null) { - throwable.printStackTrace(); - if (isValidException(method, throwable)) { - throw throwable; - } else { - throw new EJBException().initCause(throwable); - } - } - return value; - } - - public void afterDelivery() throws ApplicationServerInternalException, UnavailableException { - // verify current state - switch (state) { - case RELEASED: - throw new IllegalStateException("Message endpoint factory has been released"); - case NONE: - throw new IllegalStateException("afterDelivery may only be called if message delivery began with a beforeDelivery call"); - } - - - // call afterDelivery on the container - boolean exceptionThrown = false; - try { - container.afterDelivery(instance); - } catch (final SystemException se) { - exceptionThrown = true; - - final Throwable throwable = se.getRootCause() != null ? se.getRootCause() : se; - throwable.printStackTrace(); - throw new ApplicationServerInternalException(throwable); - } finally { - if (state == State.SYSTEM_EXCEPTION) { - recreateInstance(exceptionThrown); - } - // we are now in the default NONE state - state = State.NONE; - } - } - - private void recreateInstance(final boolean exceptionAlreadyThrown) throws UnavailableException { + @Override + protected void recreateInstance(final boolean exceptionAlreadyThrown) throws UnavailableException { try { instance = instanceFactory.recreateInstance(instance); } catch (final UnavailableException e) {
