java - 非法访问异常: Eclipse Persistence Localization

标签 java jpa

我正在使用 JPA 和 Spring MVC 开发一个 Web 应用程序,但我遇到了一个关于 Eclipse Persistence 本地化的恼人异常。这是堆栈跟踪:

mars 09, 2014 2:23:06 PM org.apache.catalina.loader.WebappClassLoader findResourceInternal
Infos: Illegal access: this web application instance has been stopped already.  Could not load org/eclipse/persistence/internal/localization/i18n/LoggingLocalizationResource_fr.properties.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
mars 09, 2014 2:23:06 PM org.apache.catalina.loader.WebappClassLoader loadClass
Infos: Illegal access: this web application instance has been stopped already.  Could not load org.eclipse.persistence.internal.localization.i18n.LoggingLocalizationResource_fr_FR.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at java.util.ResourceBundle$Control.newBundle(ResourceBundle.java:2566)
    at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1436)
    at java.util.ResourceBundle.findBundle(ResourceBundle.java:1400)
    at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1296)
    at java.util.ResourceBundle.getBundle(ResourceBundle.java:795)
    at org.eclipse.persistence.internal.localization.EclipseLinkLocalization.buildMessage(EclipseLinkLocalization.java:60)
    at org.eclipse.persistence.internal.localization.EclipseLinkLocalization.buildMessage(EclipseLinkLocalization.java:34)
    at org.eclipse.persistence.internal.localization.LoggingLocalization.buildMessage(LoggingLocalization.java:25)
    at org.eclipse.persistence.logging.AbstractSessionLog.formatMessage(AbstractSessionLog.java:987)
    at org.eclipse.persistence.logging.DefaultSessionLog.log(DefaultSessionLog.java:142)
    at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3480)
    at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:4669)
    at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:4641)
    at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:4617)
    at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:4539)
    at org.eclipse.persistence.internal.sessions.DatabaseSessionImpl.logout(DatabaseSessionImpl.java:937)
    at org.eclipse.persistence.sessions.server.ServerSession.logout(ServerSession.java:776)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.removeSessionFromGlobalSessionManager(EntityManagerSetupImpl.java:511)
    at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.undeploy(EntityManagerSetupImpl.java:2850)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.close(EntityManagerFactoryDelegate.java:267)
    at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.finalize(EntityManagerFactoryDelegate.java:344)
    at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
    at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:101)
    at java.lang.ref.Finalizer.access$100(Finalizer.java:32)
    at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:190)

由于我是 JPA 和 Spring MVC 的新手,我不知道是什么导致了这个异常。为什么我会出现此异常以及如何解决?谢谢。

最佳答案

我已将 Eclipse WTP 服务器设置为“构建事件后自动发布”。每次自动发布后,我都会遇到与您显示的相同的错误消息。

有两种方法可以解决此问题。

  • 将 Eclipse 服务器设置设置为“从不自动发布”。

  • 添加 Servlet 关闭 Hook ,它会显式关闭 JPA 的 EntityManagerFactory。

您可以轻松地将击倒 Hook 添加到 ServletContextListener。就我而言,这是一个 GuiceServletContextListener,但它应该对任何 ServletContextListener 都有效。

import javax.persistence.EntityManagerFactory;
import javax.servlet.ServletContextEvent;
import javax.servlet.annotation.WebListener;

import com.google.inject.Guice;
import com.google.inject.Injector;
import com.google.inject.servlet.GuiceServletContextListener;

@WebListener
public class BmjServletContextListener extends GuiceServletContextListener {

    Injector injector;

    public void contextDestroyed(ServletContextEvent servletContextEvent) {
        injector.getInstance(EntityManagerFactory.class).close(); // <--- POI !!
        super.contextDestroyed(servletContextEvent);
    }

    public void contextInitialized(ServletContextEvent servletContextEvent) {
        super.contextInitialized(servletContextEvent);
    }

    protected Injector getInjector() {
        injector = Guice.createInjector(new MyModule1(), new MyModule2());
        return injector;
    }
}

关于java - 非法访问异常: Eclipse Persistence Localization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22282800/

相关文章:

java - 向简单的 Maven 项目添加样式

java - 我正在尝试将一串单词转换为包含空格的数组

java - 无法使用 EclipseLink 从 Oracle TIMESTAMPTZ 列获取日历对象

java - JPA抽象类与子类共享PK

java - 如何记录到特定文件?

java - Android 解析 KML 文件获取时间

java - 学习 Spring/Hibernate 的菜鸟项目

java - 在MySQL Hibernate JPA事务期间未检测到死锁

java - 合并回来时不会调用分离实体的生命周期回调

java - 从long到int的可能的有损转换,找不到错误