When a data access on-demand (DAOD) connection is being used to view data in a 3rd party repository, data volumes returned by searching or browsing are transferred in chunks to avoid memory problems while transferring the data. However, when items have already been returned to either the Intelligence Portal or i2 Analyst’s Notebook Premium, an ‘Expand’, 'Show Context' or ‘Get Context’ request, to bring back additional items related to the selected ones, returns only a single block of results. This means that an error might be encountered if a memory limit is reached with the volume of data in that single block when it is returned to the Intelligence Portal or i2 Analyst’s Notebook Premium.
Error message in the Intelligence Portal:
"An unknown error occurred. Try the most recent operation again. If this problem persists, contact your system administrator.i2.Apollo.Common.Exceptions.ServerException
Unknown error: java.lang.NullPointerException
java.lang.NullPointerException at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc)
at System.ServiceModel.Channels.ServiceChannel.EndCall(String action, Object outs, IAsyncResult result)
at System.ServiceModel.ClientBase`1.ChannelBase`1.EndInvoke(String methodName, Object args, IAsyncResult result)
at i2.Apollo.Services.Internal.ExternalDataRetrieval.AutoGen.ExternalDataRetrievalServiceClient.ExternalDataRetrievalServiceClientChannel.EndGetContext(IAsyncResult result)
at i2.Apollo.Services.Internal.ExternalDataRetrieval.AutoGen.ExternalDataRetrievalServiceClient.i2.Apollo.Services.Internal.ExternalDataRetrieval.AutoGen.ExternalDataRetrievalService.EndGetContext(IAsyncResult result)
at i2.Apollo.Services.Internal.ExternalDataRetrieval.AutoGen.ExternalDataRetrievalServiceClient.i2.Apollo.Services.Internal.ExternalDataRetrievalService.IExternalDataRetrievalServiceInternals.EndGetContext(IAsyncResult result)
at i2.Apollo.Services.ExternalDataRetrievalService.ExternalDataRetrievalServiceFacade.CompleteAndMarshalGetContext(IExternalDataRetrievalServiceInternals client, IAsyncResult resultToken)
at i2.Apollo.Services.AsynchronousCallCompleter`2.GetResponse(IAsyncResult asyncResult, TResult& successResult, Exception& failureException)"
Error message in i2 Analyst's Notebook Premium:
Program: C:\Program Files (x86)\i2 Analyst's Notebook 9\ANB.exe
abnormal program termination"
Resolving The Problem
To prevent this happening, there are configuration properties (one for the Intelligence Portal and one for the i2 Analyst’s Notebook Premium) to limit the amount of items returned by the expand or get context operation via data access on-demand.
If the number of items to be returned exceeds the maximum number specified, the system returns the maximum specified number of items and displays the message: "The operation has returned too many results, only the first maximum item limit have been processed." Where maximum item limit is the corresponding numeric value. If this message is encountered, and the underlying hardware is well specified, then a system administrator can change the maximum item limit. However, increasing the limit increases the risk that a memory problem is encountered and an error is raised. For i2 Analyst’s Notebook Premium there are two methods to change the limit:
- Clean installation, no-one has started i2 Analyst’s Notebook Premium: Edit the file "C:\Program Files (x86)\IBM i2 Analysis Repository Connector 8\DataSourceConfiguration.xml", uncomment the XML element named "MaxExpandResultsOnExternalDataSource" and change the associated value.
- A connection to the Analysis Repository is already established: Edit the file, that is created on the first connection based on the template file mentioned in method 1, "C:\Users\<username>\AppData\Local\IBM i2\Analysis Repository Connector\DataSourceConfiguration.xml", uncomment the XML element named "MaxExpandResultsOnExternalDataSource" and change the associated value.
i2 Analyst’s Notebook Premium must be restarted after any of the above changes. The default value of 750 was found to be a suitable conservative value for items that contain 10 or less properties. If the items are sparsely populated, the value can be increased. If it is increased too much, server exceptions will be encountered when trying to serialize the items for transport. If the items have a large number of properties that are heavily populated this value might need to be reduced. For the Intelligence Portal, change the limit by the following method:
- Edit the "C:\IBM\i2analyze\toolkit\confirguration\fragments\core\ApolloClientSettings.xml" file, find the XML element named "MaxExternalDataExpandResultsOnClient" and change the associated value.
- In a command prompt, navigate to the “C:\IBM\i2analyze\toolkit\scripts” directory and run the following commands to stop Liberty, redeploy with the new setting, and restart Liberty:
setup -t stopLiberty
setup -t deploy
setup -t startLiberty
Note: From either the Intelligence Portal or the i2 Analyst’s Notebook Premium, if you have more than one selected item, the above limit is for the total number of results for all selected items. If the first item has the maximum number of items linked to it, the results will not contain any related items for the other selected items. Therefore, for highly connected items it is better to expand from individual items at a time. This is an architectural limit of the data access on-demand get context function and is a known limitation.
Note: This limitation does not apply to running an expand on an item from the Analysis Repository in either the Intelligence Portal or i2 Analyst’s Notebook Premium.
16 June 2018