2017-02-17 27 views
1

Я следую за этот учебник Struts2 интегрировать проект Struts2 он предлагает с Hibernate: https://www.tutorialspoint.com/struts_2/struts_hibernate.htm Я следовал инструкциям шаг за шагом, единственное, что я изменил был библиотеки, так как используя более обновленные библиотеки.Hibernate интеграции с Struts2 - сессии является нулевым

Когда я пытаюсь выполнить свое действие, я получаю исключение NullPointerException в своем классе DAO. По какой-то причине мой объект Session всегда имеет значение null.

Вот мой боб класс:

package com.fabioSarmiento.hibernate; 

import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.Id; 
import javax.persistence.Table; 

@Entity 
@Table(name="student") 
public class Student { 

    @Id 
    @GeneratedValue 
    private int id; 
    @Column(name="last_name") 
    private String lastName; 
    @Column(name="first_name") 
    private String firstName; 
    private int marks; 
    public int getId() { 
    return id; 
    } 
    public void setId(int id) { 
    this.id = id; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 
    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public int getMarks() { 
     return marks; 
    } 
    public void setMarks(int marks) { 
     this.marks = marks; 
    } 
} 

Вот мой DAO:

package com.fabioSarmiento.hibernate; 

import java.util.ArrayList; 
import java.util.List; 

import org.hibernate.Session; 
import org.hibernate.Transaction; 
import com.googlecode.s2hibernate.struts2.plugin.annotations.SessionTarget; 
import com.googlecode.s2hibernate.struts2.plugin.annotations.TransactionTarget; 

public class StudentDAO { 
    @SessionTarget 
    Session session; 
    @TransactionTarget 
    Transaction transaction; 

    @SuppressWarnings({ "unchecked", "deprecation" }) 
    public List<Student> getStudents() { 
     List<Student> students = new ArrayList<Student>(); 
     try { 
      students = session.createQuery("from student").list(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
     return students; 
    } 

    public void addStudent(Student student) { 
     session.save(student); 
    } 
} 

Мой файл спящего режима конфигурации:

<?xml version='1.0' encoding='utf-8'?> 
<!DOCTYPE hibernate-configuration PUBLIC 
"-//Hibernate/Hibernate Configuration DTD//EN" 
"http://hibernate.sourceforge.net/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/mydb</property> 
    <property name="hibernate.connection.username">root</property> 
    <property name="hibernate.connection.password">root</property> 
    <property name="hibernate.connection.pool_size">10</property> 
    <property name="show_sql">true</property> 
    <property name="dialect">org.hibernate.dialect.MySQLDialect</property> 
    <property name="hibernate.hbm2ddl.auto">update</property> 
    <mapping class="com.fabioSarmiento.hibernate.Student" /> 
</session-factory> 
</hibernate-configuration> 

И мой struts.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"> 
<struts> 
    <constant name="struts.devMode" value="true" /> 
    <package name="myhibernate" extends="hibernate-default"> 
     <action name="addStudent" method="execute" 
     class="com.fabioSarmiento.struts2.AddStudentAction"> 
     <result name="success" type="redirect"> 
       listStudents 
     </result> 
     </action> 
     <action name="listStudents" method="listStudents" 
     class="com.fabioSarmiento.struts2.AddStudentAction"> 
     <result name="success">/index.jsp</result> 
     </action> 

</package> 
</struts> 

Мой web.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>Struts 2</display-name> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
    <filter> 
     <filter-name>struts2</filter-name> 
    <filter-class> 
    org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter 
    </filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>struts2</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 

И это трассировки стека я получаю:

java.lang.NullPointerException 
    at com.fabioSarmiento.hibernate.StudentDAO.getStudents(StudentDAO.java:21) 
    at com.fabioSarmiento.struts2.AddStudentAction.listStudents(AddStudentAction.java:29) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:497) 
    at ognl.OgnlRuntime.invokeMethod(OgnlRuntime.java:873) 
    at ognl.OgnlRuntime.callAppropriateMethod(OgnlRuntime.java:1539) 
    at ognl.ObjectMethodAccessor.callMethod(ObjectMethodAccessor.java:68) 
    at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethodWithDebugInfo(XWorkMethodAccessor.java:96) 
    at com.opensymphony.xwork2.ognl.accessor.XWorkMethodAccessor.callMethod(XWorkMethodAccessor.java:88) 
    at ognl.OgnlRuntime.callMethod(OgnlRuntime.java:1615) 
    at ognl.ASTMethod.getValueBody(ASTMethod.java:91) 
    at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212) 
    at ognl.SimpleNode.getValue(SimpleNode.java:258) 
    at ognl.Ognl.getValue(Ognl.java:467) 
    at ognl.Ognl.getValue(Ognl.java:431) 
    at com.opensymphony.xwork2.ognl.OgnlUtil$3.execute(OgnlUtil.java:351) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.compileAndExecuteMethod(OgnlUtil.java:403) 
    at com.opensymphony.xwork2.ognl.OgnlUtil.callMethod(OgnlUtil.java:349) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:436) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:252) 
    at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:177) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.doIntercept(ConversionErrorInterceptor.java:139) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:133) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:192) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:88) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:248) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:99) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:139) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:105) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:253) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:155) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:120) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:174) 
    at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:171) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:195) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:193) 
    at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:247) 
    at org.apache.struts2.factory.StrutsActionProxy.execute(StrutsActionProxy.java:54) 
    at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:564) 
    at org.apache.struts2.dispatcher.ExecuteOperations.executeAction(ExecuteOperations.java:81) 
    at org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:143) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:620) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) 
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:784) 
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:802) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1410) 
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Thread.java:745) 

Это хороший учебник о том, как сделать интеграцию? Я занимаюсь исследованиями, и есть много различий в реализациях, которые я нашел. Но этот учебник был очень полезен, чтобы изучить часть struts, и у меня не было никаких проблем, и теперь я не могу закончить этот урок.

Как я могу решить эту проблему?

Благодарим за помощь и терпение, я новичок в спящем режиме, и я пытаюсь учиться самостоятельно.

+0

что там на com.fabioSarmiento.hibernate.StudentDAO.getStudents (StudentDAO.java:21) – RamPrakash

+0

Привет RamPrakash, спасибо за комментирование линии заключается в следующем: студентов = session.createQuery («от ученика»). список(); –

+0

Да, это null. Но я не знаю, почему. И я не знаю, как проверить, действительно ли мое приложение пытается подключиться к моему db. Я пробовал одно и то же соединение, не используя спящий режим, и он работал нормально –

ответ

0

При использовании createQuery я считаю, что класс объекта Model чувствителен к регистру.

Попробуйте линию 21, чтобы изменить с верхним регистром Студентом:

students = session.createQuery("from Student").list(); 
+0

Привет shokulei, это ничего не изменило:/ –

+0

Вы перезапустили контейнер (Tomcat, JBoss и т. Д.) После смены кода? Или у вас настроено горячее развертывание? – shokulei

+0

У меня настроено горячее развертывание, но я все равно перезапустил ... ту же ошибку. По какой-то причине мой объект сеанса имеет значение null –

0

Хорошо работает сейчас Я использовал библиотеки, которые предоставил @shokulei (ссылка в его ответе). После этого мне пришлось изменить свой web.xml, чтобы использовать org.apache.struts2.dispatcher.FilterDispatcher в качестве класса фильтра. Наконец, мне пришлось отключить параметр в MySQL, чтобы установить SSL-соединение. Спасибо вам за помощь!