Search in sources :

Example 6 with SessionID

use of org.jboss.ejb.client.SessionID in project wildfly by wildfly.

the class StatefulComponentSessionIdGeneratingInterceptor method processInvocation.

@Override
public Object processInvocation(InterceptorContext context) throws Exception {
    final Component component = context.getPrivateData(Component.class);
    if (component instanceof StatefulSessionComponent == false) {
        throw EjbLogger.ROOT_LOGGER.unexpectedComponent(component, StatefulSessionComponent.class);
    }
    ComponentClientInstance clientInstance = context.getPrivateData(ComponentClientInstance.class);
    SessionID existing = context.getPrivateData(SessionID.class);
    if (existing != null) {
        clientInstance.setViewInstanceData(SessionID.class, existing);
    } else {
        StatefulSessionComponent statefulComponent = (StatefulSessionComponent) component;
        statefulComponent.waitForComponentStart();
        StatefulSessionComponentInstance statefulSessionComponentInstance = statefulComponent.getCache().create();
        clientInstance.setViewInstanceData(SessionID.class, statefulSessionComponentInstance.getId());
    }
    // move to the next interceptor in chain
    return context.proceed();
}
Also used : ComponentClientInstance(org.jboss.as.ee.component.ComponentClientInstance) Component(org.jboss.as.ee.component.Component) SessionID(org.jboss.ejb.client.SessionID)

Example 7 with SessionID

use of org.jboss.ejb.client.SessionID in project wildfly by wildfly.

the class StatefulRemoteViewInstanceFactory method createViewInstance.

@Override
public ManagedReference createViewInstance(final ComponentView componentView, final Map<Object, Object> contextData) throws Exception {
    SessionID sessionID = (SessionID) contextData.get(SessionID.class);
    final StatefulEJBLocator<?> statefulEJBLocator;
    final StatefulSessionComponent statefulSessionComponent = (StatefulSessionComponent) componentView.getComponent();
    if (sessionID == null) {
        statefulEJBLocator = EJBClient.createSession(StatelessEJBLocator.create(componentView.getViewClass(), identifier, Affinity.LOCAL));
    } else {
        statefulEJBLocator = StatefulEJBLocator.create(componentView.getViewClass(), identifier, sessionID, statefulSessionComponent.getCache().getStrictAffinity());
    }
    final Object ejbProxy = EJBClient.createProxy(statefulEJBLocator);
    return new ValueManagedReference(new ImmediateValue<Object>(ejbProxy));
}
Also used : ValueManagedReference(org.jboss.as.naming.ValueManagedReference) SessionID(org.jboss.ejb.client.SessionID)

Example 8 with SessionID

use of org.jboss.ejb.client.SessionID in project wildfly by wildfly.

the class StatefulRemoveInterceptor method processInvocation.

@Override
public Object processInvocation(InterceptorContext context) throws Exception {
    final Component component = context.getPrivateData(Component.class);
    //if a session bean is participating in a transaction, it
    //is an error for a client to invoke the remove method
    //on the session object's home or component interface.
    final ComponentView view = context.getPrivateData(ComponentView.class);
    if (view != null) {
        Ejb2xViewType viewType = view.getPrivateData(Ejb2xViewType.class);
        if (viewType != null) {
            //this means it is an EJB 2.x view
            //which is not allowed to remove while enrolled in a TX
            final StatefulTransactionMarker marker = context.getPrivateData(StatefulTransactionMarker.class);
            if (marker != null && !marker.isFirstInvocation()) {
                throw EjbLogger.ROOT_LOGGER.cannotRemoveWhileParticipatingInTransaction();
            }
        }
    }
    // just log a WARN and throw back the original exception
    if (component instanceof StatefulSessionComponent == false) {
        throw EjbLogger.ROOT_LOGGER.unexpectedComponent(component, StatefulSessionComponent.class);
    }
    final StatefulSessionComponent statefulComponent = (StatefulSessionComponent) component;
    Object invocationResult = null;
    try {
        // proceed
        invocationResult = context.proceed();
    } catch (Exception e) {
        // then just throw back the exception and don't remove the session instance.
        if (this.isApplicationException(statefulComponent, e.getClass(), context.getMethod()) && this.retainIfException) {
            throw e;
        }
        // otherwise, just remove it and throw back the original exception
        final StatefulSessionComponentInstance statefulComponentInstance = (StatefulSessionComponentInstance) context.getPrivateData(ComponentInstance.class);
        final SessionID sessionId = statefulComponentInstance.getId();
        statefulComponent.removeSession(sessionId);
        throw e;
    }
    final StatefulSessionComponentInstance statefulComponentInstance = (StatefulSessionComponentInstance) context.getPrivateData(ComponentInstance.class);
    final SessionID sessionId = statefulComponentInstance.getId();
    // just remove the session because of a call to @Remove method
    statefulComponent.removeSession(sessionId);
    // return the invocation result
    return invocationResult;
}
Also used : ComponentView(org.jboss.as.ee.component.ComponentView) ComponentInstance(org.jboss.as.ee.component.ComponentInstance) Ejb2xViewType(org.jboss.as.ejb3.component.Ejb2xViewType) EJBComponent(org.jboss.as.ejb3.component.EJBComponent) Component(org.jboss.as.ee.component.Component) SessionID(org.jboss.ejb.client.SessionID)

