如何使用hibernate配置Jaybird

我正在使用jaybird 2.2.3和hibernate 3.5,当我使用向导来hibernate映射文件和pojos数据库时出现以下错误“java.lang.NullPointerException”

我使用与mysql相同的映射,它工作正常,所以我相信它是jaybird中的东西

My hibernate.cfg.xml     org.hibernate.dialect.FirebirdDialect org.firebirdsql.jdbc.FBDriver jdbc:firebirdsql://XXXXXX:XXXX/X:\XXXX\XXXX\XXX\XXX\XX\XXX.FDB sysdba XXXXX   

编辑:

 INFO [org.hibernate.cfg.Configuration]: configuring from file: hibernate.cfg.xml INFO [org.hibernate.cfg.Configuration]: Configured SessionFactory: null INFO [org.hibernate.cfg.reveng.OverrideRepository]: Override file: C:\Documents and Settings\micro-40\workspace\testefirebird\src\java\hibernate.reveng.xml INFO [org.netbeans.modules.hibernate.util.HibernateUtil]: Found pre-existing database connection. INFO [org.netbeans.modules.hibernate.util.HibernateUtil]: Database Connection is pre-established. Returning the conneciton. INFO [org.hibernate.connection.ConnectionProviderFactory]: Initializing connection provider: org.netbeans.modules.hibernate.util.CustomJDBCConnectionProvider INFO [org.netbeans.modules.hibernate.util.CustomJDBCConnectionProvider]: Loaded JDBC driver INFO [org.netbeans.modules.hibernate.util.CustomJDBCConnectionProvider]: Got connection.. returning INFO [org.netbeans.modules.hibernate.wizards.HibernateCodeGenWizardDescriptor]: access to hibernate fails. java.lang.NullPointerException at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:86) at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2005) at org.hibernate.cfg.JDBCMetaDataConfiguration.readFromJDBC(JDBCMetaDataConfiguration.java:40) at org.netbeans.modules.hibernate.wizards.HibernateCodeGenWizardDescriptor.checkConfig(Hibernat eCodeGenWizardDescriptor.java:282) [catch] at org.netbeans.modules.hibernate.wizards.HibernateCodeGenWizardDescriptor.isValid(HibernateCod eGenWizardDescriptor.java:177) at org.openide.WizardDescriptor.updateStateOpen(WizardDescriptor.java:872) at org.openide.WizardDescriptor.updateState(WizardDescriptor.java:820) at org.openide.loaders.TemplateWizard.updateState(TemplateWizard.java:754) at org.netbeans.modules.project.ui.NewFileWizard.updateState(NewFileWizard.java:124) at org.openide.WizardDescriptor._updateState(WizardDescriptor.java:798) at org.openide.WizardDescriptor.access$200(WizardDescriptor.java:90) at org.openide.WizardDescriptor$Listener.stateChanged(WizardDescriptor.java:2094) at org.openide.util.WeakListenerImpl$Change.stateChanged(WeakListenerImpl.java:329) at org.openide.loaders.TemplateWizardIterImpl.run(TemplateWizardIterImpl.java:275) at org.openide.util.Mutex.doEvent(Mutex.java:1343) at org.openide.util.Mutex.writeAccess(Mutex.java:457) at org.openide.loaders.TemplateWizardIterImpl.fireStateChanged(TemplateWizardIterImpl.java:261) at org.openide.loaders.TemplateWizardIterImpl.setIterator(TemplateWizardIterImpl.java:120) at org.openide.loaders.TemplateWizardIteratorWrapper.setIterator(TemplateWizardIteratorWrapper. java:79) at org.openide.loaders.TemplateWizard.setTemplateImpl(TemplateWizard.java:209) at org.openide.loaders.TemplateWizard$1.run(TemplateWizard.java:231) at org.openide.loaders.TemplateWizard$1.run(TemplateWizard.java:228) at org.openide.util.Mutex.doEventAccess(Mutex.java:1363) at org.openide.util.Mutex.readAccess(Mutex.java:273) at org.openide.loaders.TemplateWizard.setTemplate(TemplateWizard.java:228) at org.netbeans.modules.project.ui.TemplateChooserPanel.storeSettings(TemplateChooserPanel.java :168) at org.netbeans.modules.project.ui.TemplateChooserPanel.storeSettings(TemplateChooserPanel.java :71) at org.openide.WizardDescriptor.storeSettingsAndNotify(WizardDescriptor.java:1379) at org.openide.WizardDescriptor.access$1700(WizardDescriptor.java:90) at org.openide.WizardDescriptor$Listener$1.run(WizardDescriptor.java:2117) at org.openide.WizardDescriptor.lazyValidate(WizardDescriptor.java:1502) at org.openide.WizardDescriptor.access$1900(WizardDescriptor.java:90) at org.openide.WizardDescriptor$Listener.actionPerformed(WizardDescriptor.java:2141) at sun.reflect.GeneratedMethodAccessor182.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:601) at org.openide.util.WeakListenerImpl$ProxyListener.invoke(WeakListenerImpl.java:457) at com.sun.proxy.$Proxy57.actionPerformed(Unknown Source) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) at java.awt.Component.processMouseEvent(Component.java:6505) at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) at java.awt.Component.processEvent(Component.java:6270) at java.awt.Container.processEvent(Container.java:2229) at java.awt.Component.dispatchEventImpl(Component.java:4861) at java.awt.Container.dispatchEventImpl(Container.java:2287) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) at java.awt.Container.dispatchEventImpl(Container.java:2273) at java.awt.Window.dispatchEventImpl(Window.java:2719) at java.awt.Component.dispatchEvent(Component.java:4687) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:729) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:688) at java.awt.EventQueue$3.run(EventQueue.java:686) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) at java.awt.EventQueue$4.run(EventQueue.java:702) at java.awt.EventQueue$4.run(EventQueue.java:700) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:699) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:154) at java.awt.WaitDispatchSupport$2.run(WaitDispatchSupport.java:182) at java.awt.WaitDispatchSupport$4.run(WaitDispatchSupport.java:221) at java.security.AccessController.doPrivileged(Native Method) at java.awt.WaitDispatchSupport.enter(WaitDispatchSupport.java:219) at java.awt.Dialog.show(Dialog.java:1082) at org.netbeans.core.windows.services.NbPresenter.superShow(NbPresenter.java:1076) at org.netbeans.core.windows.services.NbPresenter.doShow(NbPresenter.java:1126) at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:1098) at org.netbeans.core.windows.services.NbPresenter.run(NbPresenter.java:128) at org.openide.util.Mutex.doEventAccess(Mutex.java:1363) at org.openide.util.Mutex.readAccess(Mutex.java:273) at org.netbeans.core.windows.services.NbPresenter.show(NbPresenter.java:1083) at java.awt.Component.show(Component.java:1651) at java.awt.Component.setVisible(Component.java:1603) at java.awt.Window.setVisible(Window.java:1014) at java.awt.Dialog.setVisible(Dialog.java:1005) at org.netbeans.core.windows.services.DialogDisplayerImpl$1AWTQuery.showDialog(DialogDisplayerI mpl.java:260) at org.netbeans.core.windows.services.DialogDisplayerImpl$1AWTQuery.run(DialogDisplayerImpl.jav a:186) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:727) at java.awt.EventQueue.access$200(EventQueue.java:103) at java.awt.EventQueue$3.run(EventQueue.java:688) at java.awt.EventQueue$3.run(EventQueue.java:686) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) at java.awt.EventQueue.dispatchEvent(EventQueue.java:697) at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138) at java.awt.EventDispatchThread.run(EventDispatchThread.java:91) 

