Как настроить Jaybird со спящим режимом

Я использую jaybird 2.2.3 с спящим режимом 3.5, и когда я использую мастер для перевода в спящий режим файлов сопоставления и базы данных pojos, появляется следующая ошибка «java.lang.NullPointerException»

Я использую то же сопоставление с mysql, и оно работает правильно, поэтому я считаю, что это что-то в jaybird.

My hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD       3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
  <session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</property>
<property name="hibernate.connection.driver_class">org.firebirdsql.jdbc.FBDriver</property>
<property name="hibernate.connection.url">jdbc:firebirdsql://XXXXXX:XXXX/X:\XXXX\XXXX\XXX\XXX\XX\XXX.FDB</property>
<property name="hibernate.connection.username">sysdba</property>
<property name="hibernate.connection.password">XXXXX</property>
  </session-factory>
</hibernate-configuration>

Редактировать:

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)

Кто-нибудь может мне помочь?


person Tiago Roque de Carvalho    schedule 19.09.2013    source источник
comment
Что такое трассировка стека NullPointerException?   -  person Mark Rotteveel    schedule 20.09.2013
comment
Я не смог найти эту трассировку NullPointerException. это изображение ошибки imageshack.us/photo/my-images/ 20/in28.png может помочь мне найти трассировку этого исключения NullPointerException? Спасибо   -  person Tiago Roque de Carvalho    schedule 20.09.2013
comment
Я бы посоветовал посмотреть журнал Netbeans (например, C:\Users\<your username>\AppData\Roaming\Netbeans\<version>\var\log в Windows)   -  person Mark Rotteveel    schedule 20.09.2013
comment
Я нашел messages.log и разместил и отредактировал вопрос   -  person Tiago Roque de Carvalho    schedule 20.09.2013
comment
См. также netbeans.org/bugzilla/show_bug.cgi?id=146785 и netbeans.org/bugzilla/show_bug.cgi?id=212636 Однако я видел это раньше в более поздней версии Netbeans; насколько я знаю, это ошибка в инструментах Hibernate, и она не имеет прямого отношения к Jaybird. См. также stackoverflow.com/questions/14500429/   -  person Mark Rotteveel    schedule 20.09.2013
comment
Я думал, что видел/нашел обходной путь для этого, но мне нужно его найти.   -  person Mark Rotteveel    schedule 20.09.2013
comment
должна быть ошибка netbeans, я использую NetBeans 7.3 и Java 1.7.0-17   -  person Tiago Roque de Carvalho    schedule 20.09.2013
comment
Глядя на код Jaybird и задействованный код netbeans, может быть проблема с загрузкой классов. Я буду исследовать. Я создал тикет tracker.firebirdsql.org/browse/JDBC-325.   -  person Mark Rotteveel    schedule 20.09.2013


Ответы (1)


После изучения кода Netbeans и добавления дополнительных журналов в Jaybird проблема заключается в том, что Netbeans загружает драйвер с помощью специального загрузчика классов, который не возвращает ресурсы в META-INF/services (в частности, для Jaybird 2.2.x: META-INF/services/org.firebirdsql.gds.impl.GDSFactoryPlugin).

Это нарушает работу драйвера, поскольку определения этих служб используются для загрузки доступных определений GDSFactoryPlugin (например, одно для реализации по умолчанию типа 4, реализации Open Office типа 4, встроенного клиента типа 2 и собственного клиента типа 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/ (убедитесь, что имеет сегодняшний день (21 сентября) в качестве даты сборки, возможно, что некоторые зеркала sourceforge все еще распространяют предыдущий снимок).

Полный список изменений версии 2.2.4 можно найти в трекере Jaybird: Версия 2.2. 4.

person Mark Rotteveel    schedule 20.09.2013
comment
тогда с текущими версиями jaybird и netbeans нельзя перепроектировать спящий режим? - person Tiago Roque de Carvalho; 20.09.2013
comment
@TiagoRoquedeCarvalho Нет, к сожалению, нет. В эти выходные я выпущу версию 2.2.4-SNAPSHOT с обходным решением. - person Mark Rotteveel; 21.09.2013
comment
@TiagoRoquedeCarvalho Я загрузил снимок, подробности см. в редактировании моего ответа. - person Mark Rotteveel; 21.09.2013