Re: The wisdom of the object mentors (Was: Searching OO Associations with RDBMS Persistence Models)
From: Robert Martin <unclebob_at_objectmentor.com>
Date: Tue, 20 Jun 2006 15:50:51 -0400
Message-ID: <2006062015505171490-unclebob_at_objectmentorcom>
>> Could you show me how you would construct a credit request packet from
>> a customer record and send it to the credit service, and then process
>> the response? Just for the sake of argument we'll keep the packet
>> simple. The request packet is just a simple SSN encoded in BCD in five
>> bytes. The response is two bytes that contain a binary number whose
>> value ranges from 0-999. You send the request to port 884 of
>> 124.132.4.23, and it will reply within 2 seconds. If it doesn't reply
>> within 2 seconds you need to retry. After the third attempt, you need
>> to declare an error in the current transaction and create a log file
>> entry. Given a valid reply, you set a flag in the customer record to
>> ACCEPTED if the returned value is > 500, otherwise you set the flat to
>> REJECTED.
Date: Tue, 20 Jun 2006 15:50:51 -0400
Message-ID: <2006062015505171490-unclebob_at_objectmentorcom>
On 2006-06-02 14:05:37 -0400, "Mikito Harakiri" <mikharakiri_nospaum_at_yahoo.com> said:
> > Robert Martin wrote:
>> Could you show me how you would construct a credit request packet from
>> a customer record and send it to the credit service, and then process
>> the response? Just for the sake of argument we'll keep the packet
>> simple. The request packet is just a simple SSN encoded in BCD in five
>> bytes. The response is two bytes that contain a binary number whose
>> value ranges from 0-999. You send the request to port 884 of
>> 124.132.4.23, and it will reply within 2 seconds. If it doesn't reply
>> within 2 seconds you need to retry. After the third attempt, you need
>> to declare an error in the current transaction and create a log file
>> entry. Given a valid reply, you set a flag in the customer record to
>> ACCEPTED if the returned value is > 500, otherwise you set the flat to
>> REJECTED.
>
> Big Deal:
>
> boolean querySSN ( int ssn ) {
> PreparedStatement pstmt = conn.prepareStatement(
> "select count(*) from people where ssn = :0"
> );
> pstmt.setString(1,ssn);
> ResultSet rs = pstmt.executeQuery();
> rs.next();
> return rs.getInt(1)==1? true : false
> }
>
> boolean checkSSN ( int ssn ) {
> boolean[] ret = new boolean[1];
> Thread check1 = new Thread() {
> public void run() {
> ret[0] = checkSSN(ssn);
> }
> };
> check1.start();
> final int tick = 10;
> long startTime = System.currentTimeMillis();
> while( check1.isAlive() ) {
> try {
> Thread.currentThread().sleep(tick,0);
> if( System.currentTimeMillis()-startTime >
> timeoutMin*60*1000 ) {
> break;
> }
> } catch( InterruptedException e ) {
> throw new Exception("SHOULD NEVER HAPPEN");
> }
> }
> if( ret[0] ) return true;
> Thread check2 = new Thread() {
> public void run() {
> checkSSN(ssn);
> }
> };
> check2.start();
> startTime = System.currentTimeMillis();
> while( check2.isAlive() ) {
> try {
> Thread.currentThread().sleep(tick,0);
> if( System.currentTimeMillis()-startTime >
> timeoutMin*60*1000 ) {
> break;
> }
> } catch( InterruptedException e ) {
> throw new Exception("SHOULD NEVER HAPPEN");
> }
> }
> return ret[0];
> }
This is java. I believe I was asking for this to be done in a database language.
-- Robert C. Martin (Uncle Bob) | email: unclebob_at_objectmentor.com Object Mentor Inc. | blog: www.butunclebob.com The Agile Transition Experts | web: www.objectmentor.com 800-338-6716 |Received on Tue Jun 20 2006 - 21:50:51 CEST