有人能帮我吗?

在深入研究Netbeans的代码并向Jaybird添加额外的日志记录后,问题是Netbeans使用自定义类加载器加载驱动程序,该类加载器不返回META-INF/services资源(特别是对于Jaybird 2.2.x: META-INF/services/org.firebirdsql.gds.impl.GDSFactoryPlugin )。

这会破坏驱动程序,因为这些服务定义用于加载可用的GDSFactoryPlugin定义(例如,一个用于Type 4默认实现,Type 4 Open Office实现,Type 2嵌入式客户端和Type 2本机客户端)。

我将添加某种回退机制或将此插件定义移动到一个单独的位置,并调查Netbeans为什么这样做,因为它对我来说没有多大意义。

使用Jaybird 2.2.4或更高版本。

解决方法

注意 :不要使用此解决方法,它已被Jaybird 2.2.4的发布取代

作为解决方法,我发布了Jaybird 2.2.4的快照构建,您可以从http://sourceforge.net/projects/firebird/files/firebird-jca-jdbc-driver/2.2.4-SNAPSHOT/下载(make确定它今天(9月21日)作为构建日期,有些sourceforge镜像可能仍然分发以前的快照)。

可以在Jaybird跟踪器中找到2.2.4中的完整更改列表: 版本2.2.4 。