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 <[email protected]> > > 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<[email protected]> 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("//provid...@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 [email protected] [email protected] 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
