【问题标题】:Unable to configure second level cache in hibernate 4.x无法在休眠 4.x 中配置二级缓存
【发布时间】:2013-12-23 12:03:05
【问题描述】:

我正在使用hibernate 4.3MySQL 5.0.我正在尝试在我的示例中配置二级缓存,如下所示。

我的hibernate.cfg.xml

<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.region.factory_class">org.hibernate.cache.ehcache.EhCacheRegionFactory</property>

我的实体类

@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_ONLY)
@Cacheable
public class Employee { ...}

我得到以下异常

Exception in thread "main" java.lang.NoClassDefFoundError: org/hibernate/service/jndi/JndiNameException
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.jboss.logging.Logger$1.run(Logger.java:2252)
at java.security.AccessController.doPrivileged(Native Method)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2227)
at org.jboss.logging.Logger.getMessageLogger(Logger.java:2214)
at org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory.<clinit>(AbstractEhcacheRegionFactory.java:77)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:242)
at org.hibernate.boot.registry.selector.internal.StrategySelectorImpl.selectStrategyImplementor(StrategySelectorImpl.java:125)
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:87)
at org.hibernate.cache.internal.RegionFactoryInitiator.initiateService(RegionFactoryInitiator.java:46)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:83)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:223)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:197)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:178)
at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:295)
at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2442)
at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2438)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1855)
at com.example.hibernate.Hibernate4Main.main(Hibernate4Main.java:33)
Caused by: java.lang.ClassNotFoundException: org.hibernate.service.jndi.JndiNameException
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 22 more

我的配置中缺少什么?我知道hibernate 4.x 中的二级缓存配置与3.x 不同。我已经搜索过了,但没有找到适合我的答案。

感谢您的帮助。

【问题讨论】:

    标签: java hibernate second-level-cache


    【解决方案1】:

    您收到java.lang.NoClassDefFoundError的可能原因

    1) 类在 Java 类路径中不可用。
    2) 您可能正在使用 jar 命令运行程序,而清单文件的 ClassPath 属性中未定义类。
    3) 任何启动脚本都会覆盖 Classpath 环境变量。

    4) 因为 NoClassDefFoundError 是 java.lang.LinkageError 的子类,所以如果其中一个依赖项(如本机库)可能不可用,它也会出现。

    4) 检查日志文件中的 java.lang.ExceptionInInitializerError。由于静态初始化失败导致的 NoClassDefFoundError 很常见。

    5) 如果您在 J2EE 环境中工作,多个 Classloader 之间的 Class 可见性也会导致 java.lang.NoClassDefFoundError。

    【讨论】:

    • 它不应该抛出这个异常,因为我有所有必需的 jars 并且我正在使用 eclipse IDE。你知道任何可以获取 hibernate 4.x 二级缓存示例的 url。
    猜你喜欢
    • 2011-07-08
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 2010-10-29
    相关资源
    最近更新 更多