L'extrait suivant d'une définition de contexte d'application XML montre comment je mis au point une JDBC DataSource
et une mise en veille prolongée SessionFactory
au-dessus de celui-ci:configuration SessionFactory dans un conteneur Spring
<context:component-scan base-package="com.phoneBook.dao" />
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver" />
<property name="url" value="jdbc:postgresql://localhost:5432/postgres?currentSchema=phoneBook" />
<property name="username" value="postgres" />
<property name="password" value="a1f10g" />
<property name="initialSize" value="20" />
<property name="maxActive" value="100"/>
</bean>
<bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.PostgreSQL94Dialect
</value>
</property>
<property name="annotatedClasses">
<list>
<value>com.phoneBook.model.Address</value>
<value>com.phoneBook.model.Contact</value>
<value>com.phoneBook.model.User</value>
<value>com.phoneBook.model.Lang</value>
</list>
</property>
</bean>
<bean id="myProductDao" class="com.phoneBook.dao.Impl.AddressDaoImpl">
<property name="sessionFactoryBean" ref="mySessionFactory"/>
</bean>
et basé sur ce contexte, je créé mon dao classe, dont une partie est présentée ci-dessous
package com.phoneBook.dao.Impl;
@Repository
public class AddressDaoImpl implements AddressDao{
private Session currentSession;
private Transaction currentTransaction;
private LocalSessionFactoryBean sessionFactoryBean;
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return (SessionFactory) sessionFactoryBean.getObject();
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public LocalSessionFactoryBean getSessionFactoryBean() {
return sessionFactoryBean;
}
public void setSessionFactoryBean(LocalSessionFactoryBean sessionFactoryBean) {
this.sessionFactoryBean = sessionFactoryBean;
}
mais quand je lance mon test j'ai NPE, quelqu'un peut me expliquer ce que je fais mal
@Test
public void addressTest(){
AddressDaoImpl addressDao = new AddressDaoImpl();
try {
addressDao.openSessionWithTransaction();
System.out.print(addressDao.findById(1).toString());
addressDao.openSessionWithTransaction();
} catch (DataBaseException e) {
addressDao.closeSessionWithTransaction();
e.printStackTrace();
}
Veuillez ajouter les packages à votre code. – Jens
Utilisez des annotations ou une configuration XML. Pas tous les deux – Jens
@Jens, j'ai ajouté des paquets – Jungle