jackrabbit-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Salvatore Incandela <s.incand...@gmail.com>
Subject Re: spring-modules-jcr - Implementing Spring-based DAOs without callbacks
Date Wed, 09 Sep 2009 10:44:47 GMT
Hi all, if you are interested to spring-modules-jcr, you'll be surely
interested to know thaht the module jcr was migrated to Spring extensions:
http://se-jcr.sourceforge.net/

2009/7/9 Gadbury <gadbury@googlemail.com>

>
> Thank you for your advice, Sergey.
>
>
> Sergey Podatelev wrote:
> >
> > 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
> >
> >
>
> --
> View this message in context:
> http://www.nabble.com/spring-modules-jcr---Implementing-Spring-based-DAOs-without-callbacks-tp24289110p24414004.html
> Sent from the Jackrabbit - Users mailing list archive at Nabble.com.
>
>


-- 
--
Salvatore Incandela
Software Architect @ Pro-netics
Committer/Developer @ SpringSource
---------------------------------------
(Pro-netics) s.p.a.
http://www.pronetics.it
salvatore.incandela@pronetics.it
salvatore.incandela@sourcesense.com
skype s.incandela
yahoo s.incandela
mobile: 349 6196615
Sede operativa: Via Mario Bianchini, 51 00142 Roma
Sede legale: Via Elio Lampridio Cerva, 127 c 00143 Roma
Tel. 06/51957945
Fax 06/5038035

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message