|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectcom.ca.jcs.processor.AbstractBaseProcessor
com.ca.jcs.processor.AbstractAttributeStyleOpProcessor
com.ca.jcs.processor.AbstractAttributeStyleOpProcessorAssocDirect
com.ca.jcs.assoc.DefaultAssocDirectAttributeOpProcessor
com.ca.jcs.assoc.DefaultAssocAttributeOpProcessor
com.ca.jcs.jdbc.JDBCAttributeStyleOpProcessor
public class JDBCAttributeStyleOpProcessor
A dynamic JDBC connector driven by metadata which specifies all mapping information for Account, Group and Connection (Endpoint) classes.
| Nested Class Summary | |
|---|---|
static class |
JDBCAttributeStyleOpProcessor.VendorTypeHandling
Defines various JDBC type treatment options |
| Nested classes/interfaces inherited from class com.ca.jcs.assoc.DefaultAssocDirectAttributeOpProcessor |
|---|
DefaultAssocDirectAttributeOpProcessor.AssocAttrValue, DefaultAssocDirectAttributeOpProcessor.AssociationStyle |
| Nested classes/interfaces inherited from interface com.ca.jcs.processor.OpProcessor |
|---|
OpProcessor.MethodName |
| Field Summary | |
|---|---|
protected JDBCMetaConnector |
connector
|
protected DataSource |
dataSource
|
protected MetaDataDefs.GeneratedOverrideStatus |
generatedOverrideStatus
|
protected Logger |
log
|
protected long |
searchTimeout
|
static SQLMultiValueFlattener |
SQL_FLATTENER
Helps formatting SQL literals and "IN" lists. |
protected TransactionManager |
transactionManager
|
protected long |
transactionTimeout
|
| Fields inherited from class com.ca.jcs.assoc.DefaultAssocAttributeOpProcessor |
|---|
proxiedAssocSelf |
| Fields inherited from class com.ca.jcs.assoc.DefaultAssocDirectAttributeOpProcessor |
|---|
metaConnector |
| Fields inherited from class com.ca.jcs.processor.AbstractAttributeStyleOpProcessor |
|---|
proxiedSelf |
| Fields inherited from class com.ca.jcs.processor.AbstractBaseProcessor |
|---|
ldapExceptionPrefix |
| Constructor Summary | |
|---|---|
JDBCAttributeStyleOpProcessor(BaseConnector connector)
|
|
| Method Summary | |
|---|---|
void |
activate()
Sets proxiedSelf to OpBindings-aware proxy if any OpBindings are configured, otherwise left assigned to "this". |
void |
addAttrAssocs(ObjectInfo objInfo,
Association assoc,
Attribute attr,
Object context)
Note delegates to super class if assoc is of direct flavour. |
void |
deactivate()
We also define this for symmetry as activate() is defined. |
void |
deleteAssocs(ObjectInfo objInfo,
boolean fromObj,
Collection<Association> assocs,
Object context)
Don't need to worry about direct associations (and hence super class) here, as this method is part of the AssocIndirectAttributeOpProcessor interface only, and not used
for direct associations. |
void |
doAdd(ObjectInfo objInfo,
Attributes attrs)
Handle adding new objects, both normal and compound. |
protected void |
doAddCompound(ObjectInfo compChildObjInfo,
Association assoc,
Attribute attr,
String parentKeyVal)
Create compound object |
void |
doDelete(ObjectInfo objInfo)
Delete the object referenced by objInfo from a managed system. |
void |
doDeleteAssocs(ObjectInfo objInfo,
Object context)
Delete all associations referencing target object referred to by objInfo. |
Attributes |
doLookUp(ObjectInfo objInfo,
String[] attrIds)
Look up the provided attribute names on the managed object referenced by objInfo,
attribute ids not mapped to connector-speak will either be discarded or cause an error depending
on the level of strictness configured for the parent connector. |
void |
doLookupAssocs(ObjectInfo objInfo,
Association[] associations,
Attributes attrs,
Object context)
Look provided associations for object referenced by objInfo, updating attrs with any information found. |
Attribute |
doLookupExpensiveStub(ObjectInfo objInfo,
String connAttrId)
If the named attribute has a value on the managed system then return an attribute with a dummy value (without needing to fully retrieve the value persisted on the managed system). |
void |
doModify(ObjectInfo objInfo,
ModificationItem[] origModItems)
Process the provided modifications, where attributes involved in 1:1 and 1:N associative relationships are split out for separate individual processing. |
void |
doModifyAssocs(ObjectInfo objInfo,
AssocModificationItem[] items,
Object context)
Process modifications to any associative relationships mentioned in items (each requires one or more separate SQL operations). |
void |
doModifyRn(ObjectInfo objInfo,
Rdn newRdn)
Implement a change of Relative Distnguished Name (RDN) by: copying all of its data (except its name) to a new row which is given the new name. |
void |
doModifyRnAssocs(ObjectInfo objInfo,
Rdn newRdn,
Object context)
Update association attributes after the target object denoted by objInfo
(which still refers to the old name) is renamed. |
void |
doMove(ObjectInfo objInfo,
Name newParentName,
Rdn newRn)
Move the managed object referenced by objInfo to a new parent whilst
also changing its RDN (of form "attr=value"). |
void |
doMoveAssocs(ObjectInfo objInfo,
Name newName,
Object context)
Update association attributes after the target object denoted by objInfo
(which still refers to the old name) is moved to newName. |
NamingEnumeration<SearchResult> |
doSearch(ObjectInfo baseObjInfo,
FilterInfo filterInfo,
Map<String,String> environment,
SearchControls searchControls)
Perform a search where all details in the filter and search controls have been mapped to connector speak, results are mapped back to LDAP by the base class. |
NamingEnumeration<SearchResult> |
doSearchAssocs(MetaObjectClassMappings classMapppings,
Association[] associations,
NamingEnumeration<SearchResult> searchResults,
String filterExpr,
Object context)
Find all associative field values in assocAttrIds in
the search results provided in queryResults. |
protected String |
formAssocSearchSql(Association assoc,
String filterExpr,
int offset)
form the sql to be used to search for associations |
int |
getAccountCount()
|
DataModel |
getMetaData()
Needed to get around spelling error of geMetaData() in JCS 1.0 release, ideally would be left abstract here and should be overridden
in the concrete processor, for instance SDKAttributeStyleOpProcessor. |
protected static int |
getPropertySqlType(MetaObjectClassMapping classMap,
Attribute connAttr)
Determine SQL type for an attribute, falling back to Spring's SqlReturnType.TYPE_UNKNOWN
when no special handling is required. |
long |
getTransactionTimeout()
|
void |
incAccountCount()
|
void |
initObjectCount(String objectClass,
int count)
|
boolean |
isAccountQueryStreaming()
|
void |
removeAttrAssocs(ObjectInfo objInfo,
Association assoc,
Attribute attr,
Object context)
Note delegates to super class if assoc is of direct flavour. |
void |
setMetaData(DataModel dataModel)
Called when datamodel metadata used to configure this connector is changed. |
void |
setTransactionTimeout(long transactionTimeout)
|
| Methods inherited from class com.ca.jcs.processor.AbstractAttributeStyleOpProcessorAssocDirect |
|---|
convertConnectorDNToKey, convertConnectorDNToKeys, convertKeyToConnectorDN |
| Methods inherited from class com.ca.jcs.processor.AbstractAttributeStyleOpProcessor |
|---|
isPostQueryPocessingActive, processPostQueryAttributes, processPostQuerySearchResult, setPostQueryPocessingActive |
| Methods inherited from class com.ca.jcs.processor.AbstractBaseProcessor |
|---|
getBaseConnector, makeNamingException |
| Methods inherited from class java.lang.Object |
|---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
protected final JDBCMetaConnector connector
protected final Logger log
protected final TransactionManager transactionManager
protected final DataSource dataSource
protected MetaDataDefs.GeneratedOverrideStatus generatedOverrideStatus
protected long transactionTimeout
protected long searchTimeout
public static final SQLMultiValueFlattener SQL_FLATTENER
| Constructor Detail |
|---|
public JDBCAttributeStyleOpProcessor(BaseConnector connector)
| Method Detail |
|---|
public DataModel getMetaData()
DefaultAssocDirectAttributeOpProcessorgeMetaData() in JCS 1.0 release, ideally would be left abstract here and should be overridden
in the concrete processor, for instance SDKAttributeStyleOpProcessor. Always throws a RuntimeException to ensure
the fact it must be overridden is noticed if the method is ever called.
getMetaData in interface AttributeStyleOpProcessorgetMetaData in class DefaultAssocDirectAttributeOpProcessor
public void setMetaData(@NotNull
DataModel dataModel)
AttributeStyleOpProcessor
dataModel - New metadata to be internalised.public int getAccountCount()
public void activate()
throws NamingException
AbstractAttributeStyleOpProcessor
activate in interface Activatableactivate in interface AttributeStyleOpProcessoractivate in class DefaultAssocAttributeOpProcessorNamingExceptionpublic void deactivate()
AbstractAttributeStyleOpProcessor
deactivate in interface Activatabledeactivate in interface AttributeStyleOpProcessordeactivate in class AbstractAttributeStyleOpProcessor
public void initObjectCount(String objectClass,
int count)
public void incAccountCount()
public boolean isAccountQueryStreaming()
public void doDelete(ObjectInfo objInfo)
throws NamingException
OpProcessorobjInfo from a managed system.
Called by Partition.delete(org.apache.directory.shared.ldap.name.LdapDN)
after mapping/validation/type conversion has been performed.
objInfo - References managed object to be deleted.
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
public void doDeleteAssocs(ObjectInfo objInfo,
Object context)
throws NamingException
DefaultAssocDirectAttributeOpProcessorobjInfo.
doDeleteAssocs in interface AssocAttributeOpProcessordoDeleteAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object to be deleted.context - Optional field which can be provided additional context for the
requested updates, eg transactional connectors
may want the updates of the associative relationships to occur within a larger transaction.
NamingException
public void deleteAssocs(ObjectInfo objInfo,
boolean fromObj,
Collection<Association> assocs,
Object context)
throws NamingException
AssocIndirectAttributeOpProcessor interface only, and not used
for direct associations.
NamingException
public void addAttrAssocs(ObjectInfo objInfo,
Association assoc,
Attribute attr,
Object context)
throws NamingException
addAttrAssocs in interface AssocAttributeOpProcessoraddAttrAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object referenced.assoc - Association through which object is referenced.attr - Attribute containing new references to object which are to be stored.context - Context if relevant to connector implementation (eg transaction, if supported).
NamingException
public void removeAttrAssocs(ObjectInfo objInfo,
Association assoc,
Attribute attr,
Object context)
throws NamingException
removeAttrAssocs in interface AssocAttributeOpProcessorremoveAttrAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object referenced.assoc - Association through which object is referenced.attr - Attribute containing references to object, if null means "remove all references" (only supported
by internal agreement within connector implementation, eg JDBC which uses indirect associations can remove all
references without wasting time determining all currently existing links).context - Context if relevant to connector implementation (eg transaction, if supported).
NamingException
public void doAdd(ObjectInfo objInfo,
Attributes attrs)
throws NamingException
objInfo - Contains information for the managed object which is to be created,
where its connector-speak distinguished Name (DN) is dictated by
objInfo.getConnectorDn() and its objectClass= is
dictated by objInfo.getobjectClassMapping().attrs - Attributes to be stored on the managed object.
LdapNameAlreadyBoundException - Should be thrown if an object
with the specified name already exists, other NamingExceptions (preferably
implementing LdapException) may also be thrown. Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
protected void doAddCompound(ObjectInfo compChildObjInfo,
Association assoc,
Attribute attr,
String parentKeyVal)
throws NamingException
NamingException
public void doModifyAssocs(ObjectInfo objInfo,
AssocModificationItem[] items,
Object context)
throws NamingException
doModifyAssocs in interface AssocAttributeOpProcessordoModifyAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Information about target object whose associations are to be updated.items - Modifications to associative relationships, which can be additions,
deletions or replacements.context - Optional field which can be provided additional context for the
requested updates, eg transactional connectors
may want the updates of the associative relationships to occur within a larger transaction.
NamingException
public void doModify(ObjectInfo objInfo,
ModificationItem[] origModItems)
throws NamingException
objInfo - Details of object instance being modified.origModItems -
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
protected static int getPropertySqlType(MetaObjectClassMapping classMap,
Attribute connAttr)
throws NamingException
SqlReturnType.TYPE_UNKNOWN
when no special handling is required. Needs to allow for:ps.setNull(idx, Types.) is used (this code means
Spring JDBC takes this path).
ps.setObject() is called on a previous arg
NamingException
public NamingEnumeration<SearchResult> doSearch(ObjectInfo baseObjInfo,
FilterInfo filterInfo,
Map<String,String> environment,
SearchControls searchControls)
throws NamingException
baseObjInfo - filterInfo - Information about original LDAP filter
including a version of it mapped to connector-speak.environment - searchControls - Return attributes have been mapped to
connector-speak.
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
protected String formAssocSearchSql(Association assoc,
String filterExpr,
int offset)
public NamingEnumeration<SearchResult> doSearchAssocs(MetaObjectClassMappings classMapppings,
Association[] associations,
NamingEnumeration<SearchResult> searchResults,
String filterExpr,
Object context)
throws NamingException
assocAttrIds in
the search results provided in queryResults.
doSearchAssocs in interface AssocAttributeOpProcessordoSearchAssocs in class DefaultAssocDirectAttributeOpProcessorNamingException
public Attributes doLookUp(ObjectInfo objInfo,
String[] attrIds)
throws NamingException
OpProcessorobjInfo,
attribute ids not mapped to connector-speak will either be discarded or cause an error depending
on the level of strictness configured for the parent connector. Extra attributes may also be
returned.
Called by Partition.lookup(org.apache.directory.shared.ldap.name.LdapDN)
after mapping has been performed.
objInfo - Managed object for which attributes are to be looked up.attrIds - Connector-speak identifiers of attributes which are to be returned, null
means return all attributes and a zero length array means return no attributes (just
a way to check an object's existance).
attrIds, can be null when the target object exists
but has none of the requested
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
public Attribute doLookupExpensiveStub(ObjectInfo objInfo,
String connAttrId)
throws NamingException
SELECT COUNT(*). If the named attribute
doesn't have a value on the managed system then null is returned.
doLookupExpensiveStub in interface AttributeStyleOpProcessordoLookupExpensiveStub in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object to be looked up.connAttrId - Expensive attribute being queried.
NamingExceptionValidationLazyAttributesProxy
public void doLookupAssocs(ObjectInfo objInfo,
Association[] associations,
Attributes attrs,
Object context)
throws NamingException
doLookupAssocs in interface AssocAttributeOpProcessordoLookupAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Target object for which associations need to be worked out.associations - Associations declared against target's objectclass, all of which need to be checked.attrs - Attributes to be returned for target object, multi-valued associative attribute
settings may be added to them by this method.context - Unused.
NamingException
public void doModifyRn(ObjectInfo objInfo,
Rdn newRdn)
throws NamingException
objInfo - References managed object.newRdn - New terminal name (having form "attr=val") for managed object.
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.
public void doModifyRnAssocs(ObjectInfo objInfo,
Rdn newRdn,
Object context)
throws NamingException
DefaultAssocDirectAttributeOpProcessorobjInfo
(which still refers to the old name) is renamed.
doModifyRnAssocs in interface AssocAttributeOpProcessordoModifyRnAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object to be modified, contains "old" name.newRdn - New relative name (RN) for object, eg "namingAttr=newName".context - Optional field which can be provided additional context for the
requested updates, eg transactional connectors
NamingException
public void doMoveAssocs(ObjectInfo objInfo,
Name newName,
Object context)
throws NamingException
DefaultAssocDirectAttributeOpProcessorobjInfo
(which still refers to the old name) is moved to newName.
doMoveAssocs in interface AssocAttributeOpProcessordoMoveAssocs in class DefaultAssocDirectAttributeOpProcessorobjInfo - Object to be modified, contains "old" name.newName - New DN (distinguished name) for object, where parent folder and RN
may have changed.context - Optional field which can be provided additional context for the
requested updates, eg transactional connectors
may want the updates of the associative relationships to occur within a larger transaction.
NamingException
public void doMove(ObjectInfo objInfo,
Name newParentName,
Rdn newRn)
throws NamingException
OpProcessorobjInfo to a new parent whilst
also changing its RDN (of form "attr=value").
Called by Partition.move(org.apache.directory.shared.ldap.name.LdapDN, org.apache.directory.shared.ldap.name.LdapDN, String, boolean)
after mapping has been performed.
objInfo - References managed object to be moved.newParentName - New parent for managed object.newRn - New relative distinguished name (RDN) for managed object, will be
either be null (just a move) or different from the object's current RDN (move and rename).
LdapNameNotFoundException - (or
NameNotFoundException) when target object doesn't exist.
NamingException - (usually exception should implement
LdapException or arrangements to map it into
such an exception should be in place). Pay attention to
retriable exceptions as documented in RetryOpProcessorProxy.public long getTransactionTimeout()
public void setTransactionTimeout(long transactionTimeout)
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||