当前位置: 首页 > 面试题库 >

Grails 2.4 + Hibernate 4 +可搜索的插件= ClassNotFoundException:org.hibernate.impl.SessionFactoryImpl

卢晟
2023-03-14
问题内容

最近,我将一个简单的Grails应用程序与Searchable插件集成在一起。我发现,Searchable插件不适用于Hibernate 4库。

在这里您可以找到一个示例应用程序,其中仅包含干净的Grails 2.4应用程序,仅添加了Searchable插件-https:
//github.com/wololock/grails-searchable-
example

当我运行该应用程序时:

runtime ":hibernate4:4.3.5.5"

依赖关系,它不会启动并引发异常:

ClassNotFoundException: org.hibernate.impl.SessionFactoryImpl

我已经发现,在Hibernate4中,SessionFactoryImpl已移至org.hibernate.internal包中,并且Compass似乎在旧位置中查找此类:

2014-10-11 19:41:58,142 [localhost-startStop-1] ERROR context.GrailsContextLoaderListener  - Error initializing the application: org/hibernate/impl/SessionFactoryImpl
Message: org/hibernate/impl/SessionFactoryImpl
Line | Method
->>   95 | injectLifecycle in org.compass.gps.device.hibernate.lifecycle.DefaultHibernateEntityLifecycleInjector

切换回:

runtime ":hibernate:3.6.10.17"

和改变

cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'

在DataSource.groovy中解决了该问题。

我的问题是: 是否可以在Hibernate 4中使用Searchable插件,或者我们必须等待或解决Compass /
Searchable源代码中的问题?您如何在Grails应用程序中处理该问题?谢谢您的提示。


问题答案:

Hiberate 3.x和4.x之间有一些软件包和类名的更改,因此,在极少数情况下,与Hibernate
3.x一起使用的代码无法与4.x一起使用。除了名称更改之外,事情的工作方式也发生了很大的内部变化,因此编译的代码不一定会运行。应用程序选项1是降级到Hibernate3.x。其中的配置设置已包括在内并已注释掉(BuildConfig.groovy,DataSource.groovy),因此这是一个非常快速的选项。如果您依赖于4.x中添加的功能,显然不是一个选择,这只会延迟真正的问题,直到您必须升级Hibernate。

使用Hibernate
3所需要的所有插件进行更新,以支持hibernate4,无论是作为替代,或者最理想的是采用一些交叉编译的技巧或其他3,同时支持第三党库。假设用户最终将从3.x升级的一个插件选项是创建一个3.x分支,并为Hibernate
4启动插件的新主版本(在master分支中),并进行更改以使其在4中工作。
X。使用3.x分支支持安全更新和非常小的问题,但不要添加新功能。很多插件作者可能会走这条路。

在某些情况下,另一种选择最有意义-什么也不要做。这适用于可搜索。可搜索的使用方法http://www.compass-
project.org/实际上已经失效-其最新版本是4年前。Shay
Banon现在是http://www.elasticsearch.org/的CTO,我相信Shay不再从事Compass的工作,而创办了Elasticsearch,因为将Compass扩展到单个服务器之外是不切实际的。可以将Lucene索引存储在数据库中,但是这样做确实可以为您提供集中式的单个编写器和一个或多个(具有数据库集群或类似功能)集中式的读取器,而带有自定义协议的优化搜索服务器等也可以使用更有意义。

Solr也达成共识,似乎是首选Elasticsearch。Solr
Grails插件三年没有更新,Elasticsearch插件也发霉了,但是最近Noam
Tenne接任了该插件的负责人,做了很多出色的工作,并且在过去的几个月中完成了多个发行版。请注意,旧插件elasticsearchelasticsearch- gorm插件已合并并更新以创建新elasticsearch插件。

还有一种选择是使用Hibernate自己的产品Hibernate
Search。有一个插件,但自2012年以来未进行过更新。自私的是,这是我的个人喜好-
选择此选项,接管插件(假设是肯定的答复,或者来自原始作者的未答复)并更新为兼容使用最新的Hibernate
4.x插件。这将为我们提供一个替代Elasticsearch的好选择。

除非如此,否则我认为Elasticsearch是您的最佳选择。



 类似资料:
  • 我试图将我的应用程序从grails 2.1.1升级到grails 3.0.5 我遇到安装可搜索插件的问题... 我看到这个页面.它说“圣杯版本:2.0 我把<code>放在mavenRepo上http://repo.grails.org/grails/core“在这样的存储库中。。 和 但是我得到了这个错误 配置 失败:构建失败,但有一个异常。 > 其中:构建文件'C:\Users\User\Do

  • 将搜索功能添加到 jsTree。 $.jstree.defaults.searchsearch plugin 存储搜索插件的所有默认值 $.jstree.defaults.search.ajaxsearch plugin 类似于 jQuery 的 AJAX 配置,如果应查询服务器以获取结果,则jstree使用该配置。 str 请求中将添加一个(搜索字符串)参数,inside 如果搜索仅限于节点ID

  • 这个插件增加了搜索树中项目甚至只显示匹配节点的可能性。 您可以在API中找到所有搜索插件配置选项. $(function () { $("#plugins4").jstree({ "plugins" : [ "search" ] }); var to = false; $('#plugins4_q').keyup(function () { if(to)

  • 这是一个VB6的插件,为VB6提供了增强的搜索支持.

  • 插值搜索是二进制搜索的改进变体。 该搜索算法适用于所需值的探测位置。 为使此算法正常工作,数据收集应采用排序形式并均匀分布。 二进制搜索与线性搜索相比具有时间复杂性的巨大优势。 线性搜索具有Ο(n)的最坏情况复杂度,而二分搜索具有Ο(log n)。 存在可以预先知道目标数据的位置的情况。 例如,如果是电话目录,我们是否要搜索Morphius的电话号码。 在这里,线性搜索甚至二进制搜索看起来都很慢,

  • 当couchbase与弹性搜索插件集成时,这更像是一个设计问题。我在之前的产品中使用了couchbase和Multitenance,我们遵循了couchbase博客上的第一个建议,即所有租户使用单一couchbase Bucket。 目前,我们正在研究利用Couchbase弹性搜索插件对Couchbase数据进行弹性搜索。通过Couchbase弹性搜索插件留档(安装和设置)我意识到,你将能够只映射