0

I'm using this tutorial about simple hibernate implementation, and everything works great just from the console, but when i try to use this example with wicket by the button click on the web, i have an error

WicketMessage: Can't instantiate page using constructor public com.mycompany.app.StartPage(org.apache.wicket.PageParameters) and argument 

Root cause:

java.lang.NoSuchMethodError: org.slf4j.helpers.MessageFormatter.format(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String;
     at org.slf4j.impl.Log4jLoggerAdapter.debug(Log4jLoggerAdapter.java:246)
     at org.hibernate.type.BasicTypeRegistry.register(BasicTypeRegistry.java:147)
     at org.hibernate.type.BasicTypeRegistry.<init>(BasicTypeRegistry.java:50)
     at org.hibernate.type.TypeResolver.<init>(TypeResolver.java:59)
     at org.hibernate.cfg.Configuration.<init>(Configuration.java:250)
     at org.hibernate.cfg.Configuration.<init>(Configuration.java:302)
     at com.mycompany.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:13)
     at com.mycompany.util.HibernateUtil.<clinit>(HibernateUtil.java:8)
     at com.mycompany.app.StartPage$3.<init>(StartPage.java:132)
     at com.mycompany.app.StartPage.<init>(StartPage.java:131)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
     at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
     at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:319)
     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:222)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
     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:407)
     at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
     at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
     at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
     at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
     at java.lang.Thread.run(Thread.java:680)

Complete stack:

org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor public com.mycompany.app.StartPage(org.apache.wicket.PageParameters) and argument 
     at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:212)
     at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)

java.lang.reflect.InvocationTargetException
     at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
     at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
     at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)

java.lang.ExceptionInInitializerError
     at com.mycompany.util.HibernateUtil.buildSessionFactory(HibernateUtil.java:17)
     at com.mycompany.util.HibernateUtil.<clinit>(HibernateUtil.java:8)
     at com.mycompany.app.StartPage$3.<init>(StartPage.java:132)
     at com.mycompany.app.StartPage.<init>(StartPage.java:131)
     at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
     at org.apache.wicket.session.DefaultPageFactory.createPage(DefaultPageFactory.java:188)
     at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:65)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.newPage(BookmarkablePageRequestTarget.java:298)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.getPage(BookmarkablePageRequestTarget.java:320)
     at org.apache.wicket.request.target.component.BookmarkablePageRequestTarget.processEvents(BookmarkablePageRequestTarget.java:234)
     at org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92)
     at org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250)
     at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329)
     at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
     at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
     at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)

here is my StartPage.html

<html>
<head>
    <title>Start Page</title>
</head>
<body>
    <form wicket:id="form">
        <p>
            <input class="button" type="submit" value="load from DB" />
        </p>
    </form>
</body>
</html>

StartPage.java

Form<?> form = new Form<Void>("form") {
    @Override
    protected void onSubmit() {
        SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionFactory.openSession();
    }
};
add(form);

hibernate.cfg.xml

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
        <property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/test_db</property>
        <property name="hibernate.connection.username">postgres</property>
        <property name="hibernate.connection.password">pass</property>
        <property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="transaction.factory_class">org.hibernate.transaction.JDBCTransactionFactory</property>
        <property name="show_sql">true</property>
        <property name="current_session_context_class">thread</property>
        <mapping resource="com/mycompany/app/DBUser.hbm.xml"></mapping>
    </session-factory>
</hibernate-configuration>

An error occur when i add this SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();

fen1ksss
  • 1,100
  • 5
  • 21
  • 44

1 Answers1

3

What's the Exception? First thing I've noticed is that you're creating SessionFactory on every form submit request. Session factory should be created only once on app initialization and on every request you should only obtain hibernate session.

Look at the HibernateUtil class from your tutorial. It creates singleton class for SessionFactory.

Maciej Dragan
  • 485
  • 3
  • 5
  • yeah, i know **Session session = HibernateUtil.getSessionFactory().openSession();**, but if i put this line away from the button click the error occur when i just load the application – fen1ksss Oct 03 '12 at 10:51
  • 1
    Looks like slf4j library version mismatch. This one looks the same: http://stackoverflow.com/questions/5479811/nosuchmethoderror-with-slf4j-api – Maciej Dragan Oct 03 '12 at 11:03
  • In general, when you get a `NoSuchMethodError`, 99% of the time it's either caused by a partially recompiled project (solution is to do a clean build) or mismatched library versions. – biziclop Oct 03 '12 at 18:50