Hi all,

I am trying to implement the following example (Implementing Spring-based
DAOs without callbacks), as here: 
https://springmodules.dev.java.net/docs/reference/0.3/html_single/#d0e1669
https://springmodules.dev.java.net/docs/reference/0.3/html_single/#d0e1669 

Within my DAO (which extends JackrabbitDAOSupport, which itself extends
JcrDaoSupport), getSession(true) is throwing the following exception:
java.lang.IllegalArgumentException: No sessionFactory specified.

Here is my code:


ProviderDAOImpl:

public class ProviderDAOImpl extends JackrabbitDAOSupport
{

        private static org.apache.log4j.Logger _lLogger =
org.apache.log4j.Logger.getLogger(ProviderDAOImpl.class);


        public ProviderDAOImpl()
        {
                super();
        }

        public ArrayList<ProviderBean> listProviders()
        {
                Session jcrSession = getSession(true);
                ArrayList<ProviderBean> providers = new 
ArrayList<ProviderBean>();

                try
                {
                        Workspace ws = jcrSession.getWorkspace();
                        QueryManager qm = ws.getQueryManager();

                        // Specify a query using the XPATH query language
                        Query q = 
qm.createQuery("//provid...@isdeleted!='true']", Query.XPATH);
                        QueryResult res = q.execute();

                        // Obtain a node iterator
                        NodeIterator provs = res.getNodes();
                        _lLogger.debug(provs.getSize());

                        while (provs.hasNext())
                        {
                                Node providerNode = provs.nextNode();
                                providers.add(new 
ProviderBean(providerNode.getUUID(),
providerNode.getProperty("name").getString(),
providerNode.getProperty("GUID")
                                                .getString(), 
providerNode.getProperty("isDeleted").getBoolean()));
                        }

                } catch (Exception e)
                {
                        _lLogger.fatal(e.getCause(), e);
                } finally
                {
                }

                return providers;
        }
}

-------------------------------------

JackrabbitDAOSupport:

public class JackrabbitDAOSupport extends JcrDaoSupport
{
        JcrSessionFactory sessionFactory;
        JcrTemplate template;
        
        public JackrabbitDAOSupport()
        {
                
        }
}

-------------------------------------

applicationContext-jcr.xml:


<?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: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/context
                          
http://www.springframework.org/schema/context/spring-context.xsd";>

        <!-- Register Annotation-based Post Processing Beans -->
        <context:annotation-config />

        <!-- Creates a session factory based on the respository -->
        <bean id="sessionFactory" 
class="org.springmodules.jcr.JcrSessionFactory">
                <property name="repository" ref="repository" />
                <property name="credentials">
                        <bean class="javax.jcr.SimpleCredentials">
                                <constructor-arg index="0" value="userid" />
                                <!-- create the credentials using a bean 
factory -->
                                <constructor-arg index="1">
                                        <bean factory-bean="password" 
factory-method="toCharArray" />
                                </constructor-arg>
                        </bean>
                </property>
        </bean>

        <!-- create the password to return it as a char[] -->
        <bean id="password" class="java.lang.String">
                <constructor-arg index="0" value="" />
        </bean>

        <!-- Creates a JcrTemplate using the session factory -->
        <bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
                <property name="sessionFactory" ref="sessionFactory" />
                <property name="allowCreate" value="true" />
        </bean>

        <!-- DAO configurations -->
        <bean id="jackrabbitDAOSupport"
                class="net.gb.mds.atl.ecommerce.dao.JackrabbitDAOSupport">
                <property name="sessionFactory" ref="sessionFactory" />
                <property name="template" ref="jcrTemplate" />
        </bean>

        <!--
                normal repository The first bean definition defines defines the
                Jackrabbit repository by specifying the configuration file to 
use and
                the location of the repository. If the repository doesn't 
already
                exist, it will be created on startup.
        -->
        <bean id="repository"
class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
                <!-- normal factory beans params -->
                <property name="configuration" value="classpath:repository.xml" 
/>
                <!-- use the target folder which will be cleaned  -->
                <property name="homeDir" value="file:C:/repository1" />

        </bean>

</beans>

-------------------------------------

I understand that I may need to inject the jcrTemplate into my DAO (as
getSession() eventually calls template.getSessionFactory(), and in the
debugger template == null).

Please could someone help me out?  I've tried with and without using the
JackrabbitDAOSupport class (i.e. in the spring config file).  I've read over
and over the tutorial example but it seems that some information is missing
(or more likely I am doing something daft).  Running through the debugger I
can see that the initial call to JcrDaoSupport's setSessionFactory() is
correctly instantiating the member template.

Thanks in advance for any help.
-- 
View this message in context: 
http://www.nabble.com/spring-modules-jcr---Implementing-Spring-based-DAOs-without-callbacks-tp24289110p24289110.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Reply via email to