@Override
 public Object processInvocation(final InterceptorContext context) throws Exception {
   final Object instance = context.getPrivateData(ComponentInstance.class).getInstance();
   try {
     return method.invoke(instance, context.getPrivateData(PARAMETERS_KEY));
   } catch (InvocationTargetException e) {
     throw Interceptors.rethrow(e.getCause());
   }
 }
  @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) {
      // Exception caught during call to @Remove method. Handle it appropriately

      // If it's an application exception and if the @Remove method has set "retainIfException" to
      // true
      // 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;
  }
 public boolean wasCancelCalled() throws IllegalStateException {
   final CancellationFlag flag = context.getPrivateData(CancellationFlag.class);
   if (flag != null) {
     return flag.get();
   }
   return super.wasCancelCalled();
 }
 /**
  * Processes an incoming invocation and checks for the presence of a remote transaction associated
  * with the invocation context.
  *
  * @param context The invocation context
  * @return
  * @throws Exception
  */
 @Override
 public Object processInvocation(InterceptorContext context) throws Exception {
   final RemotingAttachments remotingAttachments =
       context.getPrivateData(RemotingAttachments.class);
   final TransactionManager transactionManager =
       this.ejbRemoteTransactionsRepository.getTransactionManager();
   Transaction originatingRemoteTx = null;
   if (remotingAttachments != null) {
     // get the transaction attachment
     final byte[] transactionIDBytes = remotingAttachments.getPayloadAttachment(0x0001);
     // A (remote) tx is associated with the invocation, so propogate it appropriately
     if (transactionIDBytes != null) {
       final TransactionID transactionID = TransactionID.createTransactionID(transactionIDBytes);
       // if it's UserTransaction then create or resume the UserTransaction corresponding to the ID
       if (transactionID instanceof UserTransactionID) {
         this.createOrResumeUserTransaction((UserTransactionID) transactionID);
       } else if (transactionID instanceof XidTransactionID) {
         this.createOrResumeXidTransaction((XidTransactionID) transactionID);
       }
       // the invocation was associated with a remote tx, so keep a flag so that we can
       // suspend (on this thread) the originating tx when returning from the invocation
       originatingRemoteTx = transactionManager.getTransaction();
     }
   }
   try {
     // we are done with any tx propogation setup, let's move on
     return context.proceed();
   } finally {
     // suspend the originating remote tx on this thread now that the invocation has been done
     if (originatingRemoteTx != null) {
       transactionManager.suspend();
     }
   }
 }
  @Override
  public Object processInvocation(InterceptorContext interceptorContext) throws Exception {
    try {

      return interceptorContext.proceed();
    } finally {
      StatefulSessionComponentInstance sfsb =
          (StatefulSessionComponentInstance)
              interceptorContext.getPrivateData(ComponentInstance.class);
      SFSBContextHandleImpl sfsbContextHandle = new SFSBContextHandleImpl(sfsb);
      List<EntityManager> readyToClose = SFSBXPCMap.getINSTANCE().remove(sfsbContextHandle);
      if (readyToClose != null && readyToClose.size() > 0) {
        for (EntityManager entityManager : readyToClose) {
          if (entityManager instanceof ExtendedEntityManager) {
            // TODO:  continue iterating through remaining entity managers and chain any exceptions
            ((ExtendedEntityManager) entityManager).containerClose();
          } else {
            throw new RuntimeException(
                "can only close SFSB XPC entity manager that are instances of ExtendedEntityManager"
                    + entityManager.getClass().getName());
          }
        }
      }
    }
  }
예제 #6
0
  /** @return The primary key of the current EJB, or null if not applicable */
  private Object currentPrimaryKey() {

    final InterceptorContext context = CurrentInvocationContext.get();

    if (context == null) {
      return null;
    }
    return context.getPrivateData(EntityBeanComponent.PRIMARY_KEY_CONTEXT_KEY);
  }
 @Override
 public Object getInstance() {
   // get the current invocation context and the EJBComponent out of it
   final InterceptorContext currentInvocationContext = CurrentInvocationContext.get();
   final EJBComponent ejbComponent =
       (EJBComponent) currentInvocationContext.getPrivateData(Component.class);
   if (ejbComponent == null) {
     throw MESSAGES.failToGetEjbComponent(currentInvocationContext);
   }
   return ejbComponent.getTimerService();
 }
 @Override
 public Object processInvocation(InterceptorContext context) throws Exception {
   final Method invokedMethod = context.getMethod();
   final ComponentViewInstance componentViewInstance =
       context.getPrivateData(ComponentViewInstance.class);
   // For a lifecycle interception, the ComponentViewInstance (and the invoked business interface)
   // will be null.
   // On a normal method invocation, the invoked business interface will be obtained from the
   // ComponentViewInstance
   final Class<?> invokedBusinessInterface =
       componentViewInstance == null ? null : componentViewInstance.getViewClass();
   Object[] parameters = context.getParameters();
   SessionInvocationContext sessionInvocationContext =
       new CustomSessionInvocationContext(
           lifecycleCallback, context, invokedBusinessInterface, invokedMethod, parameters);
   context.putPrivateData(InvocationContext.class, sessionInvocationContext);
   CurrentInvocationContext.push(sessionInvocationContext);
   try {
     return context.proceed();
   } finally {
     CurrentInvocationContext.pop();
     context.putPrivateData(InvocationContext.class, null);
   }
 }
예제 #9
0
 public Object processInvocation(final InterceptorContext context) throws Exception {
   context.getPrivateData(ComponentViewInstance.class).destroy();
   return null;
 }
예제 #10
0
 public Object processInvocation(final InterceptorContext context) throws Exception {
   ComponentView view = context.getPrivateData(ComponentView.class);
   return view.invoke(context);
 }
예제 #11
0
 protected SessionID getSessionIdOf(final InterceptorContext ctx) {
   final StatefulSessionComponentInstance instance =
       (StatefulSessionComponentInstance) ctx.getPrivateData(ComponentInstance.class);
   return instance.getId();
 }
 @Override
 public SessionContext getEJBContext() {
   return ((SessionBeanComponentInstance) context.getPrivateData(ComponentInstance.class))
       .getSessionContext();
 }
 @Override
 public SessionBeanComponent getComponent() {
   // return (SessionBeanComponent) super.getComponent();
   // this is faster
   return (SessionBeanComponent) context.getPrivateData(Component.class);
 }
예제 #14
0
 @Override
 public Object processInvocation(InterceptorContext context) throws Exception {
   return super.invoke(
       (TransactionalInvocationContext) context.getPrivateData(InvocationContext.class));
 }