Так что первой в этом году будет запись о странном баге в ODI. Чувствую я, что год пройдет как раз под знаком разбирательств с багами в нашем любимом инструменте.
Начнем.
Некоторые вещи, как описываемая ниже, очень огорчают. В частности, вот эта ошибка, понять причины которой я пока так и не смог.
Предистория.
Разрабатываем проект в новой версии ODI. В наличии три десятка простых интерфейсов со справочниками и несколько штук таблиц фактов. И вот один из интерфейсов для загрузки таблицы фактов, после того, как добрый десяток таблиц источников был добавлен в диаграмму и успешно соединен между собой, открываться отказался.
Что ж, проект, можно сказать, тренировочный. Делаем интерфейс еще раз. Получаем через время тот же результат. И третий раз уже другой разработчик делает интерфейс, соединяет примерно половину справочников с таблицей фактов, сохраняет интерфейс и уходит на выходные.
В понедельник все повторяется... При попытке открыть маппинг интерфейса получаем вот такую ошибку :
Поиск по патчам результата не дал. Изменение контекста по-умолчанию, назначение связок для неиспользуемого контекста Global тоже не помогло.
После попытки открыть маппинг курсор мыши отображается в виде песочных часов при всех последующих действиях. Чтобы избавиться от этого приходилось просто перезапускать ODI Студию.
Мною была осуществленна попытка работать через вкладку Quick Edit. Удаление таблиц источников или изменения в маппингах колонок, удаление соединений - любые изменения в режиме быстрого редактирования интерфейса не сохраняются, так как сам интерфейс не сохраняется.
Причем, когда пытаешься закрыть интерфейс, и отвечаешь Да, на вопрос о сохранении - просто ничего не происходит, и вкладка редактирования интерфейса просто не закрывается. При нажатии на кнопку сохранения - выдает вот эту ошибку:
К сожалению, причину ошибки в отображении маппинга найти пока так и не удалось. Даже специальная утилита для проверки корректности записей в репозитории, называемая Repository Consistency Checker (RCC) в этом случае не помогла. Она при полной проверке выдала только некое предупреждение для одного из интерфейсов в проекте.
Единственная радость - удалось этот (и потом еще один) интерфейс вернуть к жизни с помошью одного нехитрого трюка. Нехитрого и стандартного процесса экспорта - импорта объекта ODI (т.е. описываемого поврежденного интерфейса).
В этом случае, правда, речь не шла о переносе между проектами. Просто пакет, в котором использовался наш испорченый интерфейс, модифицировался, интерфейс из него удалялся, далее интерфейс экспортировался (не забудьте установить правильную кодовую страницу, если вы пишите комментарии в интерфейсах не на английском языке), затем удалялся, а затем импортировался обратно.
По всей видимости, суть ошибки состоит в неправильной обработке или неправильном сохранении информации о взаимном расположении таблиц источников на диаграмме маппинга интерфейса. Так как после восстановления эта, ранее не открывавшаяся часть интерфейса имела следующий вид:
Как видно, все таблицы источники выстроены в строгом порядке сверху вниз, в отличие от реальных интерфейсов, которые могут выглядеть самым замысловатым образом (вот тут примеры для OWB).
Полный текст ошибки для тех кто ищет по интернету что произошло с их интерфейсом:
An internal error occured, whilst opening the diagram.
java.io.IOException
at oracle.diagram.dif.DiagramIdeNode.getDiagram(DiagramIdeNode.java:226)
at oracle.modeler.dif.ModelerGraphicBridge.getGrapher(ModelerGraphicBridge.java:408)
at oracle.modeler.dif.ModelerGraphicBridge.getGrapher(ModelerGraphicBridge.java:326)
at oracle.modeler.addin.ModelerNode.findOrCreateManager(ModelerNode.java:212)
at oracle.modeler.addin.ModelerDiagram.findOrCreateGraphSystemFromContext(ModelerDiagram.java:344)
at oracle.diagram.framework.editor.CommonDiagram.open(CommonDiagram.java:219)
at oracle.modeler.addin.ModelerDiagram.open(ModelerDiagram.java:106)
at oracle.odi.ui.etlmodeler.custom.OdiModelerDiagram.access$0(OdiModelerDiagram.java:1)
at oracle.odi.ui.etlmodeler.custom.OdiModelerDiagram.open(OdiModelerDiagram.java:268)
at oracle.diagram.framework.editor.IdeDiagramEditor.openDiagram(IdeDiagramEditor.java:264)
at oracle.diagram.framework.editor.IdeDiagramEditor.open(IdeDiagramEditor.java:222)
at oracle.modeler.addin.ModelerEditor.open(ModelerEditor.java:74)
at oracle.odi.ui.editor.pop.OdiTabbedModelerEditor.open(OdiTabbedModelerEditor.java:629)
at oracle.ideimpl.editor.EditorState.openEditor(EditorState.java:283)
at oracle.ideimpl.editor.EditorState.createEditor(EditorState.java:184)
at oracle.ideimpl.editor.EditorState.getOrCreateEditor(EditorState.java:95)
at oracle.ideimpl.editor.SplitPaneState.canSetEditorStatePos(SplitPaneState.java:232)
at oracle.ideimpl.editor.SplitPane.setCurrentEditorStatePos(SplitPane.java:1228)
at oracle.ideimpl.editor.SplitPane$1.valueChanged(SplitPane.java:134)
at oracle.ide.controls.customtab.CustomTab.fireSelectionChange(CustomTab.java:304)
at oracle.ide.controls.customtab.CustomTab._setSelectedPage(CustomTab.java:635)
at oracle.ide.controls.customtab.CustomTab.setSelectedPage(CustomTab.java:596)
at oracle.ide.controls.customtab.CustomTab.selectPageAt(CustomTab.java:650)
at oracle.ide.controls.customtab.CustomTab.mousePressed(CustomTab.java:1016)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
at java.awt.AWTEventMulticaster.mousePressed(AWTEventMulticaster.java:262)
at java.awt.Component.processMouseEvent(Component.java:6286)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3268)
at java.awt.Component.processEvent(Component.java:6054)
at java.awt.Container.processEvent(Container.java:2042)
at java.awt.Component.dispatchEventImpl(Component.java:4652)
at java.awt.Container.dispatchEventImpl(Container.java:2101)
at java.awt.Component.dispatchEvent(Component.java:4483)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4235)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168)
at java.awt.Container.dispatchEventImpl(Container.java:2085)
at java.awt.Window.dispatchEventImpl(Window.java:2479)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:645)
at java.awt.EventQueue.access$000(EventQueue.java:85)
at java.awt.EventQueue$1.run(EventQueue.java:604)
at java.awt.EventQueue$1.run(EventQueue.java:601)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:614)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:270)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:175)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:170)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:162)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Вот такая овсянка получается...
Желаю всем удачной борьбы с противостоящими багами в наступившем году.
Причина случайно не найдена?
ОтветитьУдалитьЕсли интерфейсы содержат хотя бы один джойн, то вот такое сейчас постоянно выпадает :(
Точная причина не найдена, есть предположение.
УдалитьПостарайтесь не сворачивать таблицы в тот вид, когда не видно столбцов. У меня подобное произошло в интерфейсе, где было больше 10 источников, сейчас, когда источников до 5 ни в одном интерфейсе не повторялась эта ошибка, возможно, это тоже причина.
Gracias!
ОтветитьУдалитьКак раз очень часто использую сворачивание, поскольку монитор махонький. Придется отказаться от этого.