【问题标题】:Hibernate Ehcache in GAE throws java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted classGAE 中的 Hibernate Ehcache 抛出 java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class
【发布时间】:2016-02-09 11:38:53
【问题描述】:

我是 Google App Engine 的新手。早些时候,我使用 jsf、hibernate、java 和 glassfish 服务器创建了一个动态 Web 应用程序。现在我将该应用程序结构转换为 Google App 引擎结构。所以现在我正在使用 GAE 和本地 MySQL 数据库。

我使用运行时目标 GAE 服务器创建了简单的动态 Web 应用程序。我可以调用 Jsf 登录页面,但无法登录应用程序导致获取java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class

此处为完整堆栈跟踪

Caused by: java.lang.NoClassDefFoundError: java.rmi.server.UID is a restricted class. Please see the Google  App Engine developer's guide for more details.
    at com.google.appengine.tools.development.agent.runtime.Runtime.reject(Runtime.java:52)
    at net.sf.ehcache.Cache.<init>(Cache.java:191)
    at net.sf.ehcache.config.ConfigurationHelper.createCache(ConfigurationHelper.java:291)
    at net.sf.ehcache.config.ConfigurationHelper.createDefaultCache(ConfigurationHelper.java:241)
    at net.sf.ehcache.CacheManager.configure(CacheManager.java:262)
    at net.sf.ehcache.CacheManager.init(CacheManager.java:196)
    at net.sf.ehcache.CacheManager.<init>(CacheManager.java:183)
    at net.sf.ehcache.CacheManager.create(CacheManager.java:343)
    at org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:130)
    at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:173)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1176)
    at hibernate.HibernateSessionFactory.<clinit>(HibernateSessionFactory.java:31)
    at hibernate.UsersDAO.login(UsersDAO.java:98)
    at utils.LoginBean.loginProject(LoginBean.java:82)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at org.apache.el.parser.AstValue.invoke(AstValue.java:191)
    at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:276)
    at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
    at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:88)
    ... 43 more

我的 HibernateSessionFactory 类(我遇到错误的一段代码):

private static String CONFIG_FILE_LOCATION = "hibernate.cfg.xml";
    private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();
    private  static Configuration configuration = new Configuration();
    private static org.hibernate.SessionFactory sessionFactory;
    private static String configFile = CONFIG_FILE_LOCATION;

    static {
            try {
            configuration.configure(configFile);
            sessionFactory = configuration.buildSessionFactory(); // <==here getting error
                } catch (Exception e) {                        
                        e.printStackTrace();
                }
        }

我无法理解我在哪里做错了。如果有人有同样的经历,请分享我。
我在谷歌上搜索了这个异常并得到了很多答案,但这个答案不适合,因为这里在不同的库中得到了异常。

提前感谢和赞赏。

【问题讨论】:

  • 堆栈跟踪不完整。根本原因缺失。答案在那边。也许您只复制了一部分或没有查看服务器日志?这至少不是 JSF/Hibernate 特定的问题。 JSF 在这里只是用户界面,而 Hibernate 在这里只是 ORM。
  • 好的@BalusC,那我需要检查什么?我被卡住了,请建议我该怎么办?因为我粘贴了所有的 src 文件和网页,也做了服务器配置。我的登录页面正在调用,但我无法登录。
  • 堆栈跟踪不完整。根本原因缺失。答案在那边。也许您只复制了一部分或没有查看服务器日志?
  • 跟踪服务器日志后,我得到了错误( sessionFactory = configuration.buildSessionFactory(); )所以更新问题。
  • 太好了,我们到了某个地方。我进一步改进了这个问题。现在是等待答案的问题。

标签: java hibernate google-app-engine rmi ehcache


【解决方案1】:

看起来您使用的是相当旧版本的 EhCache。 这个文档http://www.ehcache.org/documentation/2.8/integrations/googleappengine.html 说你应该使用 2.3+ 版本以避免java.rmi.server.UID is a restricted class 异常。

【讨论】:

    猜你喜欢
    • 2015-10-21
    • 2012-08-07
    • 2012-03-19
    • 2017-05-11
    • 2021-05-30
    • 2015-11-06
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多