【发布时间】:2014-12-10 15:49:01
【问题描述】:
---更新2---
似乎这个奇怪的错误是由另一个关于捆绑启动顺序的奇怪错误引起的。即使我将启动顺序设置为“项目 A,然后是项目 B”,它有时也会以相反的方式启动它,从而导致 ServiceReference 出现问题。似乎现在终于可以正常工作了。
再次感谢您抽出宝贵时间!
---更新---
今天早上再次测试我的程序后,问题突然消失了。那时我什至没有修改代码。在那之后,我的服务已经走得很远了,但是当我试图解决加载映射类的问题时,问题突然又出现了。 重启 Eclipse 什么也没做,重启我的电脑又解决了这个问题。 它似乎与我的代码没有任何联系......
几分钟前,我的服务开始工作,我在我的数据库中做了一些测试条目,一切都很好。现在我正在充实我的服务(提供更多与数据库交互的选项等),问题又出现了再次,即使我没有更改这部分代码的任何内容.
TL;DR:
似乎是一个完全随机的错误。
无论如何,感谢您到目前为止的回复。如果我需要更深入地研究这个问题,我会考虑这些选项,但现在我认为我正在努力证明我的程序有效,因为这个零星的错误似乎不是我的错。 (反正这只是一个练习,这个程序对我没有实际的实际用途)。
---原创--- 所以我一直在研究一个简单的 OSGi 服务,它使用 Hibernate 来访问数据库。
---可选的文字墙---
关于这个主题的大部分信息似乎都已经过时了,主要是因为官方 OSGi 对休眠的支持还不到一年。在那之前的一切都相当复杂,也不是很有帮助。 (我在放弃之前花了很多时间)。 关于这个主题的开发指南 (http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch17.html) 也相当稀少(我是 Hibernate 和 OSGi 的初学者,本指南似乎期望获得相当深入的知识)。我尝试让快速入门项目“非托管本机”工作,但我之前没有使用过 maven 或 karaf,并且在那里遇到了一些问题。
之后我只是尝试将他们的 HibernateUtil (https://github.com/hibernate/hibernate-orm/blob/4.2/documentation/src/main/docbook/quickstart/tutorials/osgi/unmanaged-native/src/main/java/org/hibernate/osgitest/HibernateUtil.java) 集成到我自己的程序中,但我总是会在这一行得到一个 nullPointerException:sf = (SessionFactory) context.getService( sr );,因为sr 是null。 (sr 在上面的行中指定,ServiceReference sr = context.getServiceReference( SessionFactory.class.getName() );)
---正文结束---
所以基本上我在回答中偶然发现了这个分步指南:Hibernate and OSGi integration, it unable to load hibernate configuration file,到目前为止它似乎对我来说效果很好(使用依赖项和所需捆绑包的工作要少得多),但是随后我接了电话ServiceReference<?> ref = context.getServiceReference(SessionFactory.class.getName());
我已经知道会发生什么;是的,ref 是 null,因此它不会创建会话。
在找到一些“工作”Hibernate Services 的其他示例后,他们似乎都以类似的方式创建了他们的 Session,但我找不到其他人有这个问题。
我做错了什么,是什么导致了这个问题?还有什么遗漏的吗?
注意:为简单起见,假设我的程序看起来与上面提到的答案完全一样。我所做的唯一额外步骤是将“项目 A”包放入“B”所需的捆绑包中,然后我在 Eclipse Equinox 中启动捆绑包。
没有错误,但在调试中我可以看出ref 是null
(显然我打算稍微花点心思,但为此我首先需要让它工作......)
【问题讨论】:
标签: hibernate session osgi sessionfactory