16-8 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
close any open FileReader or FileWriter instances. close connection with the target
close connection if any with database }
16.3.1.1.3 Implementing the getConfiguration Method
The getConfiguration method returns the Configuration instance passed to the Connector when the init method was used.
Example 16–13 illustrates how to
implement the getConfiguration method.
Example 16–13 getConfiguration Method Implementation
returns the Configuration of this connector Override
public Configuration getConfiguration { return this.flatFileConfig;
}
16.3.1.2 org.identityconnectors.framework.spi.Configuration
The implementation of this interface encapsulates the configuration of a connector. Configuration implementation includes all the necessary information of the target
system, which is used by the Connector implementation to connect to the target system and perform various reconciliation and provisioning operations. The
implementation should have a default Constructor with setters and getters defined for its properties. Every property declared may not be required but if a property is
required, then it should be marked required using the annotation org.identityconnectors.framework.spi.ConfigurationProperty. Configuration
implementation is a Java bean and all the instance variables mandatory or not do have default values. For example, a string userName is used to connect to the target
system and this is a mandatory attribute. This has a default value of null. When userName is a mandatory attribute, ICF expects a value to be provided by Oracle
Identity Manager. In other words, Oracle Identity Manager cannot miss out this parameter. If missed, then the connector throws ConfigurationException.
The implementation should check that all required properties are available and validated before passing itself to the Connector. The interface provides a validate
method for this purpose. For example, there are three mandatory configuration parameters, such as the IP address of the target, the username to connect to the target,
and the password for the user. The validate method implementation can check for non-NULL values and valid IP address by using regex.
Note: Sometimes, components must be able to access the
Configuration instance after initialization. This is supported by the accessor method getConfiguration.
Note:
ICF also provides a convenient base class org.identityconnectors.framework.spi.AbstractConfiguration for
configuration objects to extend.
Understanding the Identity Connector Framework 16-9
Example 16–14 Configuration Implementation
Configuration implementation for the flat file connector. public class FlatFileConfigurationImpl extends AbstractConfiguration{
The following sections contain information and sample code that illustrates how you might implement the Configuration methods.
The Configuration implementation must provide implementation for the following methods:
■
The validate Method
■
The setConnectorMessages Method
■
The getConnectorMessages Method
16.3.1.2.1 The validate Method
The validate method checks that the values of all required properties are set. It also validates that all values of configuration properties are valid. In other words, it
validates that all values of the configuration properties are in the expected range and have the expected format. If the configuration is not valid, then the implementations
generate the most specific RuntimeException available. When no specific exception is available, the implementations can throw ConfigurationException.
Example 16–15 illustrates how to implement the validate method.
Example 16–15 validate Method Implementation
Override public void validate {
Validate if file exists and is usable boolean validFile = this.storeFile.exists
this.storeFile.canRead this.storeFile.canWrite
this.storeFile.isFile; if validFile
throw new ConfigurationExceptionUser store file not valid; FlatFileIOFactory.getInstancethis;
}
Here, if the target flat file provided is valid or not is checked, such as is a file, is writeable, is readable. If not valid, then an exception is generated.
Implementations of the validate method should NOT connect to the target system to validate the properties.
16.3.1.2.2 The setConnectorMessages Method
The setConnectorMessages method sets the org.identityconnectors.framework.common.objects.ConnectorMessages message
catalog instance, allowing the Connector to localize messages. Example 16–16
illustrates the setConnectorMessages method definition.
Note: This implementation depends on an instance variable private
File storeFile and a supporting class FlatFileIOFactory. A complete implementation is illustrated in
Developing a Flat File Connector on
page 17-1.
16-10 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
Example 16–16 setConnectorMessages Method Definition
public final void setConnectorMessagesConnectorMessages messages { _connectorMessages = messages;
}
16.3.1.2.3 The getConnectorMessages Method
The getConnectorMessages method returns the ConnectorMessages set by the setConnectorMessages method.
Example 16–17 illustrates the getConnectorMessages
method definition.
Example 16–17 getConnectorMessages Method Definition
public final ConnectorMessages getConnectorMessages { return _connectorMessages;
}
16.3.2 Implementing the Feature-based Interfaces
The following sections contain information on the interfaces used to enable identity connector pooling and attribute normalizing.
■
org.identityconnectors.framework.spi.PoolableConnector
■
org.identityconnectors.framework.spi.AttributeNormalizer
16.3.2.1 org.identityconnectors.framework.spi.PoolableConnector
Connection pooling by ICF is a feature provided by the ICF in which the framework maintains a pool of connector instances and uses them while performing provisioning
and reconciliation operations. Connectors can make use of pooling by implementing the PoolableConnector interface instead of plain Connector interface. To make use of
this feature, implement the PoolableConnector interface. If you implement the Connector interface, then ICF creates a new connector instance for every operation,
creates a new connection with the target, completes the provisioningreconciliation operation, removes the connection with the target system, and finally disposes this
connector instance. Therefore, the advantages of implementing PoolableConnector is that a pool of configurable connector instances are maintained and are reused for
many operations.
Some of configurable options are:
■
Maximum connector objects in the pool that are idle and active _maxObjects
■
Maximum connector objects that are idle _maxIdle
■
Max time to wait if the pool is waiting for a free object to become available before failing _maxWait
■
Minimum time to wait before evicting an idle object _minEvictableIdleTimeMillis
■
Minimum number of idle objects _minIdle These values must be set by connector API developer, and if not provided, then the
following default values are used:
■
_maxObjects = 10
■
_maxIdle = 10
Understanding the Identity Connector Framework 16-11
■
_maxWait = 150 1000 ms
■
_minEvictableIdleTimeMillis = 120 1000 ms
■
_minIdle = 1 The PoolableConnector interface extends the Connector interface. It is implemented to
enable identity connector pooling that ICF provides. ICF must make sure that the Connector instance is alive before being used. For this purpose, the interface provides
a checkAlive method. Example 16–18
is a sample flat file PoolableConnector implementation.
Example 16–18 Flat File Poolable Connector Implementation
Flat file connector implementation. This is a poolable connector which supports create, delete, search and update operations.
ConnectorClass configurationClass=FlatFileConfigurationImpl.class,
displayNameKey=FLAT_FILE_CONNECTOR public class FlatFileConnector implements PoolableConnector,
CreateOp, DeleteOp,SearchOpMapString, String,UpdateOp{
To implement the PoolableConnector interface, provide an implementation of the checkAlive method along with all the methods discussed in
Section 16.3.1.1, org.identityconnectors.framework.spi.Connector.
The checkAlive method determines if the Connector instance is alive and can be used for operations on the
target system. checkAlive can be called often thus the developer should make sure the implementation is fast. The method should throw a specific RuntimeException if
available when the Connector is no longer alive. Example 16–19
illustrates how to implement the checkAlive method.
Example 16–19 checkAlive Method Implementation
Checks if this connector is alive, if not throws a RuntimeException Override
public void checkAlive { check if the connector is still connected to target
}
16.3.2.2 org.identityconnectors.framework.spi.AttributeNormalizer
This interface must be implemented by a Connector that needs to normalize any attributes passed to it. A normalizer converts values to a standard form for the
purpose of display, consumption, or comparison. For example, a normalizer might convert text values to a specific case, trim whitespace, or order the elements of a DN in
a specific way.
The interface defines a normalizeAttribute method for this purpose. This method takes an ObjectClass and an Attribute to be normalized as arguments and returns the
normalized Attribute. Attribute normalization is applied during many operations including:
■
Filters that are passed to SearchOp
■
Results returned from SearchOp
16-12 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
■
Results returned from SyncOp
■
Attributes passed to UpdateAttributeValuesOp
■
Uids returned from UpdateAttributeValuesOp
■
Attributes passed to UpdateOp
■
Uids returned from UpdateOp
■
Attributes passed to CreateOp
■
Uids returned from CreateOp
■
Uids passed to DeleteOp Example 16–20
illustrates the normalizeAttribute method definition.
Example 16–20 normalizeAttribute Method Defintion
public Attribute normalizeAttribute ObjectClass oClass, Attribute attribute { if attribute instanceof Uid {
return new UidLdapUtil.createUniformUidStringnewValues.get0, configuration.getSuffix;
} }
16.3.3 Implementing the Operation Interfaces
Each operation interface defines an action that the Connector may perform on a target system, if supported by it. The operation interfaces belong to the
org.identityconnectors.framework.spi.operations package. The names of these operation interfaces are listed below, but subsequent sections elaborate on each
interface:
■
AuthenticateOp
■
CreateOp
■
DeleteOp
■
ResolveUsernameOp
■
SchemaOp
■
ScriptOnConnectorOp
■
ScriptOnResourceOp
■
SearchOpTSyncOp
■
TestOp
■
UpdateAttributeValuesOp
■
UpdateOp The following sections contain more information on some of these operations.
■
Implementing the SchemaOp Interface
■
Implementing the CreateOp Interface
■
Implementing the DeleteOp Interface
■
Implementing the SearchOp Interface
■
Implementing the UpdateOp Interface
Understanding the Identity Connector Framework 16-13
16.3.3.1 Implementing the SchemaOp Interface
The SchemaOp interface is implemented to allow the connector to describe the objects it can handle on the target system. The schema that a connector returns describes the
object-classes that it exposes for management. Each object-class has a name, a description, and a set of attribute definitions. Each attribute definition has a name, a
syntax, and certain flags that describe its properties, such as multi-valued, single-valued, readable, or writeable.
The schema that a connector returns describes the attributes of each type of object that the connector exposes. Sometimes, this requires translation from an internal
representation to this Schema format. In other instances, the Schema presents as an attribute; something that is natively available only via calls to the target API.
Irrespective of how the SPI implementation accomplishes the mapping between the native representation and the corresponding ConnectorObject, the Schema provides
the metadata that describes what a client can expect to find in a ConnectorObject of each type, which is objectClass.
To implement this interface, provide an implementation for the schema method as defined in
Example 16–21 .
Example 16–21 schema Method Signature
public Schema schema The implementation should return the schema containing the types of objects that this
identity connector supports.
Example 16–22 schema Method Implementation
Override public Schema schema {
SchemaBuilder flatFileSchemaBldr = new SchemaBuilderthis.getClass; SetAttributeInfo attrInfos = new HashSetAttributeInfo;
for String fieldName : flatFileMetadata.getOrderedTextFieldNames { AttributeInfoBuilder attrBuilder = new AttributeInfoBuilder;
attrBuilder.setNamefieldName; attrBuilder.setCreateabletrue;
attrBuilder.setUpdateabletrue; attrInfos.addattrBuilder.build;
} Supported class and attributes
flatFileSchemaBldr.defineObjectClass ObjectClass.ACCOUNT.getDisplayNameKey, attrInfos;
return flatFileSchemaBldr.build; }
16.3.3.2 Implementing the CreateOp Interface
The CreateOp interface is implemented to enable creating objects on the target system. To implement this interface, provide an implementation of the create method, as
shown in Example 16–23
.
Note: The Uid should not appear in the returned schema.
16-14 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
Example 16–23 create Method Signature
public Uid create ObjectClass objectClass, SetAttribute attributes,
OperationOptions options
This method takes an ObjectClass for example, account or group, a set object attributes, and operation options. The implementation creates an object on the target
system by using passed object attributes and object type defined by ObjectClass. The ObjectClass argument specifies the class of object to create. The class of object to be
created is one of the inputs to the create operation. ObjectClass is the first argument to the create method, as shown in
Example 16–24 .
Example 16–24 create Method Implementation
Override public Uid createObjectClass arg0, SetAttribute attrs,
OperationOptions ops { System.out.printlnCreating user account + attrs;
assertUserObjectClassarg0; try {
FlatFileUserAccount accountRecord = new FlatFileUserAccountattrs; Assert uid is there
assertUidPresenceaccountRecord; Create the user
this.flatFileWriter.addAccountaccountRecord; Return uid
String uniqueAttrField = this.flatFileConfig .getUniqueAttributeName;
String uniqueAttrVal = accountRecord .getAttributeValueuniqueAttrField;
System.out.printlnUser + uniqueAttrVal + created; return new UiduniqueAttrVal;
} catch Exception ex { If account exists
if ex.getMessage.containsexists throw new AlreadyExistsExceptionex;
For all other causes System.out.printlnError in create + ex.getMessage;
throw ConnectorException.wrapex; }
}
If the operation is successful, Uid instance representing object identifier on the target system is supposed to be created and returned. The caller can then use the Uid to refer
to the created object.
16.3.3.3 Implementing the DeleteOp Interface
The DeleteOp interface is implemented to enable deleting objects from the target system. To implement this interface, provide an implementation for the delete method
as defined in Example 16–25
.
Understanding the Identity Connector Framework 16-15
Example 16–25 delete Method Signature
public void delete ObjectClass objectClass, Uid uid, OperationOptions options
This method takes an ObjectClass for example, account or group, the Uid of the object being deleted from the target system, and operation options. The
implementation deletes the object identified by the provided Uid from the target system. if the object does not exist on the target system, then an
org.identityconnectors.framework.common.exceptions.UnknownUidException is generated.
Example 16–26 illustrates how to implement the delete method.
Example 16–26 delete Method Implementation
Override public void deleteObjectClass arg0, Uid arg1, OperationOptions arg2 {
final String uidVal = arg1.getUidValue; this.flatFileWriter.deleteAccountuidVal;
log.okAccount {0} deleted, uidVal; }
16.3.3.4 Implementing the SearchOp Interface
The SearchOp interface is implemented to enable searching objects on the target system. Here, the search operation consists of:
■
Creation of a native filter to implement search conditions that are specified generically.
■
Executing the actual query. Implementing these methods in the SPI allows the API to support search. The API
performs by post-processing the result any filtering that the connector does not perform, for example, by translating any specified filter conditions into native search
conditions.
To implement this interface, provide an implementation for the createFilterTranslator and executeQuery methods as documented in the following sections.
■
Implementing the createFilterTranslator Method
■
Implementing the executeQuery Method
16.3.3.4.1 Implementing the createFilterTranslator Method
The createFilterTranslator method returns an instance of implementation of FilterTranslator, which converts the ICF Filter object passed to it from the API side into
a native query. Following the conversion, ICF passes the query to the executeQuery method.
Example 16–27 illustrates the createFilterTranslator method definition.
Example 16–27 createFilterTranslator Method Signature
public FilterTranslator createFilterTranslator ObjectClass oClass, OperationsOptions options
Note: If the delete operation fails, then ICF generates subclasses of
RuntimeException. See Oracle Fusion Middleware Java API Reference for Identity Connector Framework for details.
16-16 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
Example 16–28 illustrates an implementation of the createFilterTranslator method.
Example 16–28 createFilterTranslator Method Implementation
Override public FilterTranslatorMapString, String createFilterTranslator
ObjectClass arg0, OperationOptions arg1 { return new ContainsAllValuesImpl {
}; }
This example supports only a single type of search predicate, which is ContainsAllValues. See
Implementation of AbstractFilterTranslatorT on page 17-8
for an example of an implementation of ContainsAllValuesImpl. The implementation of ContainsAllValues translates into native form a condition of the form: Attribute A
contains all of the values V1, V2 ... VN.
For information on the org.identityconnectors.framework.common.objects.filter.FilterTranslator, see
Common Classes on page 16-18.
16.3.3.4.2 Implementing the executeQuery Method
The executeQuery method is called for every query produced by the FilterTranslator implementation as documented in
Implementing the createFilterTranslator Method on page 16-15. It takes an ObjectClass for example, account or group, the query, an
instance of ResultsHandler used as a callback to handle found objects, and operation options, as illustrated in
Example 16–29 .
Example 16–29 executeQuery Method Signature
public void executeQuery ObjectClass oClass, T query,
ResultsHandler handler, OperationOptions options
The implementation of the executeQuery method searches for the target objects by using the passed query, creates instances of ConnectorObject for each target object
found, and uses ResultsHandler to handle ConnectorObjects. ConnectorObject is ICF representation of target resource object. It contains information such as ObjectClass,
Uid, Name, and Set of Attributes. ConnectorObject is central to search. executeQuery streams ConnectorObjects into the ResultsHandler, and therefore, to the client.
Example 16–30 illustrates how to implement the exectueQuery method.
Example 16–30 executeQuery Method Implementation
Override public void executeQueryObjectClass objectClass,
MapString, String matchSet, ResultsHandler resultHandler, OperationOptions ops {
searches the flat file for accounts which fulfil the condition matchSet created by FilterTranslator
IteratorFlatFileUserAccount userAccountIterator = this.flatFileParser .getAccountIteratormatchSet;
Note: The return value should not be null.
Understanding the Identity Connector Framework 16-17
boolean handleMore = true; while userAccountIterator.hasNext handleMore {
FlatFileUserAccount userAcc = userAccountIterator.next; ConnectorObject userAccObject = convertToConnectorObjectuserAcc;
Let the client handle the result by doing callback handleMore = resultHandler.handleuserAccObject;
} while userAccountIterator.hasNext {
FlatFileUserAccount userAcc = userAccountIterator.next; ConnectorObject userAccObject = convertToConnectorObjectuserAcc;
if resultHandler.handleuserAccObject { System.out.printlnNot able to handle + userAcc;
break; }
} }
16.3.3.5 Implementing the UpdateOp Interface
The UpdateOp interface is implemented to enable updating objects on the target system. To implement this interface, provide an implementation of the update method
as defined in Example 16–31
.
Example 16–31 update Method Signature
public Uid updateObjectClass oClass, Uid uid, SetAttribute attributes, OperationOptions options
This method takes an ObjectClass for example, account or group, Uid of the object being updated, a set of object attributes being updated, and operation options. The
implementation updates the object on the target system identified by the Uid with the new values of attributes. If the object identified by the Uid does not exist on the target
system, then an UnknowUidException is generated.
Example 16–32 illustrates how to
implement the update method.
Example 16–32 update Method Implementation
Override public Uid updateObjectClass arg0, Uid arg1,
SetAttribute arg2, OperationOptions arg3 { String accountIdentifier = arg1.getUidValue;
Fetch the account FlatFileUserAccount accountToBeUpdated = this.flatFileParser
.getAccountaccountIdentifier; Update
accountToBeUpdated.updateAttributesarg2; this.flatFileWriter
.modifyAccountaccountIdentifier, accountToBeUpdated; log.okAccount {0} updated, accountIdentifier;
Return new uid String newAccountIdentifier = accountToBeUpdated
.getAttributeValue this.flatFileConfig.getUniqueAttributeName;
return new UidnewAccountIdentifier; }
16-18 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
16.3.4 Common Classes
There are many ICF classes mentioned in the previous sections. The most important classes are:
■
org.identityconnectors.framework.common.objects.Attribute An Attribute is a named collection of values within a target system object. A target
system object may have many attributes and each may have many values. In its simplest form, an Attribute can be considered a name-value pair of a target system
object. Empty and null values are supported. The developer should use org.identityconnectors.framework.common.objects.AttributeBuilder to construct
Attribute instances.
■
org.identityconnectors.framework.common.objects.Uid A single-valued Attribute Uid is a subclass of Attribute that represents the
unique identifier of an object on the target resource. Ideally, it should be immutable.
■
org.identityconnectors.framework.common.objects.ObjectClass An ObjectClass defines the type of the object on the target system. Account, group,
or organization are examples of such types. ICF defines predefined ObjectClasses for account ObjectClass.ACCOUNT and group ObjectClass.GROUP.
■
org.identityconnectors.framework.common.objects.ConnectorObject A ConnectorObject represents an object for example, an account or group on the
target system. The developer must use org.identityconnectors.framework.common.objects.ConnectorObjectBuilder to
construct a ConnectorObject.
■
org.identityconnectors.common.security.GuardedString A guarded string is a secure String implementation which solves the problem of
storing passwords in memory in a plain String format. Passwords are stored as Bytes in an encrypted format. The encryption key will be randomly generated.
■
org.identityconnectors.framework.common.objects.filter.FilterTranslator A FilterTranslater object is responsible for converting all the filters specified on the
API side of the ICF into native queries during a search operation. ICF Filters support both search predicates and logical operators:
–
Search predicates match objects based on the values of a specified attribute. For example, an EqualsFilter returns true when at least one value of an
attribute is equal to a specified value.
–
Logical operators AND and OR join search predicates to build complex expressions. For example, an expression of the form A AND B is true only if
both A and B are true. An expression of the form A OR B is true if at least one of A or B is true.
Note: All attributes are syntactically multivalued in this model. A
particular attribute being singlevalued is only a semantic restriction.
Note:
A singlevalued attribute is particularly relevant to UID being a unique identifier.
Understanding the Identity Connector Framework 16-19
The ICF provides the AbstractFilterTranslatorT base class to make search implementation easier. A FilterTranslator sub class should override the following
whenever possible.
– createAndExpressionT, T
– createOrExpressionT, T
– createContainsExpressionContainsFilter, boolean
– createEndsWithExpressionEndsWithFilter, boolean
– createEqualsExpressionEqualsFilter, boolean
– createGreaterThanExpressionGreaterThanFilter, boolean
– createGreaterThanOrEqualExpressionGreaterThanOrEqualFilter, boolean
– createStartsWithExpressionStartsWithFilter, boolean
– createContainsAllValuesExpressionContainsAllValuesFilter, boolean
For more information see Section 16.3.3.4, Implementing the SearchOp Interface.
■
org.identityconnectors.framework.common.objects.ResultsHandler This is a callback interface for operations returning one or more results. The sub
class should provide an implementation to the handle method whereas the caller can decide what to do with the results. Currently, this is used only by the
SearchOp interface. For more information, see Section 16.3.3.4, Implementing the
SearchOp Interface.
16.4 Extending an Identity Connector Bundle
An identity connector bundle is the specific implementation for a particular target system. The bundle is a Java archive JAR that contains all the files required by the
identity connector to connect to the target system and perform operations. It also has special attributes defined in the MANIFEST file that are recognized by the ICF. These
are:
■
ConnectorBundle-FrameworkVersion is the minimum version of the ICF
required for this identity connector bundle to work. Newer ICF versions will be backwards compatible.
■
ConnectorBundle-Name is the unique name for this identity connector bundle; it
is generally the package name.
■
ConnectorBundle-Version is the version of this bundle. Within a given
deployment of Oracle Identity Manager, the ConnectorBundle-Name and ConnectorBundle-Version combination should be unique.
You extend an identity connector bundle, for example, to reuse common code. The AbtractDatabaseConnector is a good example, because different types of connectors
can reuse the same basic logic that accesses database tables using JDBC. A connector for database tables might share this common code with a connector for Oracle
Database users, a connector for IBM DB2 database users, and a connector for MySQL users.
A given Connector can be extended by adding the extended bundle to the lib directory of a new bundle and creating a new class that subclasses the target class.
This can be illustrated with the AbstractDatabaseConnector bundle. The common logic would be in a common bundle as follows:
16-20 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
■
META-INFMANIFEST.MF –
ConnectorBundle-FrameworkVersion: 1.0
– ConnectorBundle-Name: org.identityconnectors.database.common
– ConnectorBundle-Version: 1.0
■
org.identityconnectorsdatabasecommonAbstractDatabaseConnector.class
■
orgidentityconnectorsdatabasecommon other common source files
■
lib There would be as many database resource specific bundles as needed. For example:
■
META-INFMANIFEST.MF –
ConnectorBundle-FrameworkVersion: 1.0
– ConnectorBundle-Name: org.identityconnectors.database.mysql
– ConnectorBundle-Version: 1.0
■
orgidentityconnectorsdatabasemysqlMySQLConnector.class subclass of AbstractDatabaseConnector
■
orgidentityconnectorsdatabasemysql other MySQL source files
■
liborg.identityconnectors.database.common-1.0.jar parent bundle described above
■
lib specific database drivers and libraries as needed
16.5 Using an Identity Connector Server
An identity connector server is required when an identity connector bundle is not directly executed within your application. By using one or more identity connector
servers, the ICF architecture permits your application to communicate with externally deployed identity connector bundles. Identity connector servers are available for
Java™ and Microsoft .NET Framework applications.
A single connector server can support multiple ICF connectors, and these ICF connectors may be of different connector types. A single ICF connector can be used to
communicate with multiple targets.
Figure 16–3 shows how Oracle Identity Manager connectors integrate with resources
via ICF connectors:
Note: You do not extend the original bundle. Instead, you extend the
connector by embedding the original bundle in a new bundle that wraps the original bundle.
Note: This identity connector would not have a ConnectorClass
annotation.
Note: This identity connector would have a ConnectorClass
annotation.
Understanding the Identity Connector Framework 16-21
Figure 16–3 ICF Connectors and Connector Server
In Figure 16–3
:
■
Oracle Identity Manager connectors do not directly interact with the target resource. Instead, the create, read, update, delete, and query CRUDQ operations
are performed via the appropriate ICF connector.
■
A single ICF Connector can be used to connect to multiple resources of the same resource type. In
Figure 16–3 , an ICF Connector for LDAP is used to connect to a
local LDAP resource, as well as being used to connect to a remote LDAP resource.
■
The .NET Connector Server is used to deploy .NET ICF Connectors on the target host. An Active Directory resource is connected in this manner.
■
An ICF Connector for Google Apps provides a connection to Google Apps across the Internet.
■
While not shown in the diagram, a Connector Server can support multiple ICF Connectors of different resource types.
The types of connector servers are described in the following sections:
■
Using the Java Connector Server
■
Using the Microsoft .NET Framework Connector Server
16-22 Oracle Fusion Middleware Developers Guide for Oracle Identity Manager
16.5.1 Using the Java Connector Server
A Java Connector Server is used when you do not want to execute a Java Connector Bundle in the same Java Virtual Machine JVM as the application. This deployment
may be beneficial in terms of performance as the bundle works faster when deployed on the same host as the managed target system. In addition, use Java Connector Server
to eliminate possibility of an application JVM crash because of faulty JNI-based connector.
Using the Java connector server is described in the following sections:
■
Installing and Configuring a Java Connector Server
■
Running the Java Connector Server on Microsoft Windows
■
Running the Java Connector Server on Solaris and Linux
■
Installing an Identity Connector in a Java Connector Server
■
Using SSL to Communicate with a Connector Server
16.5.1.1 Installing and Configuring a Java Connector Server
To install and configure the Java Connector Server:
1.
Create a new directory on the computer on which you want to install the Java Connector Server. In this section, CONNECTOR_SERVER_HOME represents this
directory.
2.
Unzip the Java Connector Server package in your new directory from Step 1. Java Connector Server is available for download in the Oracle Technology Network
Web site at the following URL:
http:www.oracle.comtechnetworkindex.html
3.
In the ConnectorServer.properties file in the conf directory, set the properties as required by your deployment.
Table 16–1 lists the properties in the
ConnectorServer.properties file:
Tip: Get the following information defined during installation for
use during either Connector Server configuration.
■
Host name and IP address
■
Connector Server port
■
Connector Server key
■
SSL enabled
Table 16–1 Properties in the ConnectorServer.properties File
Property Description
connectorserver.port Port on which the Java Connector Server listens for requests. The
default value is 8759. connectorserver.bundleDir
Directory where the connector bundles are deployed. The default value is bundles.
connectorserver.libDir Directory in which to place dependent libraries. The default
value is lib.