Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2008, Red Hat, Inc., and individual contributors
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
  * http://www.apache.org/licenses/LICENSE-2.0
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
 package org.jboss.weld.event;
 
 
A task that will notify the observer of a specific event at some future time.

Author(s):
David Allen
Jozef Hartinger
 
 public class DeferredEventNotification<T> implements Runnable {
 
     // The observer
     protected final ObserverMethod<? super T> observer;
     // The event object
     protected final EventPacket<T> eventPacket;
     private final CurrentEventMetadata currentEventMetadata;
     private final String contextId;

    
Creates a new deferred event notifier.

Parameters:
observer The observer to be notified
eventPacket The event being fired
 
     public DeferredEventNotification(String contextIdEventPacket<T> eventPacketObserverMethod<? super T> observerCurrentEventMetadata currentEventMetadata) {
         this. = contextId;
         this. = observer;
         this. = eventPacket;
         this. = currentEventMetadata;
     }
 
     public void run() {
         try {
             ..asyncFire();
             new RunInRequest() {
 
                 @Override
                 protected void execute() {
                     .push();
                     try {
                         .notify(.getPayload());
                     } finally {
                         .pop();
                     }
                 }
 
             }.run();
 
         } catch (Exception e) {
             ..catchingDebug(e);
         }
     }
 
     @Override
     public String toString() {
         return "Deferred event [" + .getPayload() + "] for [" +  + "]";
     }
 
     private abstract static class RunInRequest {
 
         private final String contextId;
 
         public RunInRequest(String contextId) {
             this. = contextId;
         }
 
         protected abstract void execute();
 
         public void run() {
 
             if (isRequestContextActive()) {
                 execute();
             } else {
                 RequestContext requestContext = Container.instance().deploymentManager().instance().select(RequestContext.class.).get();
                 try {
                     requestContext.activate();
                    execute();
                } finally {
                    requestContext.invalidate();
                    requestContext.deactivate();
                }
            }
        }
        private boolean isRequestContextActive() {
            for (RequestContext requestContext : Container.instance().deploymentManager().instance().select(RequestContext.class)) {
                if (requestContext.isActive()) {
                    return true;
                }
            }
            return false;
        }
    }
New to GrepCode? Check out our FAQ X