Hi Alex,
your suggestion hit the mark -- Thank you!
Again for everybody else: The problem was that there were two instances
of the repository (one for the springmodules WebDAVServlet and one for
the Spring Bean and I was not able to configure the WebDAVServlet to use
the Spring Bean defined in the applicationContext.xml. Using RMI for
that connection seemed to be overkill since I do not want to share the
repository across different machines. Nor JNDI worked since I was not
able to register the Spring bean via JNDI from within the
applicationContext.xml.
Solution:
With the following lines in the Spring's applicationContext.xml you can
register the repository as a servlet context attribute (which was that
little piece of information I needed ;-)):
-----
<bean
class="org.springframework.web.context.support.ServletContextAttributeExporter">
<property name="attributes">
<map>
<entry key="javax.jcr.Repository" value-ref="repository"/>
</map>
</property>
</bean>
-----
Then you can get rid of (need not to define) the
RepositoryStartupServlet since you already started the servlet in the
Spring's applicationContext.xml. The RepositoryAccessServlet will then
look for the "javax.jcr.Repository" attribute in the servlet context
(and find it). The rest of the configuration remains unchanged.
-----
<servlet>
<servlet-name>Repository</servlet-name>
<servlet-class>
org.apache.jackrabbit.j2ee.RepositoryAccessServlet
</servlet-class>
<init-param>
<param-name>repository.context.attribute.name</param-name>
<param-value>javax.jcr.Repository</param-value>
<description>
If this is set, the RepositoryAccessServlet expects a
Repository in the ServletContext attribute having this name.
This allows servlets of this module to be used with
repositories intialized by the jackrabbit-jcr-servlet module
utilities.
</description>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
-----
Thanks for your help, Alex!
Best,
Martin
Alexander Klimetschek schrieb:
What you probably want is to have the repository (of which there
should be only one instance in your server) handled by Spring and
provide access to it via the webdav servlets. The "repository" bean
gives you a single repository already. Now you should turn of the
RepositoryStartupServlet, which tries to start another repository (all
the servlets in your current config have no knowledge about the Spring
config) with the same settings (repository.xml and home directory). To
access the repository created by Spring, you can put the the
repository instance returned from the RepositoryFactoryBean
"repository" into the servlet context attribute
"javax.jcr.Repository". This way the RepositoryAccessServlet finds
them (you can configure the name of the context attribute in the
servlet config for this servlet).
Regards,
Alex
On Thu, Jul 31, 2008 at 1:36 AM, Martin Pietsch <[EMAIL PROTECTED]> wrote:
Hi,
i am using Appfuse (Spring 2.5) and tried to set up a Jackrabbit
repository which should be available as a bean in the
applicationContext. I used springmodules and the following configuration
in the applicationContext.xml:
<bean id="repository"
class="org.springmodules.jcr.jackrabbit.RepositoryFactoryBean">
<property name="configuration" value="/WEB-INF/repository.xml" />
<property name="homeDir" value="/tmp/repo"/> </bean>
<bean id="jcrSessionFactory"
class="org.springmodules.jcr.jackrabbit.JackrabbitSessionFactory">
<property name="repository" ref="repository" /> </bean>
<bean id="jcrTemplate" class="org.springmodules.jcr.JcrTemplate">
<property name="sessionFactory" ref="jcrSessionFactory" /> <property
name="allowCreate" value="true" /> </bean>
Exactly the same repository should be available via WebDAV to store
files on it. Thus I tried to set up the Jackrabbit WebDavServlet
(web.xml) without success. It just gives me an empty page but no error
messages / exceptions. Thus it seems not to be connected to the
repository. I think my repository.xml is OK so far because I am able to
store data in the repository via the bean.
Has anyone configuration suggestions for that purpose? On the web I've
found examples for Spring integration as well as for WebDAV access, but
not for both of them working together.
I know the description of my error is vague, but I think my concern is
clear.
Find below the relevant part of the web.xml.
Thanks in advance,
Martin
[...]