Identity Broker Forum
Welcome to the community forum for Identity Broker.
Browse the knowledge base, ask questions directly to the product group, or leverage the community to get answers. Leave ideas for new features and vote for the features or bug fixes you want most.

System.Data.SqlClient.SqlException - (Deadlock)
The following error is being investigated with internal sql dba's. Whenever i attempt to do a full import from the ADW MA it will begin to generate the UNIFYFull.txt file "file partially built) then fails with a stopped-extension-dll-exception.
Error occurred in module: Adapter Adapter get all entities for adapter db19b111-cc07-4343-b668-5caa25efe771 failed with reason Transaction (Process ID 105) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction.. Duration: 00:01:47.9019691 Error details: System.Data.SqlClient.SqlException: Transaction (Process ID 105) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlDataReader.HasMoreRows() at System.Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReaderBase`1.Read() at System.Data.Linq.SqlClient.ObjectReaderCompiler.ObjectReader`2.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Buffer`1..ctor(IEnumerable`1 source) at System.Linq.Enumerable.ToArrayTSource(IEnumerable`1 source) at Unify.Framework.LinqWhereQuery`5.GetEnumerator() at Unify.Framework.QueryableExtensions.<AutoStream>d_b`1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Unify.Framework.EnumerableExtensions.<ProduceAutoPages>d9`1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnLast>d16`1.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d14`2.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnLast>d16`1.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d14`2.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnFirst>d1c`1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at Unify.Framework.ActionOnExceptionEnumerator`1.MoveNext() at Unify.Framework.EnumerableExtensions.<ActionOnLast>d16`1.MoveNext() at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Linq.Enumerable.<SelectManyIterator>d14`2.MoveNext() at System.Linq.Enumerable.<ConcatIterator>d71`1.MoveNext() at Unify.Framework.LDIFComponentFileGenerator`1.GenerateFile(TextWriter writer, IEnumerable`1 entries) at Unify.Framework.LDIFAdapter.<>cDisplayClass5`1.<CreateLDIFComponentStream>b_4(Stream stream) at Unify.Framework.LazyEvaluationStream.Evaluate(Object obj)

Page display issues in IE 8
I've attached two screen shots of how Identity Broker 5.0.1 is rendered in IE8, which according to the documentation is supported (IE8+). I've had access to two systems with IE8, both of which exhibit these symptoms. The first being a Windows Server 2008 system and the other a clean install of Windows 7 that I made in Azure specifically to see if this issue was reproducible.
As can be seen below, quirks mode is functional but misformed. In standards mode much of the page is obscured by the upper pane, including most of the controls associated with the connectors or adapters pages.
Browser Mode: IE 8, Document Mode: Internet Explorer 8 Standards
Browser Mode: IE 8, Document Mode: Quirks
In both cases Identity Broker is running on the embedded web server. Screenshots taken with 8.0.7601.17514 of IE.
quirks mode.png
screenshot.png

Null reference during logging
I am receiving an alert on the home page on my local build when it is browsed to.
If no other log writers are configured, any issues may be missed. The exception details are as follows:
System.NullReferenceException: Object reference not set to an instance of an object.
at Unify.Framework.Logging.ExceptionLogEntry.get_LogEntryModule() in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging\ExceptionLogEntry.cs:line 71
at Unify.Framework.Logging.CsvLogWriter.WriteLogEntryBase(ILogEntry logEntry, String filePath) in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\CsvLogWriter.cs:line 61
at Unify.Framework.Logging.CsvLogReaderWriter.<>n__FabricatedMethod1b(ILogEntry , String )
at Unify.Framework.Logging.CsvLogReaderWriter.<>c_DisplayClass19.b_16() in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\CsvLogReaderWriter.cs:line 455
at Unify.Framework.ExtensionMethods.WaitOnMutex(Mutex mutex, Action work) in c:\workspaces\DEV\FrameworkCore\Source\Scheduling\Unify.Framework.Scheduling.Job\JobExtensionMethods.cs:line 21
at Unify.Framework.Logging.CsvLogReaderWriter.WriteLogEntryBase(ILogEntry logEntry, String filePath) in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\CsvLogReaderWriter.cs:line 459
at Unify.Framework.Logging.FileLogWriterBase.<>c_DisplayClass5.b_4() in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\FileLogWriterBase.cs:line 298
at Unify.Framework.ExtensionMethods.WaitOnMutex(Mutex mutex, Action work) in c:\workspaces\DEV\FrameworkCore\Source\Scheduling\Unify.Framework.Scheduling.Job\JobExtensionMethods.cs:line 21
at Unify.Framework.Logging.FileLogWriterBase.InternalWriteLogEntry(ILogEntry logEntry, String filePath) in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\FileLogWriterBase.cs:line 299
at Unify.Framework.Logging.FileLogWriterBase.WriteLogEntryBase(IBrandedLogEntry logEntry) in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.Writer\FileLogWriterBase.cs:line 127
at Unify.Framework.Logging.LogWriterBase.WriteLogEntry(IBrandedLogEntry logEntry) in c:\workspaces\DEV\FrameworkCore\Source\Logging\Unify.Framework.Logging.WinEventLogWriter\LogWriterBase.cs:line 46

Composite Aurion connectors required
A number of projects involving Aurion stall for a number of reasons, mostly to do with Aurion's API.
A topic on INTIDBAUR:Aurion project risk mitigation strategies has been commenced and will hopefully be completed in the next couple of days.
However, the only successful treatment will be to eventually get enough pressure on Aurion to fix the issue at their end. Some of our workarounds will only work for small datasets, or internally hosted solutions, and some of these end up being difficult to maintain. At present, however, the impact is critical.
As all Aurion teams will now be instructed to perform some treatment by insisting the client informs Aurion of any issue, and this being enforced through the new project management office, a version of the connector that permits composition of one of the following options is required to ensure current projects are not blocked:
- A way of using the filter mechanism on the QUERY_TO_XML function to perform the same query with different filter parameters, resulting in the retrieval of all relevant data by requests that can be performed within the time-out period.
- A away of using multiple queries with the same data schema to retrieve all relevant data by requests that can be performed within the time-out period.
At no time is this to be considered a permanent resolution to the Aurion query performance issue.

Service fails to start if base connector cannot be found
The following is logged on service startup if the base connector cannot be found.
Service cannot be started. Unify.Framework.UnifyServiceInitializeException: A connector matching the id 'bf96de17-ee6f-490a-b3c3-77a18435a734' could not be located. ---> Unify.Framework.UnifyEngineException: A connector matching the id 'bf96de17-ee6f-490a-b3c3-77a18435a734' could not be located.
at Unify.Product.IdentityBroker.ConnectorRepository.GetConnectorSchema(Guid connectorId)
at Unify.Product.IdentityBroker.EventNotifierConnectorRepositoryDecorator.GetConnectorSchema(Guid connectorId)
at Unify.Product.IdentityBroker.Adapter.RefreshColumnSources(IEntityChangeDetector entityChangeDetector, IEnumerable`1 existingChangeProcessorConnectorIds, Func`5 createColumnSourcesFunction, Action`3 addBaseConnectorChangeProcessorAction)
at Unify.Product.IdentityBroker.AdapterEngine.RefreshColumnSources(Guid adapterId)
at Unify.Product.IdentityBroker.AdapterEngine.<.ctor>b__2(IOperationalAdapterBase`2 adapter)
at Unify.Product.IdentityBroker.AdapterAdded`1.Invoke(TAdapterType adapter)
at Unify.Product.IdentityBroker...

Improve architecture of Logging Engine
Please move the extended logging engine into the logging engine and logging engine base.
Please create a generic validation Action that is passed down to the log writer factories, that calls back into the engine. Add a validation routine that confirms the CSV writer doesn't conflict with others.
Additionally, the Identity Broker service (haven't tested console) is halting operation on attempt to browse to the Connector and Adapter page (the Home page is fine, haven't tested others). The following error is being thrown:
Error occurred in module: Logging
Unable to log, exception as follows:
System.IO.IOException: The process cannot access the file 'c:\test20111130.csv' because it is being used by another process.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
at System.IO.File.InternalAppendAllText(String path, String contents, Encoding encoding)
at Unify.Framework.Logging.CsvLogWriter.WriteLogEntryBase(ILogEntry logEntry, String filePath)
at Unify.Framework.Logging.FileLogWriterBase.WriteLogEntryBase(ILogEntry logEntry)
at Unify.Framework.Logging.LogWriterBase.WriteLogEntry(ILogEntry logEntry)
Logging configuration attached.
Thanks.
Unify.Framework.Logging.LoggingEnginePlugInKey.extensibility.config.xml

Filter records retrieved from chris21
The IDB chris21 connector has the ability to send a filter to chris21 when querying for users.
I attempted to write a filter as described by the chris21 BRE SDK documentation but are unable to get my query to work.
The filter has the following syntax: field:operation:value:[join]
I tested the query on the test web page for chris BRE: https://localhost/Scalable/post21.htm
The following example filter works fine:
:cbr="poslst",maxlines=1,sendfields="S",filter01="posstart:<=:=T:"
But if I modify it to filter on detnumber, it doesn’t work anymore:
:cbr="detlst",maxlines=1,sendfields="S",filter01="detnumber:=:=100001"
The error I receive is:
error01="BRE353:detnumber: No connector provided for filter.",status="fail"
Any ideas how to fix my filter on detnumber?

As discovered with Jake, the "No connector provided for filter" is because a fourth operator to the filter is required, even if there is only one filter. The operator is AND or OR.
The Identity Broker for Frontier chris21 documentation will be updated to reflect this.
Thanks to Jake for working with us for an answer.

Transformation on Relationship with multivalue return
Is there a transformation that performs a relation lookup that is capable of returning multiple values?
Currently for a client we have two tables, one has a user ID, the other a userID and an organisation name. A single User ID may be associated with multiple organisation names.
The design calls for a single adapter that has a multi value attribute on a person object listing all the organisation names to which that person belongs. The person object is the only object being flowed into the metaverse for this design.
I've had a look at two exisiting transformations:
Relation.Group (https://unifysolutions.jira.com/wiki/display/IDB306/Group+membership+relational+transformation) - This one returns multiple results, but regardless of whether Relation.Group or Relation.Group.Dn is used, the result appears to be a list of references. As noted already, we only flow the person into FIM and thus we want the actual organisation name, not a reference/DN value.
Relational (https://unifysolutions.jira.com/wiki/display/IDB306/Relational+transformation) - This can flow the actual value, but it will only flow a single value and as far as I can see, does not support output to a multivalue field.
I want to check whether there's an alternative I've some how overlooked. The connectors (one for each sql table) is a straight up unify SQL connector based around the EmpopweHR design. There is the option to redevelop this if needed to handle the work rather than an adapter, but an adapter is preferable.

Multivalue DN validator throws an invalid cast error
When attempting to create the correct value during an export, a multivalue DN generator field throws a cast exception:
Unable to cast object of type 'Unify.Framework.MultiValue`1Unify.Framework.StringValue' to type 'System.Collections.IEnumerable'.
> Unify.IdentityBroker.Entity.Schema.dll!Unify.Product.IdentityBroker.EntityMultiValueObjectTypeSchemaValidator<Unify.Framework.MultiValue<Unify.Framework.DistinguishedNameValue>,Unify.Framework.DistinguishedNameValue,Unify.Framework.IO.DistinguishedName>.CreateValue(object dataValue) Line 90 + 0x13 bytes C#
Unify.IdentityBroker.Entity.Schema.dll!Unify.Product.IdentityBroker.EntitySchemaFieldDefinition.CreateValue(object dataValue) Line 64 + 0x39 bytes C#
Unify.IdentityBroker.Adapter.LDIF.dll!Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveAdapterBase<Unify.Product.IdentityBroker.IAdapterEntitySaveChange>.ConvertValues.AnonymousMethod_c(<>f_AnonymousType0<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,System.Collections.Generic.List<Unify.Framework.StringValue>> item) Line 143 + 0xe4 bytes C#
System.Core.dll!System.Linq.Enumerable.WhereSelectEnumerableIterator<System.Linq.IGrouping<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.StringValue>,System.Collections.Generic.KeyValuePair<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.IValue>>.MoveNext() + 0x104 bytes
System.Core.dll!System.Linq.Buffer<System.Collections.Generic.KeyValuePair<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.IValue>>.Buffer(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.IValue>> source) + 0x24b bytes
System.Core.dll!System.Linq.Enumerable.ToArray<System.Collections.Generic.KeyValuePair<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.IValue>>(System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<Unify.Product.IdentityBroker.AdapterEntityValueCollectionKey,Unify.Framework.IValue>> source) + 0x67 bytes
Unify.IdentityBroker.Adapter.LDIF.dll!Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveChangeAdapter.GetConvertedValuesFromSchema(string objectClass, System.Collections.Generic.IEnumerable<System.Collections.Generic.KeyValuePair<string,string>> values) Line 153 + 0xda bytes C#
Unify.IdentityBroker.Adapter.LDIF.dll!Unify.Product.IdentityBroker.LDIFToAdapterEntitySaveChangeAdapter.Transform(System.IO.Stream sourceValue) Line 120 + 0x4c bytes C#
Unify.IdentityBroker.Adapter.Remoting.dll!Unify.Product.IdentityBroker.LDIFAdapterBase.ExportChanges(Unify.Product.IdentityBroker.ExportedLDIFForAdapter exportedLdifForAdapter) Line 244 + 0xbe6 bytes C#
Source value in this case is a single entry: CN=Administrator,DC=UNIFY2010DEMO. The object attempting a cast is a MultiValue<StringValue> as parsed by the LDIF handling.

Adding entities with duplicate keys not handled gracefully
Adding two entities with different DNs but the same key is currently being reported as successful by the LDAP engine but is silently failing change detection, meaning that neither entity is actually committed to the connector, and no alert is displayed to the user.
If entities with duplicate keys accumulate in the change report, it might be possible to detect this and report failure on the LDAP response, avoid corruption of the connector space by committing only the entities already reported as successful, and displaying an alert to the user. This might also be an opportunity to implement user-cancellable warnings.
If the duplicate keys occur between a newly added entity and an existing entity and the DNs are different, this should be handled by rejecting the add request.
Customer support service by UserEcho