jackrabbit-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Mark Slater <li...@humanesoftware.com>
Subject Re: Model-2 Deployment example and test app
Date Mon, 13 Feb 2006 09:21:17 GMT
A small update: The servlet code and Resource configuration block  
works fine if its an embedded resource (Model 1; a non-null  
BindableRepository object is returned. Maybe Tomcat just has issues  
with working on weekends?

Mark

On Feb 12, 2006, at 5:50 PM, Mark Slater wrote:

> Hello,
>
> I'm new to Jackrabbit, so the first thing I'm trying to do is put  
> together a Model-2 (shared J2EE resource) deployment on Tomcat 5.5  
> and an example webapp (servlet) that confirms the deployment has  
> been correctly configured. I figured this would be a good way for  
> me to get acquainted with using Jackrabbit, and possibly provide an  
> example that could be distributed by the project. Unfortunately, I  
> haven't gotten very far.
>
> Following the instructions on the website for the Resource  
> configuration, I've added the following lines to my $TOMCAT_HOME/ 
> conf/server.xml:
>
> ======= Begin Tomcat server.xml =======
>   <GlobalNamingResources>
>     ...
>
>     <Resource name="jcr/globalRepository"
>         auth="Container"
>         type="javax.jcr.Repository"
>          
> factory="org.apache.jackrabbit.core.jndi.BindableRepositoryFactory"
>         configFilePath="conf/repository.xml"
>         repHomeDir="shared/jackrabbit" />
>     ...
>
>   </GlobalNamingResources>
> ======= End Tomcat server.xml =======
>
>
>
> And I've added this configuration to the <test-app>/WEB-INF/web.xml:
>
> ======= Begin web app web.xml =======
>     <resource-env-ref>
>         <description>Jackrabbit Repository</description>
>         <resource-env-ref-name>jcr/globalRepository</resource-env- 
> ref-name>
>         <resource-env-ref-type>javax.jcr.Repository</resource-env- 
> ref-type>
>     </resource-env-ref>
> ======= End web app web.xml =======
>
>
>
> Next, I tried creating a <test-app>/WEB-INF/context.xml file that  
> looks like this:
>
> ======= Begin web app context.xml =======
> <Context>
> 	
>     <ResourceLink
>         glabal="jcr/globalRepository" name="jcr/globalRepository"  
> type="javax.jcr.Repository" />
>
>     <Manager pathname="" />
>
> </Context>
> ======= End web app context.xml =======
>
>
>
> However, when I run my servlet, I get:
>
> javax.naming.NamingException: Cannot create resource instance
> 	at org.apache.naming.factory.ResourceEnvFactory.getObjectInstance 
> (ResourceEnvFactory.java:99)
> 	at javax.naming.spi.NamingManager.getObjectInstance 
> (NamingManager.java:304)
> 	at org.apache.naming.NamingContext.lookup(NamingContext.java:792)
> 	at org.apache.naming.NamingContext.lookup(NamingContext.java:139)
> 	at org.apache.naming.NamingContext.lookup(NamingContext.java:780)
> 	at org.apache.naming.NamingContext.lookup(NamingContext.java:152)
> 	at edu.ucsc.whisper.jackrabbit_test.JackrabbitTest.doGet 
> (JackrabbitTest.java:100)
> 	....
>
> So, I tried using the $TOMCAT_HOME/conf/context.xml, and made it  
> look like this:
>
> ======= Begin Tomcat context.xml =======
> <!-- The contents of this file will be loaded for each web  
> application -->
> <Context>
>
>     <!-- Default set of monitored resources -->
>     <WatchedResource>WEB-INF/web.xml</WatchedResource>
> 	
>     <ResourceLink
>         glabal="jcr/globalRepository" name="jcr/globalRepository"  
> type="javax.jcr.Repository" />
>
>     <!-- Uncomment this to disable session persistence across  
> Tomcat restarts -->
>     <!--
>     <Manager pathname="" />
>     -->
>
> </Context>
> ======= End Tomcat context.xml =======
>
>
>
> That works better, in that I don't get an exception. Instead the  
> lookup() request returns null.
>
> The servlet code currently looks like this:
>
> ======= Begin source code =======
>     public void doGet( HttpServletRequest request,  
> HttpServletResponse response )
>         throws IOException, ServletException
>     {
>         boolean skipping = false;
>
>         response.setContentType("text/html");
>         PrintWriter out = response.getWriter();
>         out.println("<html>");
>         out.println("<head>");
>         out.println("<title>Jackrabbit Configuration Testing</ 
> title>");
>         out.println("</head>");
>         out.println("<body>");
>
>         if( !skipping )
>         {
>             out.println("<h3>Getting the Jackrabbit reference via  
> JNDI</h3>");
>
>             try
>             {
>             // Get the initial context
>                 Context initialContext = new InitialContext();
>
>                 out.println( "<p>Got initial context</p>" );
>
>                 NamingEnumeration<NameClassPair> contextEntries =  
> null;
>
>                 contextEntries = initialContext.list( "java:comp/ 
> env" );
>
>                 // snip - printing entries
>
>                 contextEntries = initialContext.list( "java:comp/ 
> env/jcr" );
>
>                 // snip - printing entries
>
>
>             // Get the environment context
>                 Context environmentContext = (Context)  
> initialContext.lookup( "java:comp/env" );
>
>                 out.println( "<p>Got environment context</p>" );
>
>                 contextEntries = environmentContext.list( "/" );
>
>                 // snip - printing entries
>
>                 contextEntries = environmentContext.list( "/jcr" );
>
>                 // snip - printing entries
>
>
>             // get values out of the context.
>                 jackrabbitRepository =
>                     (Repository) environmentContext.lookup( "jcr/ 
> globalRepository" );
>
>                 out.println( "<p>jackrabbitRepository = " +  
> jackrabbitRepository + "</p>" );
>             }
>             catch( Exception e )
>             {
>                 out.println("<p>Exception thrown: <pre>" );
>                 e.printStackTrace( out );
>                 out.println("</pre></p>");
>             }
>         }
>
>
>         out.println("</body>");
>         out.println("</html>");
>     }
> ======= End source code =======
>
>
>
> And the web page generated looks like this:
>
> ======= Begin HTML output =======
> Getting the Jackrabbit reference via JNDI
>
> Got initial context
>
> Entries in java:comp/env:
>
> jcr: org.apache.naming.NamingContext
> Entries in java:comp/env/jcr:
>
> globalRepository: org.apache.naming.ResourceLinkRef
> Got environment context
>
> Entries in /:
>
> jcr: org.apache.naming.NamingContext
> Entries in /jcr:
>
> globalRepository: org.apache.naming.ResourceLinkRef
> jackrabbitRepository = null
>
> ======= End HTML output =======
>
>
>
> So I can see the reference to Jackrabbit is there, but I'm not able  
> to get it. Perhaps the BindableRepositoryFactory is returning a  
> null repository? For all I know, this is a JNDI issue with Tomcat.  
> Even the author of http://tomcat.apache.org/tomcat-5.5-doc/jndi- 
> datasource-examples-howto.html seems to have had trouble  
> configuring a PostgreSQL data source to be global. But if anybody  
> could suggest a way of debugging this, or flat out knows what the  
> problem is, I'd love some help. Of course, if such an example  
> already exists someplace, that'd be great to know too. I found the  
> First Steps example, but that uses an embedded version... I'm  
> intending to code essentially the same example, but as a servlet  
> that includes output showing the success or failure of the various  
> steps (which will hopefully give users an indication of where their  
> configuration has failed).
>
> Thanks,
>
> Mark
>


Mime
View raw message