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.
   *
   * 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.ejb3.client;
 
 import java.net.URL;
 
 
 import  org.jboss.ejb3.BeanContext;
 import  org.jboss.injection.AbstractPropertyInjector;
 import  org.jboss.injection.PojoInjector;
 import  org.jboss.injection.lang.reflect.BeanProperty;
Injects a jndi dependency into a bean property.

Author(s):
Bill Burke
Carlo de Wolf
Scott.Stark@jboss.org
Version:
$Revision: $
 
 public class JndiPropertyInjector extends AbstractPropertyInjector
    implements PojoInjector
 {
    private static final Logger log = Logger.getLogger(JndiPropertyInjector.class);
    
    private String jndiName;
    private Context ctx;
 
    public JndiPropertyInjector(BeanProperty propertyString jndiName,
          Context ctx)
    {
       super(property);
       this. = jndiName;
       this. = ctx;
    }
 
    public void inject(BeanContext bctx)
    {
    }
    
    public Class<?> getInjectionClass()
    {
       return property.getType();
    }
    
    public void inject(BeanContext bctxObject instance)
    {
    }
 
    public void inject(Object instance)
    {
       Object value = lookup();
       .trace("injecting " + value + " from " +  + " into " + property + " of " + instance);
       try
       {
          property.set(instancevalue);
       }
       catch(IllegalArgumentException e)
       {
          Class c1 = value.getClass();
          StringBuffer buffer = new StringBuffer("Jndi value '"++"' class info:");
          displayClassInfo(c1buffer);
          .debug("Failed to inject jndi property, "+buffer);
          Class c2 = property.getType();
          buffer.setLength(0);
          buffer.append("Field "+property.getName()+" class info:");
          displayClassInfo(c2buffer);
          .debug(", "+buffer);
          throw e;
       }
    }
 
    protected Object lookup(String jndiName)
   {
      Object dependency = null;
      boolean trace = .isTraceEnabled();
      try
      {
         if(trace)
            .trace("Looking for enc entry: "+jndiName);
         dependency = .lookup(jndiName);
         if(trace)
            .trace("Success: "+dependency);
      }
      catch (NamingException e)
      {
         // Try as a global jndi name
         if(trace)
            .trace("Failed enc lookup: "+e.getExplanation());
         try
         {
            if(trace)
               .trace("Failed trying as global entry: "+jndiName);
            InitialContext ictx = new InitialContext(.getEnvironment());
            dependency = ictx.lookup(jndiName);
            if(trace)
               .trace("Success: "+dependency);
         }
         catch(NamingException e2)
         {
            if(trace)
               .trace("Failed global lookup: "+e2.getExplanation());
         }
         if(dependency == null)
         {
            Throwable cause = e;
            while(cause.getCause() != null)
               cause = cause.getCause();
            throw new RuntimeException("Unable to inject jndi dependency: " + jndiName + " into property " + property + ": " + cause.getMessage(), e);
         }
      }
      return dependency;
   }
   static void displayClassInfo(Class clazzStringBuffer results)
   {
      // Print out some codebase info for the ProbeHome
      ClassLoader cl = clazz.getClassLoader();
      results.append("\n"+clazz.getName()+".ClassLoader="+cl);
      CodeSource clazzCS = clazz.getProtectionDomain().getCodeSource();
      ifclazzCS != null )
         results.append("\n++++CodeSource: "+clazzCS);
      else
         results.append("\n++++Null CodeSource");
      results.append("\nImplemented Interfaces:");
      Class[] ifaces = clazz.getInterfaces();
      for(int i = 0; i < ifaces.lengthi ++)
      {
         results.append("\n++"+ifaces[i]);
         ClassLoader loader = ifaces[i].getClassLoader();
         results.append("\n++++ClassLoader: "+loader);
         ProtectionDomain pd = ifaces[i].getProtectionDomain();
         CodeSource cs = pd.getCodeSource();
         ifcs != null )
            results.append("\n++++CodeSource: "+cs);
         else
            results.append("\n++++Null CodeSource");
      }
   }
New to GrepCode? Check out our FAQ X