Save This Page
Home » apache-tomcat-6.0.16-src » org.apache » naming » factory » [javadoc | source]
    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    * 
    9    *      http://www.apache.org/licenses/LICENSE-2.0
   10    * 
   11    * Unless required by applicable law or agreed to in writing, software
   12    * distributed under the License is distributed on an "AS IS" BASIS,
   13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */ 
   17   
   18   
   19   package org.apache.naming.factory;
   20   
   21   import java.util.Hashtable;
   22   import javax.naming.Name;
   23   import javax.naming.Context;
   24   import javax.naming.NamingException;
   25   import javax.naming.Reference;
   26   import javax.naming.RefAddr;
   27   import javax.naming.spi.ObjectFactory;
   28   import org.apache.naming.TransactionRef;
   29   
   30   /**
   31    * Object factory for User trasactions.
   32    * 
   33    * @author Remy Maucherat
   34    * @version $Revision: 467222 $ $Date: 2006-10-24 05:17:11 +0200 (mar., 24 oct. 2006) $
   35    */
   36   
   37   public class TransactionFactory
   38       implements ObjectFactory {
   39   
   40   
   41       // ----------------------------------------------------------- Constructors
   42   
   43   
   44       // -------------------------------------------------------------- Constants
   45   
   46   
   47       // ----------------------------------------------------- Instance Variables
   48   
   49   
   50       // --------------------------------------------------------- Public Methods
   51   
   52   
   53       // -------------------------------------------------- ObjectFactory Methods
   54   
   55   
   56       /**
   57        * Crete a new User transaction instance.
   58        * 
   59        * @param obj The reference object describing the DataSource
   60        */
   61       public Object getObjectInstance(Object obj, Name name, Context nameCtx,
   62                                       Hashtable environment)
   63           throws Exception {
   64           
   65           if (obj instanceof TransactionRef) {
   66               Reference ref = (Reference) obj;
   67               ObjectFactory factory = null;
   68               RefAddr factoryRefAddr = ref.get(Constants.FACTORY);
   69               if (factoryRefAddr != null) {
   70                   // Using the specified factory
   71                   String factoryClassName = 
   72                       factoryRefAddr.getContent().toString();
   73                   // Loading factory
   74                   ClassLoader tcl = 
   75                       Thread.currentThread().getContextClassLoader();
   76                   Class factoryClass = null;
   77                   if (tcl != null) {
   78                       try {
   79                           factoryClass = tcl.loadClass(factoryClassName);
   80                       } catch(ClassNotFoundException e) {
   81                           NamingException ex = new NamingException
   82                               ("Could not load resource factory class");
   83                           ex.initCause(e);
   84                           throw ex;
   85                       }
   86                   } else {
   87                       try {
   88                           factoryClass = Class.forName(factoryClassName);
   89                       } catch(ClassNotFoundException e) {
   90                           NamingException ex = new NamingException
   91                               ("Could not load resource factory class");
   92                           ex.initCause(e);
   93                           throw ex;
   94                       }
   95                   }
   96                   if (factoryClass != null) {
   97                       try {
   98                           factory = (ObjectFactory) factoryClass.newInstance();
   99                       } catch(Throwable t) {
  100                           if (t instanceof NamingException)
  101                               throw (NamingException) t;
  102                           NamingException ex = new NamingException
  103                               ("Could not create resource factory instance");
  104                           ex.initCause(t);
  105                           throw ex;
  106                       }
  107                   }
  108               }
  109               if (factory != null) {
  110                   return factory.getObjectInstance
  111                       (obj, name, nameCtx, environment);
  112               } else {
  113                   throw new NamingException
  114                       ("Cannot create resource instance");
  115               }
  116               
  117           }
  118           
  119           return null;
  120           
  121       }
  122   
  123   
  124   }
  125   

Save This Page
Home » apache-tomcat-6.0.16-src » org.apache » naming » factory » [javadoc | source]