Example 9 with SessionID

use of org.jboss.ejb.client.SessionID in project wildfly by wildfly.

the class StatefulIdentityInterceptor method processInvocation.

@Override
public Object processInvocation(final InterceptorContext context) throws Exception {
    if (context.getMethod().getName().equals("equals") || context.getMethod().getName().equals("isIdentical")) {
        final Object other = context.getParameters()[0];
        final ComponentView componentView = context.getPrivateData(ComponentView.class);
        final Class<?> proxyType = componentView.getProxyClass();
        final SessionID sessionId = context.getPrivateData(SessionID.class);
        if (proxyType.isAssignableFrom(other.getClass())) {
            //SessionIdHolder as the other side
            return other.equals(new SessionIdHolder(sessionId));
        } else if (other instanceof SessionIdHolder) {
            return sessionId.equals(((SessionIdHolder) other).sessionId);
        } else {
            return false;
        }
    } else if (context.getMethod().getName().equals("hashCode")) {
        final SessionID sessionId = context.getPrivateData(SessionID.class);
        //use the identity of the component view as a hash code
        return sessionId.hashCode();
    } else {
        return context.proceed();
    }
}
Also used : ComponentView(org.jboss.as.ee.component.ComponentView) SessionID(org.jboss.ejb.client.SessionID)

Example 10 with SessionID

use of org.jboss.ejb.client.SessionID in project wildfly by wildfly.

the class AssociationImpl method receiveSessionOpenRequest.

