【问题标题】:Not able to build session factory in servlet init method无法在 servlet 初始化方法中构建会话工厂
【发布时间】:2013-09-10 10:27:50
【问题描述】:

我正在尝试将休眠与 servlet 一起使用。由于 SessionFactory 需要花费大量时间来初始化,我决定在 init 方法中构建会话工厂。下面是我的 servlet 代码。

public void init()throws ServletException
{
    factory = new Configuration().configure().buildSessionFactory();

}

但我得到如下错误。

Sep 10, 2013 4:27:12 PM org.apache.catalina.core.ApplicationContext log
INFO: Marking servlet cgi as unavailable
Sep 10, 2013 4:27:12 PM org.apache.catalina.core.StandardContext loadOnStartup
SEVERE: Servlet /school threw load() exception
java.lang.SecurityException: Restricted class org.apache.catalina.servlets.CGIServlet
at  org.apache.catalina.core.DefaultInstanceManager.checkAccess(DefaultInstanceManager.java:432)
at org.apache.catalina.core.DefaultInstanceManager.checkAccess(DefaultInstanceManager.java:423)
at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:399)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
at java.util.concurrent.FutureTask.run(FutureTask.java:166)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

Sep 10, 2013 4:27:52 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [StaffAttendanceReport] in context with path    [/school] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: org.dom4j.DocumentException
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at com.enext.security.base.BaseServlet.getSessionFactory(BaseServlet.java:45)
at com.enext.edu.school.attendance.servlet.StaffAttendanceReport.service(StaffAttendanceReport.java:56)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.smartware.antisql.AntiSQLFilter.doFilter(AntiSQLFilter.java:102)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at Filters.BlockSplChrFliter.doFilter(BlockSplChrFliter.java:46)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:269)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:722)

这个异常是什么意思。

SEVERE: Servlet /school threw load() exception
java.lang.SecurityException: Restricted class org.apache.catalina.servlets.CGIServlet

我改变了tomcat并尝试了同样的异常

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.

下面是我的 hibernate.cfg.xml 文件

<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>
<property name="hibernate.connection.driver_class">oracle.jdbc.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@ip:port:sid</property>
<property name="hibernate.connection.username">uname</property>
<property name="hibernate.connection.password">passwd</property>       
<mapping resource="com/enext/edu/school/attendance/entity/EmployeeMaster.hbm.xml"/>
<mapping resource="com/enext/edu/school/attendance/entity/StudentHolidayMasterBean.hbm.xml"/>    
<mapping resource="com/enext/edu/school/attendance/entity/EmployeeSignin.hbm.xml"/>
</session-factory>
</hibernate-configuration>

我该如何解决这个问题?

【问题讨论】:

  • 确保你的类路径和 lib 文件夹中有所有 dom4j 相关的 jars
  • 当我 cmets factory = new Configuration().configure().buildSessionFactory();该应用程序工作正常。该库已包含在内。

标签: java hibernate servlets


【解决方案1】:

当你得到Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException时,似乎缺少一些jar ..dom4j-1.5.2.jar

【讨论】:

  • 当我 cmets factory = new Configuration().configure().buildSessionFactory();该应用程序工作正常。该库已包含在内。
【解决方案2】:

您似乎缺少dom4j jars,请确保您有这些依赖项

<dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version><version></version>
    </dependency>

【讨论】:

  • 当我 cmets factory = new Configuration().configure().buildSessionFactory();该应用程序工作正常。该库已包含在内。
  • 抱歉没有得到确切的上下文,你的意思是在评论 sessionfactory 时,应用程序正在运行并且你能够坚持,如果没有 sessionfactory 这怎么可能?在您的应用程序尝试构建 sessionfactory 之间,它会查找设置所需的库,并且您的堆栈跟踪清楚地表明...javarevisited.blogspot.in/2011/06/… 此链接可能会帮助您了解 noclassdeffound 异常,请交叉检查您的库(web-inf/库)
猜你喜欢
  • 1970-01-01
  • 2017-04-25
  • 2016-09-19
  • 1970-01-01
  • 2016-04-07
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多