jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Podatelev <brightnesslev...@gmail.com>
Subject Re: spring-modules-jcr - Implementing Spring-based DAOs without callbacks
Date Thu, 09 Jul 2009 04:31:46 GMT
Okay, see, I'm far from being a Spring expert either.

But as far as I understand your code, the following happens:

Spring instantiates an instance of ProviderDAOImpl (a ProviderDAOImpl
bean) and provides it with jcrTemplate.
Now if you want an working instance of ProviderDAOImpl, you have to
access the bean configured in application context.
What you're doing instead is creating a new instance of
ProviderDAOImpl which is obviously never initialized.

I' don't know whether you're using any additional frameworks which
have specific hooks for accessing Spring beans (like Wicket, for
instance), but here're a couple of links that describe what I believe
is a universal way to fetch your beans from the application context:

http://sujitpal.blogspot.com/2007/03/accessing-spring-beans-from-legacy-code.html
http://blog.jdevelop.eu/2008/07/06/access-the-spring-applicationcontext-from-everywhere-in-your-application/



On Wed, Jul 8, 2009 at 11:41 PM, Gadbury<gadbury@googlemail.com> wrote:
>
>
>
> Sergey Podatelev wrote:
>>
>> How do you instantiate your ProviderDAOImpl?
>> You have Spring instantiating an instance of JackrabbitDaoImpl (thus
>> properly initializing SessionFactory), but does it ever instantiates
>> an instance of ProviderDAOImpl?
>>
>
> Hi Sergey.  Thanks for your reply.  I understand what you are saying.  I
> have tried the following:
>
> ----------------------------------------
>
> ProviderDAOImpl:
>
> public class ProviderDAOImpl extends JcrDaoSupport
> {
>        private static Logger logger = 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();
>                        logger.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)
>                {
>                        logger.error(e.getCause(), e);
>                }
>                finally
>                {
>
>                }
>
>                return providers;
>        }
> }
>
> ----------------------------------------
>
> 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>
>
>        <!-- Create 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="jcrDaoProviderImpl"
> class="net.gb.mds.atl.ecommerce.dao.ProviderDAOImpl">
>                        <property name="sessionFactory" ref="sessionFactory"
/>
>                        <property name="template" ref="jcrTemplate" />
>        </bean>
>
>                <!-- Repository definition -->
>        <bean id="repository"
> class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
>                        <property name="configuration" value="classpath:repository.xml"
/>
>                        <property name="homeDir" value="file:C:/repository1"
/>
>        </bean>
>
> </beans>
>
> ----------------------------------------
>
> With the above code, I have removed the previous superclass and now the
> ProviderDAOImpl extends directly from the spring-modules-jcr class
> JcrDaoSupport.
>
> I am also instantiating a ProviderDAOImpl Spring bean (id =
> jcrDaoProviderImpl), which should inject the template (I'm guessing that I
> do not need the second property to inject the sessionFactory into the
> ProviderDAOImpl bean as sessionFactory is a member of JcrTemplate and is
> already injected in to the jcrTemplate bean...) ?
>
> I still have the same problem.  The code falls over at ProviderDAOImpl call
> of getSession(true), reporting that "No sessionFactory specified"
> (specifically at the Assert statement in the method doGetSession() of the
> class org.springmodules.jcr.SessionFactoryUtils).  When I debug, the first
> time the jcrTemplate is injected.  Thereafter, it fails (template == null).
> I instantiate my ProviderDAOImpl from the rest of my application's classes
> as follows:
>
> ProviderDAOImpl provDAO = new ProviderDAOImpl();
>
> As I am new to Spring (and really just wanted to use the spring-modules-jcr
> lib for simple repository configuration / creation and (Jcr) Session
> management), I'm sure I must have missed out something important.
>
> Can the Spring ProviderDAOImpl bean (defined above) use any name as the bean
> id?
>
> Should I instantiate ProviderDAOImpl in some other way?
>
> Many thanks for your help.
> --
> View this message in context: http://www.nabble.com/spring-modules-jcr---Implementing-Spring-based-DAOs-without-callbacks-tp24289110p24397985.html
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>
>



-- 
sp

Mime
View raw message