Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * $Id: DataSourceFactory.java 56807 2011-11-20 17:24:12Z mrotteveel $
   * 
   * Firebird Open Source J2EE Connector - JDBC Driver
   *
   * Distributable under LGPL license.
   * You may obtain a copy of the License at http://www.gnu.org/copyleft/lgpl.html
   *
   * This program 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
  * LGPL License for more details.
  *
  * This file was created by members of the firebird development team.
  * All individual contributions remain the Copyright (C) of those
  * individuals.  Contributors to this file are either listed here or
  * can be obtained from a CVS history command.
  *
  * All rights reserved.
  */
 package org.firebirdsql.ds;
 
 
 
ObjectFactory for the DataSources in org.firebirdsql.ds.

Author(s):
Mark Rotteveel
Since:
2.2
 
 public class DataSourceFactory implements ObjectFactory {
 
     public Object getObjectInstance(Object objName nameContext nameCtx,
             Hashtable<?, ?> environmentthrows Exception {
 
         Reference ref = (Reference)obj;
         String className = ref.getClassName();
         if (className.equals("org.firebirdsql.ds.FBConnectionPoolDataSource")) {
             return loadConnectionPoolDS(ref);
         }
         if (className.equals("org.firebirdsql.ds.FBXADataSource")) {
             return loadXADS(ref);
         }
         
         return null;
     }
 
     private Object loadConnectionPoolDS(Reference refthrows Exception {
         loadAbstractCommonDataSource(dsref);
         
         return ds;
     }
     
     private Object loadXADS(Reference refthrows Exception {
         FBXADataSource ds = new FBXADataSource();
         loadAbstractCommonDataSource(dsref);
         
         return ds;
     }
     
     private void loadAbstractCommonDataSource(FBAbstractCommonDataSource dsReference refthrows Exception {
         RefAddr propertyContent = ref.get(.);
         if (propertyContent != null) {
             byte[] data = (byte[]) propertyContent.getContent();
             FBConnectionProperties props = (FBConnectionPropertiesdeserialize(data);
             ds.setConnectionProperties(props);
         }
         String oldDatabase = ds.getConnectionProperties().getDatabase();
         String portNumber = getRefAddr(ref.);
         if (portNumber != null) {
             ds.setPortNumber(Integer.parseInt(portNumber));
         }
         /*
          * When the user uses the database property instead of databaseName (with serverName and portNumber),
          * then the database connection property might be set to null now, so restore original value
          */
         ds.getConnectionProperties().setDatabase(oldDatabase);
     }
    
    
Retrieves the content of the given Reference address (type).

Parameters:
ref Reference
type Address or type
Returns:
Content as String
    protected static String getRefAddr(Reference refString type) {
        RefAddr addr = ref.get(type);
        if (addr == null) {
            return null;
        } 
        Object content = addr.getContent();
        return content != null ? content.toString() : null;
    }
    
    protected static byte[] serialize(Object obj) {
        ByteArrayOutputStream bout = new ByteArrayOutputStream();
        
        try {
            ObjectOutputStream out = new ObjectOutputStream(bout);
            out.writeObject(obj);
            out.flush();
        } catch(IOException ex) {
            return null;
        }
        
        return bout.toByteArray();
    }
    protected static Object deserialize(byte[] data) {
        ByteArrayInputStream bin = new ByteArrayInputStream(data);
        
        try {
            ObjectInputStream in = new ObjectInputStream(bin);
            return in.readObject();
        } catch(IOException ex) {
            return null;
        } catch(ClassNotFoundException ex) {
            return null;
        }
    }
New to GrepCode? Check out our FAQ X