org.geotools.arcsde
Class ArcSDEJNDIDataStoreFactory

Object
  extended by ArcSDEJNDIDataStoreFactory
All Implemented Interfaces:
DataAccessFactory, DataStoreFactorySpi, Factory

public class ArcSDEJNDIDataStoreFactory
extends Object
implements DataStoreFactorySpi

A GeoTools DataStore factory to access an ArcSDE database by grabbing the connection pool from a JNDI reference.

This DataStore factory expects the arcsde connection information to be given as a JNDI resource path through the jndiRefName parameter at createDataStore(Map). The resource provided by the JNDI context at that location may be either:

If not an ISessionPool, the object will be used to get one from ArcSDEConnectionFactory. Whether the resulting session (connection) pool is shared among ArcSDEDataStore instances is dependent on how the JNDI resource is externally configured. For example, on the J2EE container, it will depend on if the JNDI resource is globally configured or not, and the required jar files are on a J2EE container shared libraries folder or not.

Since:
2.5.7
Author:
Gabriel Roldan (OpenGeo)

Nested Class Summary
 
Nested classes/interfaces inherited from interface DataAccessFactory
DataAccessFactory.Param
 
Field Summary
static DataAccessFactory.Param JNDI_REFNAME
          JNDI context path name
 
Constructor Summary
ArcSDEJNDIDataStoreFactory()
           
 
Method Summary
 boolean canProcess(Map<String,Serializable> params)
          Returns whether this factory could process the given parameters.
 DataStore createDataStore(Map<String,Serializable> params)
          Creates and ArcSDEDataStore from the provided params, where the connection pool is provided by JNDI.
 DataStore createNewDataStore(Map<String,Serializable> params)
           
 String getDescription()
          Describe the nature of the datasource constructed by this factory.
 String getDisplayName()
          Name suitable for display to end user.
 Map<RenderingHints.Key,?> getImplementationHints()
          Map of hints (maybe unmodifiable) used by this factory to customize its use.
 DataAccessFactory.Param[] getParametersInfo()
          Provides the datastore creation parameter metadata for this factory.
 boolean isAvailable()
          Determines if the datastore is available.
 
Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

JNDI_REFNAME

public static final DataAccessFactory.Param JNDI_REFNAME
JNDI context path name

Constructor Detail

ArcSDEJNDIDataStoreFactory

public ArcSDEJNDIDataStoreFactory()
Method Detail

createDataStore

public DataStore createDataStore(Map<String,Serializable> params)
                          throws IOException
Creates and ArcSDEDataStore from the provided params, where the connection pool is provided by JNDI.

See getParametersInfo() to check which datastore creation parameters are expected by this factory method.

Specified by:
createDataStore in interface DataAccessFactory
Specified by:
createDataStore in interface DataStoreFactorySpi
Parameters:
params - The full set of information needed to construct a live data store. Typical key values for the map include: url - location of a resource, used by file reading datasources. dbtype - the type of the database to connect to, e.g. postgis, mysql
Returns:
The created DataStore, this may be null if the required resource was not found or if insufficent parameters were given. Note that canProcess() should have returned false if the problem is to do with insuficent parameters.
Throws:
IOException - if there were any problems setting up (creating or connecting) the datasource.
See Also:
DataStoreFactorySpi.createDataStore(java.util.Map)

canProcess

public boolean canProcess(Map<String,Serializable> params)
Returns whether this factory could process the given parameters. That is, it does not check the validity of the parameter, it only asserts the JNDI_REFNAME parameter is present. That is so so any failure is handled by createDataStore(Map) instead of getting client code silently failing (as this method does not throw an exception)

Specified by:
canProcess in interface DataAccessFactory
Parameters:
params - The full set of information needed to construct a live data source.
Returns:
booean true if and only if this factory can process the resource indicated by the param set and all the required params are pressent.
See Also:
DataAccessFactory.canProcess(java.util.Map)

getDescription

public String getDescription()
Description copied from interface: DataAccessFactory
Describe the nature of the datasource constructed by this factory.

A non localized description of this data store type.

Specified by:
getDescription in interface DataAccessFactory
Returns:
A human readable description that is suitable for inclusion in a list of available datasources.
See Also:
DataAccessFactory.getDescription()

getDisplayName

public String getDisplayName()
Description copied from interface: DataAccessFactory
Name suitable for display to end user.

A non localized display name for this data store type.

Specified by:
getDisplayName in interface DataAccessFactory
Returns:
A short name suitable for display in a user interface.
See Also:
DataAccessFactory.getDisplayName()

getParametersInfo

public DataAccessFactory.Param[] getParametersInfo()
Provides the datastore creation parameter metadata for this factory.

The returned parameters are:

Specified by:
getParametersInfo in interface DataAccessFactory
Returns:
Param array describing the Map for createDataStore
See Also:
DataAccessFactory.getParametersInfo()

isAvailable

public boolean isAvailable()
Determines if the datastore is available.

Check in an Initial Context is available, that is all what can be done Checking for the right jdbc jars in the classpath is not possible here

Specified by:
isAvailable in interface DataAccessFactory
Returns:
true if and only if this factory has all the appropriate jars on the classpath to create DataStores.
See Also:
DataAccessFactory.isAvailable()

getImplementationHints

public Map<RenderingHints.Key,?> getImplementationHints()
Description copied from interface: Factory
Map of hints (maybe unmodifiable) used by this factory to customize its use. This map is not guaranteed to contains all the hints supplied by the user; it may be only a subset. Consequently, hints provided here are usually not suitable for creating new factories, unless the implementation make some additional garantees (e.g. FactoryUsingVolatileDependencies).

The primary purpose of this method is to determine if an existing factory instance can be reused for a set of user-supplied hints. This method is invoked by FactoryRegistry in order to compare this factory's hints against user's hints. This is dependency introspection only; FactoryRegistry never invokes this method for creating new factories.

Keys are usually static constants from the Hints class, while values are instances of some key-dependent class. The key set must contains at least all hints impacting functionality. While the key set may contains all hints supplied by the user, it is recommended to limit the set to only the hints used by this particular factory instance. A minimal set will helps FactoryRegistry to compare only hints that matter and avoid the creation of unnecessary instances of this factory.

The hint values may be different than the one supplied by the user. If a user supplied a hint as a Class object, this method shall replace it by the actual instance used, if possible.

Implementations of this method are usually quite simple. For example if a datum authority factory uses an ordinary datum factory, its method could be implemented as below (note that we should not check if the datum factory is null, since key with null value is the expected behaviour in this case). Example:


 Map hints = new HashMap();
 hints.put(Hints.DATUM_FACTORY, datumFactory);
 return hints;
 

Specified by:
getImplementationHints in interface Factory
Returns:
The map of hints, or an empty map if none.
See Also:
Factory.getImplementationHints()

createNewDataStore

public DataStore createNewDataStore(Map<String,Serializable> params)
                             throws IOException
Specified by:
createNewDataStore in interface DataStoreFactorySpi
Throws:
IOException
See Also:
DataStoreFactorySpi.createNewDataStore(java.util.Map)


Copyright © 1996-2014 Geotools. All Rights Reserved.