大树先生 2016-04-30 05:54 采纳率: 100%
浏览 2222
已采纳

hibernate4.3在servlet中的无法找到ServiceRegistry

如题,起初配置的hibernate5,通过servlet调用hibernateUtil生成session一切正常。
后来改成了hibernate4.3.11,并修改了对应的配置文件。
结果在main方法里面调用hibernateUtil,再进行操作一切正常。但如何通过servlet访问,会马上报:**java.lang.ClassNotFoundException: org.hibernate.service.ServiceRegistry**

这个问题百度了很久,网上也有类似的疑问,但没有一个正确解决了的,希望能够得到大神的帮助。
以下是异常和相关代码:

异常

java.lang.ClassNotFoundException: org.hibernate.service.ServiceRegistry
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at findLose.backGroud.wsz.service.UserService.(UserService.java:32)
at findLose.backGroud.wsz.control.web.LoginControl.(LoginControl.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:379)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:116)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)

相关代码

 @WebServlet("/dologin.html")
public class LoginControl extends HttpServlet {
    UserService userService = new UserService();  //出错代码,这个里面调用了hibernateUtil来获取currentSession
        …………
    }
 public class HibernateUtil {

    private static SessionFactory sessionFactory;
    private static Session session;

    static {
        // 创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化
        Configuration config = new Configuration().configure();
        StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
                .applySettings(config.getProperties());
        ServiceRegistry ssr = ssrb.build();
        sessionFactory = config.buildSessionFactory(ssr);
    }

    /**
     * 获取SessionFactory
     * 
     * @return
     */
    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static Session getCurrentSession() {
        session = sessionFactory.openSession();
        return session;
    }

    public static void closeSession(Session session) {

        if (null != session) {
            session.close();
        }
    }
}

配置:

 <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>


        <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/findlose</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>

        <!--方言-->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <!-- ORM映射产生表的策略:update 实体和表的结构和数据 -->
        <property name="hibernate.hbm2ddl.auto">update</property>
        <!-- 产生的SQL语句显示 -->
        <property name="hibernate.show_sql">true</property>
        <!-- 产生的SQL语句格式化 -->
        <property name="hibernate.format_sql">true</property>
        <!-- 产生一个session在一个线程上 -->
        <property name="hibernate.current_session_context_class">thread</property>

        <!--罗列所有持久化类的类名 ,类名重复会抛异常,即使不在一个包下-->
        <mapping class="findLose.backGroud.wsz.entity.Face"/>
        <mapping class="findLose.backGroud.wsz.entity.Group"/>
        <mapping class="findLose.backGroud.wsz.entity.Person"/>
        <mapping class="findLose.backGroud.wsz.entity.User"/>

    </session-factory>
</hibernate-configuration>
  • 写回答

2条回答 默认 最新

  • 武哥聊编程 Gitchat金牌讲师 2016-05-04 12:14
    关注

    提供三个思路:
    1. org.hibernate.service.ServiceRegistry是包org.hibernate.service中的一个方法,而org.hibernate.service包在hibernate-core-xx.jar中,你看一下hibernate-core-xxx.jar这个核心包有没有导入,不过这个可能性不大。

    1. 与struts结合时就出现问题,可能是jar包没有拷贝到WEB-INF/lib文件夹下,你可能使用UserLibary自己加的包,也就是说WEB-INF/lib下在部署时没有拷贝你的jar包进来,所以你可以尝试这样去解决:看这篇文章的方法:http://blog.csdn.net/eson_15/article/details/51281079
      你将所有你自己添加的jar包全部选中即可。

    2. hibernate4获取sessionFactory你试试下面的方法:

     public class HibernateUtil {
    
        private static SessionFactory sessionFactory;
        private static Session session;
            private static Configuration configuration = new Configuration();
        private static ServiceRegistry serviceRegistry; 
    
        static {
           try {
                            configuration.configure();
                            serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
                            sessionFactory = configuration.buildSessionFactory(serviceRegistry);
                } catch (Exception e) {
                            System.err.println("%%%% Error Creating SessionFactory %%%%");
                            e.printStackTrace();
                }
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