Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[Spring - Hibernate] getHibernateTemplate(); returns null

Pagina: 1
Acties:

  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 19-11 17:11
Ik ben bezig een nieuw project met Spring en Hibernate op poten te zetten. Om naar de databank te gaan gebruik ik volgende settings:

XML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/classes/hibernate.properties" />
</bean>      

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="url" value="${hibernate.connection.url}" />
    <property name="driverClassName" value="${hibernate.connection.driver_class}" />
    <property name="username" value="${hibernate.connection.username}" />
    <property name="password" value="${hibernate.connection.password}" />
</bean>      
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mappingResources">
        <list>
            <value>webapp/domain/sometable.hbm.xml</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${hibernate.dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

<bean id="someDAO" class="webapp.dao.SomeDAO">
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean>


Ik heb een DOA aagemaakt:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

public class SomeDAO extends HibernateDaoSupport {
    public void testing(){
        
        HibernateTemplate t = getHibernateTemplate();
        if(t == null){
            debug.info("HibernateTemplate == null");
        }
    }
}


getHibernateTemplate(); geeft altijd null en ik weet niet waarom? Ik ben al uren aan het zoeken wat het probleem kan zijn maar ik kan het maar niet vinden. Alles lijkt er op dat er iets mis is aan mijn configuratie, maar ik zie niet wat?

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:45

Salandur

Software Engineer

waar en hoe haal je je dao weer op? nu blijft het een beetje gokken

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 19-11 17:11
Ik roep de dao op in een controller:

code:
1
2
SomeDAO test = new SomeDAO();
test.testing();

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 19:37

Nick_S

++?????++ Out of Cheese Error

Dan zit daar het probleem. Je maakt zelf een nieuwe DAO aan en laat spring helemaal buitenwege. Je zal met Dependency Injection een DAO in je controller moeten stoppen.

code:
1
2
3
<bean id="someController" class="webapp.controller.SomeController">
    <property name="someDAO" ref="someDAO" /> 
</bean>


En dan in je controller klasse:

Java:
1
2
3
4
5
private SomeDAO someDAO;

public void setSomeDAO(SomeDAO someDAO) {
   this.someDAO = someDAO;
}

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 19-11 17:11
Super, bedankt voor deze verhelderende uitleg!

Ik heb je aanpassingen gedaan. In de someController wordt een SomeDAO object geïnjecteerd (dat niet null is). Ik kan zonder probleem dit DAO object benaderen en methodes uitvoeren.

Maar wanneer ik dit object (bij het aanroepen van de controller) in een andere methode wil gebruiken is het object null? Het is alsof na de setSomeDAO methode het object niet meer bruikbaar is?

[ Voor 3% gewijzigd door Johan.B op 02-04-2008 16:10 ]


  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:45

Salandur

Software Engineer

als je spring gebruikt voor je Depenceny Injection (DI), dan moet je altijd zorgen dat de instancies die je gebruikt uit spring komen en niet door het object wordt gecreëerd. anders krijg je inderdaad null terug.

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 19-11 17:11
Dit doe ik toch ook? Spring DI geeft mij een SomeDOA instance door de methode
Java:
1
2
3
public void setSomeDAO(SomeDAO someDAO) { 
   this.someDAO = someDAO; 
}


Deze instance hou ik bij:
Java:
1
private SomeDAO someDAO;
en moet ik dus kunnen gebruiken? Of sla ik de bal nu helemaal mis?

  • Salandur
  • Registratie: Mei 2003
  • Laatst online: 11:45

Salandur

Software Engineer

hoe kom je aan de someController? Want als je daar weer new SomeController() voor gebruikt heb je natuurlijk weer een nieuwe instantie en daarbij is someDao weer null

Assumptions are the mother of all fuck ups | iRacing Profiel


  • Johan.B
  • Registratie: Maart 2007
  • Laatst online: 19-11 17:11
Ik maak gebruik van het Spring Framework. Controllers worden aangeroepen door het opvragen van een url:

http://www.someurl.nl/webapp/some.html


Ik heb de locale var someDOA Static gemaakt:
Java:
1
private Static SomeDAO someDAO;

Dit werkt wel, maar is mijn geheel nu nog wel thread safe?

[ Voor 35% gewijzigd door Johan.B op 03-04-2008 09:08 ]

Pagina: 1