Win a copy of Java Mock Exams (software) this week in the Programmer Certification (OCPJP) forum!
  • Post Reply Bookmark Topic Watch Topic
  • New Topic

Any one can explain this?

 
Karl Fu
Ranch Hand
Posts: 41
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
my server look something like this:
class DataServer
static Data data = null;
public static void main (String[] args){
data = new Data("db.db");
DataImpl impl = new DataImpl(data);
..
// bind impl to registry..
...
}
public static Data getDataReference(){
return data;
}
}
I am trying to get a copy of the data reference so I add the getDataReference method.
All the things works well...local...remote...concurrent access..without using that getDataReference()
but as I call the getDataReference method...I got a null.
Can anyone tell me why ? since there is only one copy of data object...and the server is already (and still) running, the data must have contained something right? but why would I get a null ?
Thanks in advance
Karl
 
Rick Fortier
Ranch Hand
Posts: 147
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Try taking static off of the getDataReference() method. I have not tested my theory. But off the top of my head I don't think that static methods have access to the this variable.
Let me know if that was it.
The only other thing I can think of is that data is really null.

[This message has been edited by Rick Fortier (edited June 16, 2001).]
 
Karl Fu
Ranch Hand
Posts: 41
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi rick,
Thanks for your response.
I really needed the method to static because this method will be used by some other class. if it is not static ..then i will have to create a server object...which seems alittle weird.
With regard to your second comment, you mean a static method have no access to a static variable ? I think static method can only operate on static variables or non-static variable within the static block.. and non-static method can access static variable....isn't it ?
I think the data variable cannot be null in this case...because it is being used ( the applicationi is actualy running ). What i have in mind is that the acessing sequence of the 2 static methods on the same staic variable causing this problem.
Since the server is running , so the static main method is still running and didnt return. so getDBReference() method didn't get the changed data variable.... but does it make sense ? I really doubt it myself too
please give me some comment.
Karl
 
Rajesh Pohuja
Greenhorn
Posts: 6
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It could be because DataServer doesn't implement
Remote, thus is serialized/de-serialized when accessed
by the client.
Now, the static fields do not participate in serialization
process, thus you get a null !!
Does it make sense?
 
Karl Fu
Ranch Hand
Posts: 41
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Rajesh,
I was using this method in a local server mode though.
Let me explain a little bit more about what i am doing :
3 modes :
1. Local mode (create a new Data object)
2. Local server mode (local access through a running rmi server, do not create any new Data object, obtaining a Data object reference created by the server....this is done by the getDBReference())
3. Remote mode
So, I am actually accessing the doin thing in mode 2, which is local. I think there will not be any serialization involve in this case.
I am trying this out hoping that this will keep only one copy of Data object, even if a server is running on the same data object, I will be able to have concurrency control to access the same data object through both local and remote mode.
 
What are you doing? You are supposed to be reading this tiny ad!
the new thread boost feature brings a LOT of attention to your favorite threads
https://coderanch.com/t/674455/Thread-Boost-feature
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!