@Override
@NotNull
public CancelHandle receiveSessionOpenRequest(@NotNull final SessionOpenRequest sessionOpenRequest) {
    final EJBIdentifier ejbIdentifier = sessionOpenRequest.getEJBIdentifier();
    final String appName = ejbIdentifier.getAppName();
    final String moduleName = ejbIdentifier.getModuleName();
    final String beanName = ejbIdentifier.getBeanName();
    final String distinctName = ejbIdentifier.getDistinctName();
    final EjbDeploymentInformation ejbDeploymentInformation = findEJB(appName, moduleName, distinctName, beanName);
    if (ejbDeploymentInformation == null) {
        sessionOpenRequest.writeNoSuchEJB();
        return CancelHandle.NULL;
    }
    final Component component = ejbDeploymentInformation.getEjbComponent();
    if (!(component instanceof StatefulSessionComponent)) {
        sessionOpenRequest.writeNotStateful();
        return CancelHandle.NULL;
    }
    final StatefulSessionComponent statefulSessionComponent = (StatefulSessionComponent) component;
    // generate the session id and write out the response, possibly on a separate thread
    final AtomicBoolean cancelled = new AtomicBoolean();
    Runnable runnable = () -> {
        if (cancelled.get()) {
            sessionOpenRequest.writeCancelResponse();
            return;
        }
        final SessionID sessionID;
        try {
            sessionID = statefulSessionComponent.createSessionRemote();
        } catch (Exception t) {
            EjbLogger.REMOTE_LOGGER.exceptionGeneratingSessionId(t, statefulSessionComponent.getComponentName(), ejbIdentifier);
            sessionOpenRequest.writeException(t);
            return;
        }
        sessionOpenRequest.convertToStateful(sessionID);
    };
    execute(sessionOpenRequest, runnable, false);
    return ignored -> cancelled.set(true);
}
Also used : DeploymentRepositoryListener(org.jboss.as.ejb3.deployment.DeploymentRepositoryListener) NotNull(org.wildfly.common.annotation.NotNull) ModuleDeployment(org.jboss.as.ejb3.deployment.ModuleDeployment) ClusterTopologyListener(org.jboss.ejb.server.ClusterTopologyListener) SessionBeanComponent(org.jboss.as.ejb3.component.session.SessionBeanComponent) Future(java.util.concurrent.Future) EJBComponentUnavailableException(org.jboss.as.ejb3.component.EJBComponentUnavailableException) Map(java.util.Map) Affinity(org.jboss.ejb.client.Affinity) SecurityIdentity(org.wildfly.security.auth.server.SecurityIdentity) DeploymentModuleIdentifier(org.jboss.as.ejb3.deployment.DeploymentModuleIdentifier) InvocationRequest(org.jboss.ejb.server.InvocationRequest) Method(java.lang.reflect.Method) StatefulSessionComponent(org.jboss.as.ejb3.component.stateful.StatefulSessionComponent) Registry(org.wildfly.clustering.registry.Registry) CancellationException(java.util.concurrent.CancellationException) StatefulEJBLocator(org.jboss.ejb.client.StatefulEJBLocator) Set(java.util.Set) InterceptorContext(org.jboss.invocation.InterceptorContext) Collectors(java.util.stream.Collectors) ClientMapping(org.jboss.as.network.ClientMapping) EJBException(javax.ejb.EJBException) ModuleAvailabilityListener(org.jboss.ejb.server.ModuleAvailabilityListener) List(java.util.List) EjbDeploymentInformation(org.jboss.as.ejb3.deployment.EjbDeploymentInformation) EJBLocator(org.jboss.ejb.client.EJBLocator) Request(org.jboss.ejb.server.Request) ComponentIsStoppedException(org.jboss.as.ee.component.ComponentIsStoppedException) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) Connection(org.jboss.remoting3.Connection) HashMap(java.util.HashMap) EJBIdentifier(org.jboss.ejb.client.EJBIdentifier) ArrayList(java.util.ArrayList) StatelessSessionComponent(org.jboss.as.ejb3.component.stateless.StatelessSessionComponent) DeploymentRepository(org.jboss.as.ejb3.deployment.DeploymentRepository) SessionOpenRequest(org.jboss.ejb.server.SessionOpenRequest) CancellationFlag(org.jboss.as.ejb3.component.interceptors.CancellationFlag) Executor(java.util.concurrent.Executor) Association(org.jboss.ejb.server.Association) ComponentView(org.jboss.as.ee.component.ComponentView) IOException(java.io.IOException) InvocationType(org.jboss.as.ee.component.interceptors.InvocationType) EJBMethodLocator(org.jboss.ejb.client.EJBMethodLocator) SessionID(org.jboss.ejb.client.SessionID) EjbLogger(org.jboss.as.ejb3.logging.EjbLogger) ListenerHandle(org.jboss.ejb.server.ListenerHandle) EJBClientInvocationContext(org.jboss.ejb.client.EJBClientInvocationContext) Component(org.jboss.as.ee.component.Component) CancelHandle(org.jboss.ejb.server.CancelHandle) Collections(java.util.Collections) AtomicBoolean(java.util.concurrent.atomic.AtomicBoolean) EjbDeploymentInformation(org.jboss.as.ejb3.deployment.EjbDeploymentInformation) StatefulSessionComponent(org.jboss.as.ejb3.component.stateful.StatefulSessionComponent) SessionBeanComponent(org.jboss.as.ejb3.component.session.SessionBeanComponent) StatefulSessionComponent(org.jboss.as.ejb3.component.stateful.StatefulSessionComponent) StatelessSessionComponent(org.jboss.as.ejb3.component.stateless.StatelessSessionComponent) Component(org.jboss.as.ee.component.Component) EJBIdentifier(org.jboss.ejb.client.EJBIdentifier) SessionID(org.jboss.ejb.client.SessionID) EJBComponentUnavailableException(org.jboss.as.ejb3.component.EJBComponentUnavailableException) CancellationException(java.util.concurrent.CancellationException) EJBException(javax.ejb.EJBException) ComponentIsStoppedException(org.jboss.as.ee.component.ComponentIsStoppedException) IOException(java.io.IOException) NotNull(org.wildfly.common.annotation.NotNull)

Aggregations

SessionID (org.jboss.ejb.client.SessionID)11 Component (org.jboss.as.ee.component.Component)3 ComponentView (org.jboss.as.ee.component.ComponentView)3 StatefulSessionComponent (org.jboss.as.ejb3.component.stateful.StatefulSessionComponent)3 EJBComponent (org.jboss.as.ejb3.component.EJBComponent)2 EjbDeploymentInformation (org.jboss.as.ejb3.deployment.EjbDeploymentInformation)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 Method (java.lang.reflect.Method)1 ArrayList (java.util.ArrayList)1 Collections (java.util.Collections)1 Date (java.util.Date)1 HashMap (java.util.HashMap)1 HashSet (java.util.HashSet)1 LinkedList (java.util.LinkedList)1 List (java.util.List)1 Map (java.util.Map)1 Set (java.util.Set)1 CancellationException (java.util.concurrent.CancellationException)1 Executor (java.util.concurrent.Executor)1