Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source
   * Copyright 2006, Red Hat Middleware LLC, and individual contributors as indicated
   * by the @authors tag. See the copyright.txt in the distribution for a
   * full listing of individual contributors.
   *
   * This is free software; you can redistribute it and/or modify it
   * under the terms of the GNU Lesser General Public License as
   * published by the Free Software Foundation; either version 2.1 of
  * the License, or (at your option) any later version.
  *
  * This software is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
  * License along with this software; if not, write to the Free
  * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.injection;
 
 
 
Injects a jndi dependency into a bean property.

Author(s):
Bill Burke
Carlo de Wolf
Version:
$Revision: $
 
 public class JndiPropertyInjector extends AbstractPropertyInjector implements PojoInjector
 {
    @SuppressWarnings("unused")
    private static final Logger log = Logger.getLogger(JndiPropertyInjector.class);
    
    private String jndiName;
    private Context ctx;
 
    public JndiPropertyInjector(BeanProperty propertyString jndiNameContext ctx)
    {
       super(property);
       this. = jndiName;
       this. = ctx;
    }
 
    public void inject(BeanContext bctx)
    {
       inject(bctxbctx.getInstance());
    }
    
    public Class<?> getInjectionClass()
    {
       return .getType();
    }
    
    protected Object lookup(String jndiName)
    {
       Object dependency = null;
       
       try
       {
          dependency = JndiUtil.lookup(jndiName);
       }
       catch (NamingException e)
       {
          Throwable cause = e;
          while(cause.getCause() != null)
             cause = cause.getCause();
          throw new RuntimeException("Unable to inject jndi dependency: " + jndiName + " into property " +  + ": " + cause.getMessage(), e);
       }
       return dependency;
    }
    
    public void inject(BeanContext bctxObject instance)
    {
       inject(instance);
    }
 
    public void inject(Object instance)
    {
       
       
       
       
       
       Object value = lookup();
      
//      Class<?> valueClass = value.getClass();
//      
//      ClassLoader tcl = Thread.currentThread().getContextClassLoader();
//      ClassLoader classcl = property.getType().getClassLoader();
//      ClassLoader valueCl = valueClass.getClassLoader();
//      ClassLoader proxyHandlerCl = null;
//      if(Proxy.isProxyClass(value.getClass()))
//      {
//         Object proxyHandler = Proxy.getInvocationHandler(value);
//         proxyHandlerCl = proxyHandler.getClass().getClassLoader();
//         
//      }
//      ClassLoader containerCl = SessionSpecContainer.TMP_CL;
//      boolean equalsCl = classcl.equals(valueCl);
      
      .trace("injecting " + value + " from " +  + " into " +  + " of " + instance);
      try
      {
         .set(instancevalue);
      }
      catch(IllegalArgumentException e)
      {
         // We found something to inject, but it happened to be the wrong thing
         String realJndiName;
         try
         {
            // TODO: check whether it's a real link beforehand
            Object link = JndiUtil.lookupLink();
            realJndiName =  + (link instanceof LinkRef ? " (link -> " + ((LinkReflink).getLinkName() + ")" : "");
         }
         catch(NamingException ne)
         {
            .trace("Failed to obtain the real JNDI name"ne);
            realJndiName = ;
         }
         Class<?> interfaces[] = value.getClass().getInterfaces();
         String interfacesStr = (interfaces.length > 0 ? " (implements " + Arrays.toString(interfaces) + ")" : "");
         String msg = "failed to inject " + value + interfacesStr + " from " + realJndiName + " into " +  + " of " + instance;
         throw new IllegalArgumentException(msge);
      }
   }
New to GrepCode? Check out our FAQ X