tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dag Bjerkeli <...@inputdata.no>
Subject Re: DataSource variables in replicated objects in a Tomcat cluster
Date Tue, 29 Aug 2006 11:17:20 GMT
Tanks for your reply.

You are quite right, there must be better ways to do this than the 
approach that I've
been following.  But the application evolved from running on a single 
computer to a cluster, and
things was not so straight forward as I thought getting a application in 
a cluster....
So I'm restructuring the code so my data access objects does not get 
replicated. 
But the problem with accessing JNDI resources defined in context.xml 
still remains,
I'll just find a way around :-)

Regards

Dag

Filip Hanik - Dev Lists said the following on 28-08-2006 17:18:
> approach the problem from a different angle:
> why do you need to store the data source in a replicated object? there 
> are so many other places you can store them :)
>
> Filip
>
>
> Dag Bjerkeli wrote:
>> I have defined my datasource parameters in context.xml.  I've 
>> initialized the datasource objects
>> in the constructor where I need them.  I'm using Tomcat 5.5.17.
>>
>> As I have experienced the constructor does not get activated when a 
>> object is replicated, so
>> my idea is to implement readObject() for initializing of the 
>> datasource in the replicated
>> object.  But I don't get access to what is defined in context.xml, 
>> only to what is defined
>> in server.xml.  It looks like this is not what I should expect.  So I 
>> wonder if there is a
>> different approach to initialize datasource in a replicated object.
>>
>> One solution would be to put the contents of context.xml into 
>> server.xml, but I
>> don't quite like the sound of that.
>>
>> I hope some can enlighten me on this.
>>
>> Regards
>>
>> Dag Bjerkeli
>>
>> Here is some output to illustrate the problem:
>> Output in tomcat1 when a object is constructed:
>> DB:: DataLogDAO constructor
>> DB:: Got context java:
>> DB:: got name comp
>>
>>
>> Output in tomcat2 when object is replicated:
>> DB:: DataLogDAO readObject
>> DB:: Got context java:
>> DB:: got name UserDatabase
>> DB:: got name jdbc
>> DB:: got name simpleValue
>> DB:: Err with context Name comp is not bound in this Context
>> javax.naming.NameNotFoundException: Name comp is not bound in this 
>> Context
>>
>>
>> The relevant code in class DataLogDAO:
>>    private transient DataSource dsR = null;
>>    private transient DataSource dsW = null;
>>
>>    public DataLogDAO()  throws Exception {
>>        System.out.println("DB:: DataLogDAO constructor ");
>>        this.generateConnections();
>>    }
>>      private void readObject(java.io.ObjectInputStream in) throws 
>> IOException, ClassNotFoundException {
>>        System.out.println("DB:: DataLogDAO readObject");
>>        in.defaultReadObject();
>>        try {
>>            this.generateConnections();
>>        } catch(Exception e) {
>>            System.out.println("DB:: Err with context " + 
>> e.getMessage());
>>            e.printStackTrace();
>>        }
>>    }
>>
>>    private void generateConnections() throws Exception {
>>        if( dsR == null) {
>>            Context ctx = new InitialContext();
>>            if(ctx == null )
>>                throw new Exception("Boom - No Context");
>>
>>            String ctxname = ctx.getNameInNamespace();
>>            System.out.println("DB:: Got context " + ctxname);
>>            NamingEnumeration en = ctx.listBindings(ctxname);
>>            while ( en.hasMore()) {
>>                Binding b = (Binding) en.next();
>>                System.out.println("DB:: got name " + b.getName());
>>            }
>>            dsR = (DataSource) ctx.lookup(IConstants.DATASOURCE_READER);
>>            dsW = (DataSource) ctx.lookup(IConstants.DATASOURCE_WRITER);
>>        }
>>    }



Mime
View raw message