Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2008, Red Hat Middleware LLC, 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.integration.webtier.jsf;
 
 import  javax.el.ELContextListener;
 import  javax.el.ELResolver;
 import  javax.el.ExpressionFactory;
 import  javax.faces.application.Application;
 

Author(s):
pmuir
 
 public class WeldApplication extends ForwardingApplication
 {
 
    private static class AdjustableELResolver extends ForwardingELResolver
    {
 
       private ELResolver delegate;
 
       public void setDelegate(ELResolver delegate)
       {
          this. = delegate;
       }
 
       @Override
       protected ELResolver delegate()
       {
          return ;
       }
    }
 
 
    private final Application application;
    private volatile ExpressionFactory expressionFactory;
    private volatile boolean initialized;
 
    public WeldApplication(Application application)
    {
       this. = application;
       application.addELContextListener(Reflections.<ELContextListener>newInstance("org.jboss.weld.el.WeldELContextListener"));
        = new AdjustableELResolver();
       application.addELResolver();
    }
 
    private void init()
    {
       if (! && beanManager() != null)
       {
           = true;
       }
    }
 
    @Override
    protected Application delegate()
    {
       init();
       return ;
    }
 
    @Override
    public ExpressionFactory getExpressionFactory()
    {
       init();
       // may be improved for thread safety, but right now the only risk is to invoke wrapExpressionFactory
       // multiple times for concurrent threads. This is ok, as the call is 
       if ( == null) {
          = beanManager().wrapExpressionFactory(.getExpressionFactory());
       }
       return ;
    }
 
    private static BeanManager beanManager()
    {
       try
       {
         return (BeanManagernew InitialContext().lookup("java:comp/BeanManager");
      }
      catch (NamingException e)
      {
         throw new IllegalStateException("Unable to lookup java:comp/BeanManager"e);
      }
   }
New to GrepCode? Check out our FAQ X