// jTDS JDBC Driver for Microsoft SQL Server and Sybase
// Copyright (C) 2004 The jTDS Project
//
// This library 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 library 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 library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
package net.sourceforge.jtds.jdbcx;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.Name;
import javax.naming.RefAddr;
import javax.naming.Reference;
import javax.naming.spi.ObjectFactory;
import net.sourceforge.jtds.jdbc.Driver;
import net.sourceforge.jtds.jdbc.Messages;
/**
* Description
*
* @author
* Alin Sinplean, Holger Rehn
*
* @since
* 0.3
*/
public class JtdsObjectFactory implements ObjectFactory
{
/**
*
*/
public Object getObjectInstance( Object refObj, Name name, Context nameCtx, Hashtable env )
throws Exception
{
Reference ref = (Reference) refObj;
if( ref.getClassName().equals( JtdsDataSource.class.getName() ) )
{
HashMap props = loadProps( ref, new String[]
{
JtdsDataSource.DESCRIPTION,
Driver.APPNAME,
Driver.AUTOCOMMIT,
Driver.BATCHSIZE,
Driver.BINDADDRESS,
Driver.BUFFERDIR,
Driver.BUFFERMAXMEMORY,
Driver.BUFFERMINPACKETS,
Driver.CACHEMETA,
Driver.CHARSET,
Driver.DATABASENAME,
Driver.DOMAIN,
Driver.INSTANCE,
Driver.LANGUAGE,
Driver.LASTUPDATECOUNT,
Driver.LOBBUFFER,
Driver.LOGFILE,
Driver.LOGINTIMEOUT,
Driver.MACADDRESS,
Driver.MAXSTATEMENTS,
Driver.NAMEDPIPE,
Driver.PACKETSIZE,
Driver.PASSWORD,
Driver.PORTNUMBER,
Driver.PREPARESQL,
Driver.PROGNAME,
Driver.SERVERNAME,
Driver.SERVERTYPE,
Driver.SOTIMEOUT,
Driver.SOKEEPALIVE,
Driver.PROCESSID,
Driver.SSL,
Driver.TCPNODELAY,
Driver.TDS,
Driver.USECURSORS,
Driver.USEJCIFS,
Driver.USENTLMV2,
Driver.USEKERBEROS,
Driver.USELOBS,
Driver.USER,
Driver.SENDSTRINGPARAMETERSASUNICODE,
Driver.WSID,
Driver.XAEMULATION
} );
return new JtdsDataSource( props );
}
return null;
}
private HashMap loadProps( Reference ref, String[] props )
{
HashMap config = new HashMap();
HashMap values = new HashMap();
Enumeration c = ref.getAll();
while( c.hasMoreElements() )
{
RefAddr ra = (RefAddr) c.nextElement();
values.put( ra.getType().toLowerCase(), ra.getContent() );
}
for( int i = 0; i < props.length; i ++ )
{
String value = (String) values.get( props[i] );
value = value == null && props[i] != JtdsDataSource.DESCRIPTION ? (String) values.get( Messages.get( props[i] ).toLowerCase() ) : value;
if( value != null )
{
config.put( props[i], value );
}
}
return config;
}
}