Je vois tellement de questions à ce sujet et j'ai essayé de nombreuses permutations des nombreuses solutions différentes et aucune n'a fonctionné.La SessionFactory hibernate est toujours nulle dans mon DAO pour une classe Java régulière
J'ai un dao qui nécessite une session session hibernate pour faire des transactions. Dans le contexte SpringMVC, je l'ai vu fonctionner mais le dao inclus dans une classe java est nul. Il n'y a pas d'erreur dans catalina.out:
mon plein applicationContext.xml (parce que je pense vraiment que le problème est ici quelque part):
<?xml version="1.0" encoding="UTF-8"?>
<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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<!-- Scan classpath for annotations (eg: @Service, @Repository etc)-->
<context:annotation-config/>
<context:component-scan base-package="com.shazam.di.*" />
<!-- JNDI Data Source. this works I can get to it independent of spring-->
<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"
scope="singleton">
<property name="jndiName" value="jdbc/dostudentdb"/>
<property name="resourceRef" value="true"/>
</bean>
<tx:annotation-driven/>
<!-- Hibernate Session Factory -->
<bean id="mySessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="myDataSource"/>
<property name="packagesToScan">
<array>
<value>com.shazam.di.spring.coursemgmt.dao</value>
</array>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.show_sql">false</prop>
<!--<prop key="hibernate.hbm2ddl.auto">update</prop>-->
<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
</props>
</property>
</bean>
<!-- Hibernate Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="mySessionFactory"/>
</bean>
<!--I've alternated between contructor, properties for getters & setters -->
<!--here, and nothing (just letting it get autowired into the private-->
<!--SessionFactory instance, no effing cigar!!-->
<bean id="studentDAO" class="org.shazam.di.spring.coursemgmt.dao.StudentDAO">
<!--<constructor-arg type="SessionFactory" value="mySessionFactory"/>-->
<property name="insertUserProfile" ref="insertUserProfile"/>
</bean>
</beans>
La classe pour laquelle le DAO, mais pas SessionFactory peut être trouvé :
@Component
public class CheckClassAccess
{
@Autowired
private static StudentDAO studentDAO;...
le début de la DAO (essayé autwiring ne getter & setters et un constructeur):
@Repository
@SuppressWarnings({"unchecked", "rawtypes"})
public class StudentDAO {
@Autowired
private SessionFactory sessionFactory;
etc...
Le XML WEB lignes de printemps:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:WEB-INF/applicationContext.xml</param-value>
</context-param>
and then a little later...
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
La seule autre mise en garde à ce sujet est que je tente d'obtenir ce à travailler dans un CMS java opensource appelé OpenCMS. Mais je ne suis pas sûr que ce soit pertinent car les fichiers que je suis en train de câbler sont de la classe de support vanilla java, pas des contrôleurs ou quoi que ce soit (ne cherchant pas encore à faire Spring-MVC avec ça).
En fait, tout ceci fonctionne dans un contexte de servlet Spring MVC sur une application plus petite, mais je n'arrive pas à obtenir ces mêmes objets/annotations à enregistrer dans le contexte applicationContext.
Dans quel paquet se trouve 'StudentDAO'? –
Comment évaluez-vous l'objet CheckClassAccess et où sont ces classes/ces classes sont-elles sous le sous-package de com.shazam.di et essayez également de supprimer. * Dans le paquet scan –
StudentDAO est dans com.shazam.di.spring.coursemgmt.dao –