APAR status
Closed as program error.
Error description
**************************************************************** ********************************************************* * To reproduce the issue with only Engine API, please use TestMerge project (TestMerge.zip is in attachment) **************************************************************** ********************************************************* You have three classes in your BOM: com.hallmark.smart.optim.OptimizationProblem com.hallmark.smart.optim.OptimizationEngineException com.hallmark.smart.optim.BestMixProblem OptimizationProblem and BestMixProblem have methods and contructors throwing the following exception: OptimizationEngineException. Your are thus throwing an exception which is defined in the BOM. When you read your BOM (de-serialize it) to an object model, each class will be 'inspected' and added to it. For each class, you will thus inspect all methods, constructors, attributes, ... you can find on it. For methods and constructors, inspecting them means you will also try to know if the constructor or method has some exceptions attached to them. If it is the case, you will map the Java Type of the Exception of an IlrType. If the type already exists in the object model, it will find it, otherwise it will create a missing reference type. So as you might suspect, the order in which the bom is inspecting has its importance. With IBM 6, the bom classes are read in the following order: com.hallmark.smart.optim.OptimizationEngineException com.hallmark.smart.optim.OptimizationProblem com.hallmark.smart.optim.BestMixProblem ==> When either OptimizationProblem or BestMixProblem are inspected, the type OptimizationEngineException already exists so it uses it. With SUN 6, the bom classes are read in the following order: com.hallmark.smart.optim.OptimizationProblem com.hallmark.smart.optim.OptimizationEngineException com.hallmark.smart.optim.BestMixProblem ==> When OptimizationProblem is inspected, the type OptimizationEngineException does not exist and create a 'bulk' one (a missing reference). ==> When OptimizationEngineException is inspected, the type OptimizationEngineException is created. ==> When BestMixProblem is inspected, the type OptimizationEngineException already exists so it uses it ==> We end up with two elements having the same FQN with one is a missing reference, the other one is a real class. The missing reference is not replace by the real class once it is available (there is no reset on the list of exceptions for a given IlrMethod) If first class inspected is not OptimizationEngineException, because constructor of OptimizationProblem throws an exception of type OptimizationProblem, we will create an IlrMissingReference (IlrDynamicMissingReference) for type OptimizationEngineException. This missing reference will be added to the list of exception for constructor or method of OptimizationProblem throwing the exception see : IlrMethod.getMethodExceptions() ==> IlrDynamicMethod.getMethodExceptions() IlrNativeBinding.getException() + IlrNativeBinding.createExceptions() + IlrDynamicObjectModel.getClassReference() + IlrDynamicObjectModel.getTypeReference() + ==> The default selector on the merge will find two types for same fqn com.hallmark.smart.optim.OptimizationEngineException: the missing reference the dynamic class see: IlrMergeWizard.allSourcesTypes() IlrCoherentSelector.ClassLookup.MemberLookup.inspect(IlrMethod) Result: Exception at merge time because of duplicated type !MESSAGE Error processing "UpdateDestinationClassSyncCommand" for element "com.hallmark.smart.optim.OptimizationProblem". !STACK 0 ilog.rules.bom.util.IlrMergeWizard$CannotMergeException: duplicated type com.hallmark.smart.optim.OptimizationEngineException at ilog.rules.bom.util.IlrMergeWizard.do(Unknown Source) at ilog.rules.bom.util.IlrMergeWizard.merge(Unknown Source) at ilog.rules.bom.util.IlrMergeWizard.merge(Unknown Source) at ilog.rules.studio.bom.services.internal.ObjectModelSynchronizerI mpl.handleUpdateDestinationClassSyncCommand(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessor Impl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethod AccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at ilog.rules.studio.bom.services.internal.ObjectModelSynchronizerI mpl.handleBasicSyncCommand(Unknown Source) at ilog.rules.studio.bom.services.internal.ObjectModelSynchronizerI mpl.apply(Unknown Source) at ilog.rules.studio.bomupdate.IlrBOMUpdater.applySyncCommands(Unkn own Source) at ilog.rules.studio.bomupdate.ui.IlrDeltaSection$1.widgetSelected( Unknown Source) at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener. java:228) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
Local fix
N/A
Problem summary
An IlrMergeWizard$CannotMergeException occured when updating the BOM.
Problem conclusion
This is fixed.
Temporary fix
Comments
APAR Information
APAR number
RS00325
Reported component name
WS ILOG JRULES
Reported component ID
5724X9800
Reported release
703
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt
Submitted date
2010-08-12
Closed date
2010-10-20
Last modified date
2010-10-20
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
WS ILOG JRULES
Fixed component ID
5724X9800
Applicable component levels
R700 PSY
UP
[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SS6MTS","label":"WebSphere ILOG JRules"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"7.0.3","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]
Document Information
Modified date:
20 October 2010