If I am not mistaken, configuring via context.xml will only make the resource
available to that web app context. If you want a global configuration, you
will need to add to Tomcat server.xml under GlobalNamingResources and add
ResourceLink in your context.xml file.
On 1 Aug 2011, at 11:39 AM, Francisco Carriedo Scher wrote:
> Hi there,
>
> i have a JR repository up and running and now i want to obtain the (already
> running) repository instance through JNDI to use it through simple Java
> classes in other projects. By default the repository is available through
> JNDI only locally to the webapp, which is not enough for my case.
>
> Now, i followed the instructions to turn it globally available (even simple
> Java applications running out of the Tomcat 7 server i am using) without
> success. Note that I followed the Tomcat 7 instructions to enable JNDI
> resources aswell.
>
> I paste here the relevant pieces of code for this issue:
> *
> Context.xml (Tomcat 7 server)*
>
> <Resource name="repositoryname" auth="Container"
> type="javax.jcr.Repository"
>
> factory="org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory"
> />
>
> Web.xml (Web application)
>
> <resource-env-ref>
> <description>Object Factory for the Repository</description>
> <resource-env-ref-name>repositoryname</resource-env-ref-name>
> <resource-env-ref-type>javax.jcr.Repository</resource-env-ref-type>
> </resource-env-ref>
>
> *bootstrap.properties*
>
> # Repository configuration settings (will be adjusted by installer)
>
> repository.config=/dev/raizrepositorio/repository.xml
> repository.home=/dev/raizrepositorio/repository
> #repository.name=jackrabbit.repository
> repository.name=repositoryname
>
> # RMI Settings
> rmi.enabled=true
> rmi.port=0
> rmi.host=localhost
> # If the URI is not specified, it's composed as follows:
> #rmi.uri=//${rmi.host}:${rmi.port}/${repository.name}
>
> # JNDI Settings
> # all properties starting with 'java.naming.' will go into the
> # environment of the initial context
> jndi.enabled=true
> # if the name is not specified, it's initialized with the repository.name
> #jndi.name=${repository.name}
> jndi.name=repositoryname
> java.naming.provider.url=jnp://localhost:1099
> java.naming.factory.initial=org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory
>
>
> *Plain Java class trying to obtain the Repository object through JNDI*
>
> Hashtable env = new Hashtable();
> env.put(Context.PROVIDER_URL, "jnp://localhost:1099");
> env.put(Context.INITIAL_CONTEXT_FACTORY,
> "org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory");
>
> Context initCtx = new InitialContext(env);
> Context envCtx = (Context) initCtx.lookup("java:comp/env");
> Repository repo = (Repository) envCtx.lookup("repositoryname");
>
>
> Any clue on how to detect what is going wrong (object not registered in JNDI
> directory, object not correctly requested, initial misconfigured
> context...).
>
> By the way, i assume that the retrieved object will be the initialized
> instance created as the JR webapp is fired up, isn't it?
>
>
> Thanks in advance for your attention!
>
>
> P.S.: for those who paid attention to my previous emails to this list: the
> answer is comming, it is not trivial to write, so it will still take a
> little bit, but will come because i find my case helpfull for other newbies.
> I thank you all once more!
Rakesh Vidyadharan
President & CEO
Sans Pareil Technologies, Inc.
http://www.sptci.com/
| 400 N McClurg Ct, Suite 1411 | Chicago, IL 60611-4339 USA |
| Ph: +1 (312) 212-3933 | Fax: +1 (312) 276-4410 | E-mail: [email protected]