2013-02-23 7 views
5

hazırda bekleme. Uygulamayı tomcat sunucusunda çalıştırdığımda bazı istisnalar alıyorum. Aşağıda benim kodum.java.lang.IllegalArgumentException: 'SessionFactory' veya 'hibernateTemplate' baharda gerekli + Bahar + burs başvurularını hazırda bekletme yapıyorum

Bu benim fasulye yapılandırma dosyasıdır.

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> 

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <value>WEB-INF/database/db.properties</value> 
    </property> 
</bean> 
    <bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <property name="url" value="${jdbc.url}" /> 
     <property name="username" value="${jdbc.username}" /> 
     <property name="password" value="${jdbc.password}" /> 
    </bean> 

    <bean id="sessionFactory" 
     class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> 

     <property name="dataSource"> 
      <ref bean="dataSource" /> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.show_sql">true</prop> 
      </props> 
     </property> 
     <property name="mappingResources"> 
      <list> 
       <value>Employee.hbm.xml</value> 
      </list> 
     </property> 
    </bean> 
    <bean id="employeeBo" class="com.saggezza.employee.bo.impl.EmployeeBoImpl"> 
     <property name="employeeDao" ref="employeeDao" /> 
    </bean> 

    <bean id="employeeDao" class="com.saggezza.employee.dao.impl.EmployeeDaoImpl"> 
     <constructor-arg ref="sessionFactory"></constructor-arg> 
    </bean> 

Bu benim dao sınıfım.

public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao { 

    private SessionFactory sessionFactory; 
    public EmployeeDaoImpl(SessionFactory sessionfactory){ 
     this.sessionFactory=sessionfactory; 
    } 

    @Override 
    public List<Employee> getEmployeeDetails() { 
     return getHibernateTemplate().find("from Employee"); 

    } 
} 

Burada başka sınıf employeeBo employeeDaoImpl çağırıyor. Bunu çalıştırdığımda aşağıdaki istisnayı alıyorum.

Bunu çözmek için herhangi bir kişi yardımcı olabilir. Ben çok denedim ve google de. Ama çözüm aldın. İki yapılandırma dosyaları varsa

cevap

3

, sen 'SessionFactory' tanımını çoğaltır. 'SessionFactory' tanımlarından birini kaldırın. IllegalArgumentException öncesindeki yinelenen fasulye tanımı istisnası olur.

Düzenleme: Yorumlarınız sonra

public class EmployeeDaoImpl extends HibernateDaoSupport implements EmployeeDao { 


public EmployeeDaoImpl(SessionFactory sessionfactory){ 
    setSessionFactory(sessionfactory); 
} 

@Override 
public List<Employee> getEmployeeDetails() { 
    return getHibernateTemplate().find("from Employee"); 

} 
} 

ya da 'SessionFactory' kullanarak ayarlayıcı injection.See org.springframework.orm.hibernate3.support.HibernateDaoSupport.setSessionFactory(SessionFactory) yukarıdaki kodda yapıcı kurtulmak ve enjekte olsun. Daha sonra yaklaşmayı tercih ederim.

+1

Yinelenen birini sildim ama yine de bu özel durumu aldım. Ve soruyu da güncelledi. – cherry

+0

cevabımı – Adi

+0

yorumladıktan sonra güncellememi 'SessoinFactory' sınıfının import deyimini koyabilir misin? –

0

Sorun, EmployeeDaoImpl uygulamasında enjekte ettiğiniz SessionFactory türünün sınıfta kullandığınız SessionFactory türüyle eşleşmediğini düşünüyorum.

Bunu kontrol edebilir misiniz?

+1

'da dağıtmak dao sınıfında org.hibernate.SessionFactoy kullanıyorum – cherry

0

Bu, birisinin bu problem karşısında gelirse yani şimdi ama hala çözülmesi gereken eski bir sorudur. Çözümdür.

Sen HibernateDAOSupport sınıfını uzanan ve afterPropertiesSet() yöntemini geçersiz kılarak hazırda DAO Desteğini kullanabilirsiniz.

Bu yöntem SessionFactory bu hatayı atıyor null beri HibernateDAO destek ve o zaman denir. Özel sınıfında açıkça bu özelliği ayarlayın ve sonra

package com.techcielo.spring4.hibernate.template; 

import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.orm.hibernate3.HibernateTemplate; 
import org.springframework.stereotype.Component; 

@Component("hibernateTemplate") 
public class Hibernate4CustomTemplate extends HibernateTemplate{ 

    @Autowired(required=true) 
    private SessionFactory sessionFactory; 
    public void setSessionFactory(SessionFactory sessionFactory) { 
     System.out.println("Setting SessionFactory"); 
     this.sessionFactory = sessionFactory; 
     super.setSessionFactory(sessionFactory); 
    } 

    @Override 
    public void afterPropertiesSet() { 
    System.out.println("Checking if properties set..."+this.sessionFactory); 
    setSessionFactory(sessionFactory); 
    super.afterPropertiesSet(); 
    } 
} 

sample kullanılabilir takiben (yani HibernateDAOSupport en addProperties() metodu) Ana Sınıfı aynı yöntemini çağırabilirsiniz!

İlgili konular