java - 当我尝试从 sessionFactory 打开 hibernate 获取 session 时,出现 org.apache.wicket.WicketRuntimeException

标签 java spring hibernate wicket

我创建了基本的 wicket-spring-hibernate 应用程序。我认为, Spring 已正确集成到 Wicket 口中。 当我启动我的应用程序时,hibernate 从我的模型类创建表,但是当我尝试从 sessionFactory 打开 session 时,我得到空指针异常。

我正在使用 wicket 版本 6.5.0、spring 版本 3.2.1.RELEASE、hibernate 版本 4.1.9.Final

我的主页:

public class HomePage extends WebPage {
private static final long serialVersionUID = 1332168213993623852L;

@Resource
RezervaceDao rezervaceDao;

public HomePage() {
    add(new FormPanel("formPanel"));
    Rezervace rezervace = new Rezervace("test1", "test2", "test3", "test4");

    rezervaceDao.insert(rezervace);
}
}

我的 Dao 类:

public class RezervaceDaoImpl implements RezervaceDao{

@Autowired
private SessionFactory sessionFactory;

@Override
@Transactional
public void insert(Rezervace rezervace) {
    sessionFactory.getCurrentSession();
    //sessionFactory.getCurrentSession().saveOrUpdate(rezervace);
}
}

我的ApplicationContext.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
    http://www.springframework.org/schema/beans     
    http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">

<context:property-placeholder location="classpath:/jdbc.properties" />

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="${jdbc.driverClassName}" />
    <property name="url" value="${jdbc.url}" />
    <property name="username" value="${jdbc.username}" />
    <property name="password" value="${jdbc.password}" />
    <property name="validationQuery" value="${jdbc.query}" />
</bean>

<!-- hibernate session factory -->
<bean id="sessionFactory"
    class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="cz.bartoska.model" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
        </props>
    </property>
</bean>

<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<tx:annotation-driven transaction-manager="transactionManager"/>

<bean id="rezervaceDao" class="cz.bartoska.dao.RezervaceDaoImpl"/>
</beans>

开始后我收到以下异常:

    11:57:55.086 [http-nio-8080-exec-3] ERROR o.a.wicket.DefaultExceptionMapper - Unexpected error occurred
org.apache.wicket.WicketRuntimeException: Can't instantiate page using constructor 'public cz.bartoska.HomePage()'. Might be it doesn't exist, may be it is not visible (public).
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:193) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:66) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.DefaultMapperContext.newPageInstance(DefaultMapperContext.java:133) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.core.request.handler.PageProvider.resolvePageInstance(PageProvider.java:278) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.core.request.handler.PageProvider.getPageInstance(PageProvider.java:166) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.handler.render.PageRenderer.getPage(PageRenderer.java:78) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.handler.render.WebPageRenderer.renderPage(WebPageRenderer.java:94) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.handler.render.WebPageRenderer.respond(WebPageRenderer.java:244) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.core.request.handler.RenderPageRequestHandler.respond(RenderPageRequestHandler.java:165) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:840) ~[wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.RequestHandlerStack.execute(RequestHandlerStack.java:64) ~[wicket-request-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:254) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:211) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:282) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:244) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:188) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:267) [wicket-core-6.5.0.jar:6.5.0]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) [catalina.jar:8.0.15]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) [catalina.jar:8.0.15]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) [catalina.jar:8.0.15]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) [catalina.jar:8.0.15]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501) [catalina.jar:8.0.15]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) [catalina.jar:8.0.15]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [catalina.jar:8.0.15]
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:610) [catalina.jar:8.0.15]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) [catalina.jar:8.0.15]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:537) [catalina.jar:8.0.15]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1085) [tomcat-coyote.jar:8.0.15]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:658) [tomcat-coyote.jar:8.0.15]
    at org.apache.coyote.http11.Http11NioProtocol$Http11ConnectionHandler.process(Http11NioProtocol.java:222) [tomcat-coyote.jar:8.0.15]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1556) [tomcat-coyote.jar:8.0.15]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1513) [tomcat-coyote.jar:8.0.15]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [na:1.7.0_71]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [na:1.7.0_71]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-util.jar:8.0.15]
    at java.lang.Thread.run(Unknown Source) [na:1.7.0_71]
Caused by: java.lang.reflect.InvocationTargetException: null
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_71]
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.7.0_71]
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.7.0_71]
    at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.7.0_71]
    at org.apache.wicket.session.DefaultPageFactory.newPage(DefaultPageFactory.java:174) ~[wicket-core-6.5.0.jar:6.5.0]
    ... 35 common frames omitted
Caused by: java.lang.NullPointerException: null
    at cz.bartoska.dao.RezervaceDaoImpl.insert(RezervaceDaoImpl.java:23) ~[RezervaceDaoImpl.class:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_71]
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110) ~[spring-tx-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204) ~[spring-aop-3.2.1.RELEASE.jar:3.2.1.RELEASE]
    at com.sun.proxy.$Proxy10.insert(Unknown Source) ~[na:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.7.0_71]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.7.0_71]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.7.0_71]
    at org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler.invoke(LazyInitProxyFactory.java:434) ~[wicket-ioc-6.5.0.jar:6.5.0]
    at com.sun.proxy.$Proxy12.insert(Unknown Source) ~[na:na]
    at cz.bartoska.HomePage.<init>(HomePage.java:26) ~[HomePage.class:na]
    ... 40 common frames omitted

你能帮我一下吗?

编辑:

这是我的 WicketApplication.java

    public class WicketApplication extends WebApplication
    {
    /**
     * @see org.apache.wicket.Application#getHomePage()
     */
    @Override
    public Class<? extends WebPage> getHomePage()
    {
        return HomePage.class;
    }

    /**
     * @see org.apache.wicket.Application#init()
     */
    @Override
    public void init()
    {
        super.init();
        //getComponentInstantiationListeners().add(new SpringComponentInjector(this));
        this.getComponentInstantiationListeners().add( new SpringComponentInjector( this) );
    }
}

最佳答案

@Resource RezervaceDao rezervaceDao;

应该是

@SpringBean RezervaceDao rezervaceDao;

关于java - 当我尝试从 sessionFactory 打开 hibernate 获取 session 时,出现 org.apache.wicket.WicketRuntimeException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27524120/

相关文章:

java - 如何在 spring boot 应用程序中使用 spring-rabbit 处理 JSON 消息?

java - 如何使用 Spring + Hibernate 开发一款可以同时在多个数据库上运行的应用程序?

java - Hibernate 中的月份不是有效月份

javascript - 使用 Angular 的 $http 通过 GET 请求将对象数组发送到 Java Spring

java - 在 java 中为 Android 应用程序解析 html

java - NumberFormat 不适用于 ModelAndView 和 HandlerInterceptorAdapter

java - 基于时间和大小的记录器备份策略

java - Spring -> org.hibernate.HibernateException : Illegal attempt to associate a collection with two open sessions

java - 对于 boolean 值,(p ^ q) 和 (p != q) 之间是否存在有用的区别?

java - 使用属性更改监听器来更新 swing 组件