Hi!

I'm happy you could solve your problem now! Seems the reason was the missing Realm-definition in your context.xml.

To Question 1)
Tomcat offers a separate JNDI-namespace for each web application (so if you have 4 web applications you will have 4 namespaces). These namespaces are configured in the <context>-elements of the corresponsing web-applications. To define resources, you have to nest a <Resource>-element in your <context>-element (which should be in context.xml).
A resource that is defined in the namespace of a web application cannot be seen by other web applications (because the namespaces are separated from each other).
Sometimes, a resource may be required by more than one web application. To avoid configuring this resource several times - once per context - tomcat offers another namespace that is global and exists only once per tomcat instance. If you define a resource there, you can use it in each web application, that is allowed to use it.
So how can you allow a web application to use a global resource? Simply "link" the global resource into the local JNDI-namespace of the web-application! This can be done by nesting a <ResourceLink> element in the <context> element of the web-application that should be allowed to use the resource. When defining a <ResourceLink>-element, you must specify, which global resource you want to link into the namespace (attribut "global"), which type the resource is that you want to link (attribut "type"), and which name it should have in the local namespace (attribut "name") - this name can be equal to the global name.


So the server.xml and context.xml hierarchy could look like the following (sorry for the "text-art" - use a fixed width font for "best results"):

+- Server
  |
  +- GlobalNamingResources
  |  +- Resource GlobResA
  |  +- Resource GlobResB
  |
  +- Service
     +- Engine
        +- Realm X
        +- Host www.A.org
        |  +- Context /A1 (defined in context.xml)
        |  |  +- ResourceLink to GlobResA, name: LocResA
        |  |
        |  +- Context /A2 (defined in context.xml)
        |  |  +- ResourceLink to GlobResA, name: LocResA
        |  |  +- ResourceLink to GlobResB, name: LocResB
        |  |
        |  +- Context /A3 (defined in context.xml)
        |     +- Resource, name LocalResA
        |
        +- Host www.B.org
           +- Context /B1
           |  +- ResourceLink to GlobResA, name: LocResA
           |
           +- Context /B2
              +- ResourceLink to GlobResB, name: LocResB

Question 2) If you do not want to change server.xml (e.g. because you want to deploy your application to a foreign server and you cannot modify server.xml there), you could define a local JNDI-Resource in the <context>-element of your web-application instead of the GlobalNamingResource (simply move the resource-definition from <GlobalNamingResource> into your <context>-element). If you do this, of course you do not need the <ResourceLink> any more!
So you do not have to touch server.xml because all configurations can be done inside context.xml which is in the meta-inf directory of your web application.


I hope, my explanations where understandable!

Best regards,
 Tex


Omar Adobati wrote:

changes in server.xml:
===
<GlobalNamingResources>

<Resource type="org.apache.catalina.UserDatabase" description="User
database that can be updated and saved" auth="Container"
name="PhotoAlbum"/>
<ResourceParams name="PhotoAlbum">
<parameter>
<name>factory</name>
<value>org.apache.catalina.users.MemoryUserDatabaseFactory</value>
</parameter>
<parameter>
<name>pathname</name>
<value>conf/Catalina/photoalbum.localhost/photoalbum-users.xml</value>
</parameter>
</ResourceParams>


</GlobalNamingResources>
===

changes in [context].xml
===
<?xml version='1.0' encoding='utf-8'?>
<Context privileged="true" swallowOutput="true"
workDir="work\Catalina\photoalbum\" path="/" cacheTTL="0"
cachingAllowed="false" displayName="bannerEmbedded beta" docBase="."
cacheMaxSize="0" reloadable="true">
 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="PhotoAlbum"/>
 <Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs/photoalbum/" fileDateFormat="yyyy-MM-dd" suffix=".txt"
prefix="photoalbum_access_log."/>
 <ResourceLink name="PhotoAlbum" global="PhotoAlbum"
type="org.apache.catalina.UserDatabase"/>
</Context>
===

Question 1)
Also if I've red the tomcat site docs I cant understand so good what
ResourceLink does. Does anyone can explain me?

Question 2)
Using this approach I have changed the server.xml manually. So, if I
need/want to deploy my own webapp using a war file, which approach I
have to use?

(I'm sorry fot my bad english...)

On Sun, 6 Feb 2005 20:00:04 +0100, Omar Adobati <[EMAIL PROTECTED]> wrote:


But did you "connect" the UserDatabase
with the web-application by specifying a realm in your context?
(context.xml or server.xml)


How can I set the Realm in my Context to specity an xml database?
(maybe this is the main problem because it actually not exist)









---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to