Pentaho Data Integration编辑数据库连接报General Error in Dialog如何解决
报错详情:
java.lang.NullPointerException at org.pentaho.di.ui.core.database.dialog.XulDatabaseDialog.open(XulDatabaseDialog.java:113) at org.pentaho.di.ui.core.database.dialog.DatabaseDialog.open(DatabaseDialog.java:61) at org.pentaho.di.ui.spoon.delegates.SpoonDBDelegate.editConnection(SpoonDBDelegate.java:96) at org.pentaho.di.ui.spoon.Spoon.editConnection(Spoon.java:2725) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.pentaho.ui.xul.impl.AbstractXulDomContainer.invoke(AbstractXulDomContainer.java:313) at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:157) at org.pentaho.ui.xul.impl.AbstractXulComponent.invoke(AbstractXulComponent.java:141) at org.pentaho.ui.xul.jface.tags.JfaceMenuitem.access$100(JfaceMenuitem.java:43) at org.pentaho.ui.xul.jface.tags.JfaceMenuitem$1.run(JfaceMenuitem.java:106) at org.eclipse.jface.action.Action.runWithEvent(Action.java:498) at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:545) at org.eclipse.jface.action.ActionContributionItem.access$2(ActionContributionItem.java:490) at org.eclipse.jface.action.ActionContributionItem$5.handleEvent(ActionContributionItem.java:402) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89) at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4385) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1512) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1535) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1520) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1324) at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4172) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3789) at org.pentaho.di.ui.spoon.Spoon.readAndDispatch(Spoon.java:1385) at org.pentaho.di.ui.spoon.Spoon.waitForDispose(Spoon.java:7968) at org.pentaho.di.ui.spoon.Spoon.start(Spoon.java:9350) at org.pentaho.di.ui.spoon.Spoon.main(Spoon.java:711) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.pentaho.commons.launcher.Launcher.main(Launcher.java:92)
报错根因
该空指针异常是PDI的数据库连接对话框初始化时读取连接元数据失败导致的,触发场景基本分为两类:本地共享连接配置文件损坏,或者单个作业/转换中存储的连接节点缺失必填参数。
问题修复步骤
- 优先清理共享连接缓存:关闭所有PDI进程,进入操作系统当前用户的个人目录,找到
.kettle文件夹,备份后删除其中的shared.xml文件,重启PDI后重新尝试编辑连接即可,该文件损坏是触发该报错的最常见原因。 - 单个作业/转换损坏修复:如果清理缓存后仍报错,用文本编辑器打开对应报错的
.kjb(作业文件)或.ktr(转换文件),找到<connection>标签对应的节点,删除配置不完整的连接节点,保存后重启PDI重新配置连接即可。 - 运行环境校验:如果是PDI 9.0及以上版本,确认你使用的Java 8为Oracle官方发行版,部分精简版OpenJDK缺失SWT组件依赖会导致对话框初始化失败。
跨作业复用数据库连接的方案
不需要为每个作业单独新建连接,可通过以下三种方式实现连接复用:
- 共享连接:在PDI的视图面板中右键点击已配置好的数据库连接,选择共享,该连接会自动写入全局共享配置,所有本地打开的作业和转换都可以直接选择该连接使用。
- JNDI统一配置:编辑PDI安装目录下
simple-jndi/jdbc.properties文件,按照文件内的示例格式添加你的数据库连接参数,新建数据库连接时选择连接类型为JNDI,仅需填入你在配置文件中设置的JNDI数据源名称即可,该方式适合多环境统一管理连接,迁移时无需修改作业内的连接配置。 - 连接导入导出:右键点击已配置的连接,选择导出将连接保存为XML文件,在其他作业中可直接导入该XML文件生成连接,无需重复填写参数。
内容的提问来源于stack exchange,提问作者clarktwain
相关产品推荐
相关产品推荐

