java - Struts + Hibernate: @SessionTarget not working -


i using struts2-fullhibernatecore-plugin-2.2.2-ga.jar inject session in dao class below:

public class userdao {     @sessiontarget     session session;      @transactiontarget     transaction transaction;      public list<user> getusers() {         return session.createquery("from user").list();     } } 

but got

java.lang.nullpointerexception   com.wudi.dao.userdao.getusers(userdao.java:28)   com.wudi.action.userlistaction.execute(userlistaction.java:24)   sun.reflect.nativemethodaccessorimpl.invoke0(native method)   sun.reflect.nativemethodaccessorimpl.invoke(nativemethodaccessorimpl.java:57)   sun.reflect.delegatingmethodaccessorimpl.invoke(delegatingmethodaccessorimpl.java:43)   java.lang.reflect.method.invoke(method.java:606)   ... 

according debugging output, session , transaction in userdao null.

some files reference:

user.java:

@entity @table(name = "user") public class user implements serializable {      @id     @generatedvalue     private int id;      @column     private string name;      public int getid() {         return id;     }      public void setid(int id) {         this.id = id;     }      public string getname() {         return name;     }      public void setname(string name) {         this.name = name;     }   } 

userlistaction.java:

public class userlistaction extends actionsupport {     private list<user> users;     private userdao userdao = new userdao();      @override     public string execute() throws exception {         users = userdao.getusers();         return success;     }  } 

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.dialect">org.hibernate.dialect.mysqldialect</property>     <property name="hibernate.connection.driver_class">com.mysql.jdbc.driver</property>     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/sample?zerodatetimebehavior=converttonull</property>     <property name="hibernate.connection.username">root</property>     <property name="hibernate.connection.pool_size">10</property>      <mapping class="com.wudi.model.user" />   </session-factory> </hibernate-configuration> 

if want use hibernate session , transaction injection capability, action mapping package need extend package hibernate-default.

more details hibernate-default package

the plugin provides mapping package called hibernate-default. , has 3 interceptor stacks indicated injection capabilities:

  • basicstackhibernate: struts2basickstack (no validations!), hibernate session , transaction injections capability.

  • defaultstackhibernate: struts2 defaultstack, without struts2 validation methods (annotation , xml). uses hibernate validation framework instead.

  • defaultstackhibernatestrutsvalidation: struts2 defaultstack+ plugin's basicstackhibernate.

this package extends hibernate-default package, default struts2 configurations can used if need.

hibernate-default package abstract, can extends other. example:

<package name="default" extends="hibernate-default,json-default" > 

to use hibernate-default annotation configuration use

@parentpackage("hibernate-default") @interceptorref("basicstackhibernate") public class youraction extends actionsupport {} 

Comments