Yes, I think InetAddress just might do the trick.  Thank you Kris!

-- 
Frank W. Zammetti
Founder and Chief Software Architect
Omnytex Technologies
http://www.omnytex.com

On Fri, March 18, 2005 11:24 am, Kris Schneider said:
> Will InetAddress.getLocalHost() work for you?
> NetworkInterface.getNetworkInterfaces() might also be of interest. Or, you
> might want to create yourself an instance of java.rmi.dgc.VMID...
>
> Quoting "Frank W. Zammetti" <[EMAIL PROTECTED]>:
>
>> Oh boy, I got a good one!  It's only related to Struts in that the
>> application in question is Struts-based, so I hope no one minds a
>> semi-OT
>> question...
>>
>> Here's the situation... An app I wrote has a daemon thread that is
>> spawned
>> at startup (from a Struts plugin) that does periodic background
>> processing
>> tasks.  This works great, never had a bit of trouble.
>>
>> Now though, the app is moving from a single server to a clusted
>> environment.
>>
>> So, what's going to happen is that each server in the cluster will have
>> its own instance of the thread running on it.  Not a huge problem except
>> that I have to be sure only one instance of the thread (i.e., one server
>> in the cluster) is executing concurrently.
>>
>> The easy solution is just a database table that is checked when the
>> thread
>> wakes up.  If there is no entry in it, then there is no other instance
>> running, so it can write an entry to the table and go off and do its
>> thing.
>>
>> I want to be extremely certain that no issues arise in terms of one
>> instance of the thread reading from the database while another instance
>> is
>> writing, etc.  So, aside from transactional database calls and row-level
>> locking, I want to do one more thing: I want the thread to sleep a
>> random
>> number of seconds (1-300) at startup.  This will ensure that, all the
>> database locking and such aside, the threads should all be offset from
>> one
>> another in terms of when they run.
>>
>> So, I need a random number generated when the thread starts up.  As we
>> all
>> know though, random number generation on most computers that don't have
>> something like a Brownian motion sensor attached stuck in a cup of
>> boiling
>> coffee can't generate truly random numbers.  So, in theory, what could
>> happen is that if all the servers in the cluster come up at the same
>> time,
>> the threads could wind up running at the same time regardless of the
>> random sleep at the start!  It might never happen in reality, small
>> fluctuations would probably offset them anyway, but I want to be more
>> certain than that.
>>
>> So now we're at the crux of the problem...
>>
>> I can't just seed the random number generator with the current time
>> because it concievably might not be random enough.  So, I thought I
>> could
>> just tally up the octets of the server's IP address and add that to the
>> current time.  Then the seed on each server should be different enough.
>>
>> But, there doesn't appear to be any way to get the server IP address
>> independant of a request, so I can't get at it in my plugin.  Anyone
>> know
>> differently?
>>
>> Assuming that is the case, can anyone think of any other way to seed the
>> generator that would ensure a different value on different machines in
>> the
>> cluster?  There are some options like encoding the individual server
>> names
>> in my app's config file with a different seed value for each, but that
>> makes maintenance a pain if a new server is added or one removed or
>> addresses simply changed.
>>
>> Any ideas?  Thanks!
>>
>> --
>> Frank W. Zammetti
>> Founder and Chief Software Architect
>> Omnytex Technologies
>> http://www.omnytex.com
>
> --
> Kris Schneider <mailto:[EMAIL PROTECTED]>
> D.O.Tech       <http://www.dotech.com/>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


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

Reply via email to