jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gadbury <gadb...@googlemail.com>
Subject spring-modules-jcr - Implementing Spring-based DAOs without callbacks
Date Wed, 01 Jul 2009 12:43:43 GMT

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("//provider[@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.


Mime
View raw message