Spring DAO не вводится в управляемый компонент JSF
Я использую JSF2 + Spring3.1 + Hibernate4 в своем демонстрационном приложении, и я хочу использовать аннотацию для создания фабрики сессий, но мой класс DAO не инициализируется в классе Jsf Managed Bea, поэтому я получаю исключение нулевого указателя. мойapplicationContext.xml
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com.otv"></context:component-scan>
<!-- Data Source Declaration -->
<bean id="DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" >
<property name="driverClass" value="org.postgresql.Driver" />
<property name="jdbcUrl" value="jdbc:postgresql://localhost:5432/postgres" />
<property name="user" value="postgres" />
<property name="password" value="hariom" />
<property name="maxPoolSize" value="10" />
<property name="maxStatements" value="0" />
<property name="minPoolSize" value="5" />
</bean>
<!-- Session Factory Declaration -->
<bean id="SessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean ">
<property name="dataSource" ref="DataSource" />
<property name="annotatedClasses">
<list>
<value>com.otv.model.User</value>
</list>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</prop>
<prop key="hibernate.show_sql">true</prop>
</props>
</property>
<property name="packagesToScan" value="com.otv.user"></property>
</bean>
<!-- Transaction Manager is defined -->
<bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager" >
<property name="sessionFactory" ref="SessionFactory"/>
</bean>
<!-- Enable the configuration of transactional behavior based on annotations -->
<tx:annotation-driven transaction-manager="txManager"/>
</beans>
Класс UserDAO.java
package com.otv.user.dao;
import java.util.List;
import com.otv.model.User;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
/**
*
* User DAO
*
* @author onlinetechvision.com
* @since 25 Mar 2012
* @version 1.0.0
*
*/
@Repository
@Transactional
public class UserDAO {
@Autowired
private SessionFactory sessionFactory;
/**
* Get Hibernate Session Factory
*
* @return SessionFactory - Hibernate Session Factory
*/
/* public SessionFactory getSessionFactory() {
return sessionFactory;
}
*//**
* Set Hibernate Session Factory
*
* @param SessionFactory - Hibernate Session Factory
*//*
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}*/
/**
* Add User
*
* @param User user
*/
public void addUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
/**
* Delete User
*
* @param User user
*/
public void deleteUser(User user) {
sessionFactory.getCurrentSession().delete(user);
}
/**
* Update User
*
* @param User user
*/
public void updateUser(User user) {
sessionFactory.getCurrentSession().update(user);
}
/**
* Get User
*
* @param int User Id
* @return User
*/
public User getUserById(int id) {
List list = sessionFactory.getCurrentSession()
.createQuery("from User where id=?")
.setParameter(0, id).list();
return (User)list.get(0);
}
/**
* Get User List
*
* @return List - User list
*/
public List<User> getUsers() {
List list = sessionFactory.getCurrentSession().createQuery("from User").list();
return list;
}
}
И мой управляемый класс Бина
package com.otv.managed.bean;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DataAccessException;
import com.otv.model.User;
import com.otv.user.dao.UserDAO;
import com.otv.user.service.IUserService;
/**
*
* User Managed Bean
*
* @author onlinetechvision.com
* @since 25 Mar 2012
* @version 1.0.0
*
*/
@ManagedBean(name="userMB")
@RequestScoped
public class UserManagedBean implements Serializable {
private static final long serialVersionUID = 1L;
private static final String SUCCESS = "success";
private static final String ERROR = "error";
//Spring User Service is injected...
List<User> userList;
private int id;
private String name;
private String surname;
@Autowired
private UserDAO userDAO;
/**
* Add User
*
* @return String - Response Message
*/
public String addUser() {
try {
User user = new User();
user.setId(getId());
user.setName(getName());
user.setSurname(getSurname());
userDAO.addUser(user);
return SUCCESS;
} catch (DataAccessException e) {
e.printStackTrace();
}
return ERROR;
}
/**
* Reset Fields
*
*/
public void reset() {
this.setId(0);
this.setName("");
this.setSurname("");
}
/**
* Get User List
*
* @return List - User List
*/
public List<User> getUserList() {
userList = new ArrayList<User>();
userList.addAll(userDAO.getUsers());
return userList;
}
/**
* Get User Service
*
* @return IUserService - User Service
*/
/**
* Set User List
*
* @param List - User List
*/
public void setUserList(List<User> userList) {
this.userList = userList;
}
/**
* Get User Id
*
* @return int - User Id
*/
public int getId() {
return id;
}
/**
* Set User Id
*
* @param int - User Id
*/
public void setId(int id) {
this.id = id;
}
/**
* Get User Name
*
* @return String - User Name
*/
public String getName() {
return name;
}
/**
* Set User Name
*
* @param String - User Name
*/
public void setName(String name) {
this.name = name;
}
/**
* Get User Surname
*
* @return String - User Surname
*/
public String getSurname() {
return surname;
}
/**
* Set User Surname
*
* @param String - User Surname
*/
public void setSurname(String surname) {
this.surname = surname;
}
}
Теперь в методе Managedbean DAO объект является нулевым, и я получаю исключение Null Pointer
ПРЕДУПРЕЖДЕНИЕ: # {userMB.addUser}: java.lang.NullPointerException javax.faces.FacesException: # {userMB.addUser}: java.lang.NullPointerException в com.sun.faces.application.ActionListenerImpl.processAction (ActionLavaerImpl) ) в javax.faces.component.UICommand.broadcast (UICommand.java:315) в javax.faces.component.UIViewRoot.broadcastEvents (UIViewRoot.java:794) в javax.faces.component.UIViewRoot.processApplication (UIViewRo) 1259) на com.sun.faces.lifecycle.InvokeApplicationPhase.execute (InvokeApplicationPhase.java:81) на com.sun.faces.lifecycle.Phase.doPhase (Phase.java:101) на com.sun.faces.lifecycle.LifecycleImpl .execute (LifecycleImpl.java:118) в javax.faces.webapp.FacesServlet.service (FacesServlet.java:593) в org.apache.catalina.core.ApplicationFilterChain.internalDoFilter (ApplicationFilterChain.javaapache. at5). catalina.core.ApplicationFilterChain.doFilter (ApplicationFilterChain.java:210) в org.apache.catalina.core.StandardWrapperValve.invoke (StandardWrapperValve. Java: 225) в org.apache.catalina.core.StandardContextValve.invoke (StandardContextValve.java:123) в org.apache.catalina.authenticator.AuthenticatorBase.invoke (AuthenticatorBase.java:472) в org.apore. .StandardHostValve.invoke (StandardHostValve.java:168) в org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:98) в org.apache.catalina.valves.AccessLogValve.invoke: доступный лог org.apache.catalina.core.StandardEngineValve.invoke (StandardEngineValve.java:118) в org.apache.catalina.connector.CoyoteAdapter.service (CoyoteAdapter.java:407) в org.apache.coyote.hcessttpB ( AbstractHttp11Processor.java:1001) в org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process (AbstractProtocol.java:585) в org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run (JIoEndpoint.java:3) .util.concurrent.ThreadPoolExecutor $ Worker.runTask (ThreadPoolExecutor.java:886) в java.util.concurrent.ThreadPoolExecutor $ Wor ker.run (ThreadPoolExecutor.java:908) в java.lang.Thread.run (Thread.java:662) Вызывается: javax.faces.el.EvaluationException: java.lang.NullPointerException в javax.faces.component.MethodBindingMethodExpressionAdap. invoke (MethodBindingMethodExpressionAdapter.java:102) в com.sun.faces.application.ActionListenerImpl.processAction (ActionListenerImpl.java:102) ... еще 23 Причины: java.lang.NullPointerException в com.otv.managed.bean.UeMan .addUser (UserManagedBean.java:57) в sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) ) в java.lang.reflect.Method.invoke (Method.java:597) в org.apache.el.parser.AstValue.invoke (AstValue.java:264) в org.apache.el.MethodExpressionImpl.invoke (MethodExpressionImpl. Java: 278) на com.sun.faces.facelets.el.TagMethodExpression.invoke (TagMethodExpression.java:105) на j avax.faces.component.MethodBindingMethodExpressionAdapter.invoke (MethodBindingMethodExpressionAdapter.java:88) ... еще 24