On Mon, Nov 30, 2009 at 12:11 AM, Hannes <[email protected]> wrote:

>  Hi David,
>
> In my LimitOrder Meta Object, I did:
>
> override def afterCreate
>
> to inform an Actor, everytime a new Order is created. The Actor than calls
> the joinOtherOrders method.
> #
> I think I understand it now. Cause I'm creating new orders inside the loop
> at some point. But still I don' t really know, why it gets called after the
> old scope of joinOtherOrders ends...
>

Sounds to me like it's all in your application's logic.  As others have
pointed out, Thread.dumpStack will let you figure out where things are being
called.

Also, you might want to use recursion and pattern matching to replace your
while loop (which is O(n^2) btw):

def dealWithList(in: List[Something]): Unit = in match {
  case Nil => () // nothing left to do
  case x :: _ if x.condition1 => x.doThing1
  case x :: _ if x.condition2 => x.doThing2
  case x :: xs if x.condition3 => x.doThing3 ; dealWithList(xs)
  case _ :: xs => dealWithList(xs)
}

You have the same semantics of a while loop with the ability to break out,
but the code is about your logic rather than about looping.


>
> thanks.
>
>
>
> On Sun, Nov 29, 2009 at 7:24 AM, Hannes <[email protected]> wrote:
>
>> Hey Lifters,
>>
>
> How is joinOtherOrders being invoked?
>
>
>>
>> I've some really strange things going on here. Please consider this
>> method definition. I've put alot of print "debug" statements between
>> other statements. There's a while-loop that only starts, when the given
>> list (orders) is not empty. It stops when "done" is set to true. So far,
>> so good. Than, have a look at the Lift output. I put in a comment,
>> pointing out where the program runs into the while loop.
>>
>> What really shocks me, are these print statements :
>>
>> before done=false
>> after done=true
>> i += 1
>> outside while
>> INFO - Service request (GET) / took 121 Milliseconds
>> start of joinAll!
>>
>>
>> The loop ends with "outside while" and than the method gets called again
>> immediately! But who calls it? I don't....
>>
>> Any ideas?
>>
>> thanks.
>>
>>
>>
>> ---------------------------- method definition
>> --------------------------------------------------------------------------
>>
>> def joinOtherOrders: Unit = {
>>
>>        def joinAll(orders: List[LimitOrder]) = {
>>
>>            println("start of joinAll!")
>>
>>            var done = false
>>
>>            var i = 0
>>
>>            while (!orders.isEmpty && !done) {
>>
>>                println("i=" + i + ", " + "orders.isEmpty=" +
>> orders.isEmpty + ", " + "done=" + done)
>>
>>                if (this.lots.is == orders(i).lots.is){
>>
>>                    println("case-1")
>>
>>                    println("this=" + this + ", orders(i)=" + orders(i))
>>
>>                    this.open(orders(i))
>>
>>                    done = true
>>
>>                }
>>
>>                if (this.lots.is < orders(i).lots.is){
>>
>>                    println("case-2")
>>
>>                    println("this=" + this + ", orders(i)=" + orders(i))
>>
>>                    orders(i).reduceLots(this.lots.is)
>>
>>                    val newOrder = orders(i).cloneWith(this.lots.is)
>>
>>                    newOrder.save
>>
>>                    this.open(newOrder)
>>
>>                    println("before done=" + done)
>>
>>                    done = true
>>
>>                    println("after done=" + done)
>>
>>                }
>>
>>                if (this.lots.is > orders(i).lots.is){
>>
>>                    println("case-3")
>>
>>                    println("this=" + this + ", orders(i)=" + orders(i))
>>
>>                    this.reduceLots(orders(i).lots.is)
>>
>>                    val newOrder = this.cloneWith(orders(i).lots.is)
>>
>>                    newOrder.save
>>
>>                    newOrder.open(orders(i))
>>
>>                }
>>
>>                i += 1
>>
>>                println("i += 1")
>>
>>            }
>>
>>            println("outside while")
>>
>>        }
>>
>>        def findLimitOrdersById: List[LimitOrder]  =
>>
>>            this.findCandidates.map(x => LimitOrderMetaObj.findAll(
>>
>>                    By(LimitOrderMetaObj.id, x)).head)
>>
>>        joinAll(findLimitOrdersById)
>>
>>    }
>>
>>
>> ---------- Lift Output
>> -------------------------------------------------------------------------------
>>
>>
>> [INFO] Started Jetty Server
>> [INFO] Starting scanner at interval of 5 seconds.
>> INFO - Service request (GET) /comet_request/54834680365/y7kybsmuyv1g took
>> 64 Milliseconds
>> INFO - Service request (GET) /comet_request/85319966940/y7kybsmuyv1g took
>> 23 Milliseconds
>> INFO - Service request (GET) /favicon.ico took 86 Milliseconds
>> INFO - Service request (GET) /comet_request/41521581405/y7kybsmuyv1g took
>> 48 Milliseconds
>> INFO - Service request (GET) /comet_request/93176242746/y7kybsmuyv1g took
>> 7 Milliseconds
>> INFO - Service request (GET) /favicon.ico took 38 Milliseconds
>> INFO - Service request (GET) /favicon.ico took 5 Milliseconds
>> INFO - Service request (GET) / took 551 Milliseconds
>> INFO - Service request (GET) /comet_request/81361316835/y7kybsmuyv1g took
>> 9 Milliseconds
>> INFO - Service request (GET) /favicon.ico took 16 Milliseconds
>> INFO - Service request (GET) / took 61 Milliseconds
>> INFO - Service request (GET) /comet_request/76898140873/y7kybsmuyv1g took
>> 30 Milliseconds
>> INFO - Service request (GET) /comet_request/e8jesgmo10oq/cometAjax.js took
>> 14 Milliseconds
>> INFO - Service request (GET) / took 354 Milliseconds
>> INFO - Service request (GET) / took 734 Milliseconds
>> INFO - Service request (GET) / took 484 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 7 Milliseconds
>> INFO - Service request (GET) /favicon.ico took 4 Milliseconds
>> INFO - Service request (GET) /comet_request/78026241833/e8jesgmo10oq took
>> 55 Milliseconds
>> INFO - Service request (GET) /comet_request/28225538857/e8jesgmo10oq took
>> 600 Milliseconds
>> INFO - Service request (GET) /user_mgt/sign_up took 711 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (GET) /user_mgt/login took 38 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (POST) /user_mgt/login took 122 Milliseconds
>> INFO - Service request (GET) / took 93 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /comet_request/42818301584/e8jesgmo10oq took
>> 1144 Milliseconds
>> INFO - Service request (GET) /limitorder/list took 99 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /limitorder/create took 77 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (POST) /limitorder/create took 134 Milliseconds
>> start of joinAll!
>> outside while
>> INFO - Service request (GET) /limitorder/list took 270 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (GET) /limitorder/create took 51 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (POST) /limitorder/create took 11 Milliseconds
>> start of joinAll!
>> outside while
>> INFO - Service request (GET) /limitorder/list took 56 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /user_mgt/logout took 21 Milliseconds
>> INFO - The CometActor org.tobster.comet.mar...@c595bcd Received Shutdown
>> INFO - Service request (GET) / took 82 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /comet_request/16awv92sf1zgl/cometAjax.js
>> took 2 Milliseconds
>> INFO - Service request (GET) /comet_request/21077236431/16awv92sf1zgl took
>> 41 Milliseconds
>> INFO - Service request (GET) /comet_request/89548874922/16awv92sf1zgl took
>> 817 Milliseconds
>> INFO - Service request (GET) /user_mgt/sign_up took 325 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (POST) /user_mgt/sign_up took 69 Milliseconds
>> INFO - Service request (GET) / took 21 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /comet_request/33304915285/16awv92sf1zgl took
>> 2485 Milliseconds
>> INFO - Service request (GET) /limitorder/create took 102 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (POST) /limitorder/create took 33 Milliseconds
>> start of joinAll!
>> outside while
>> INFO - Service request (GET) / took 42 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (GET) /comet_request/43041247578/16awv92sf1zgl took
>> 1270 Milliseconds
>> INFO - Service request (GET) /limitorder/create took 72 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 2 Milliseconds
>> INFO - Service request (POST) /limitorder/create took 34 Milliseconds
>> start of joinAll!
>> outside while
>> INFO - Service request (GET) / took 28 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (GET) /comet_request/94649970499/16awv92sf1zgl took
>> 2455 Milliseconds
>> INFO - Service request (GET) /limitorder/create took 25 Milliseconds
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>> INFO - Service request (POST) /limitorder/create took 10 Milliseconds
>>
>> ####### Interesting things start here
>> #####################################
>>
>> start of joinAll!
>> i=0, orders.isEmpty=false, done=false
>> case-3
>> this={ owner=2, type=, lots=2, market= }, orders(i)={ owner=1, type=SELL,
>> lots=1, market=Beginner }
>> computeAndSetMarketValue
>> computeNewMarketValue
>> setMarketValue from ID=1 to: 10001
>> findAndCloseOpenOrder: found=0
>> findAndCloseOpenOrder: found=0
>> i += 1
>> i=1, orders.isEmpty=false, done=false
>> case-2
>> this={ owner=2, type=, lots=1, market= }, orders(i)={ owner=1, type=SELL,
>> lots=2, market=Beginner }
>> computeAndSetMarketValue
>> computeNewMarketValue
>> setMarketValue from ID=1 to: 10001
>> findAndCloseOpenOrder: found=0
>> findAndCloseOpenOrder: found=0
>> before done=false
>> after done=true
>> i += 1
>> outside while
>> INFO - Service request (GET) / took 121 Milliseconds
>> start of joinAll!
>> i=0, orders.isEmpty=false, done=false
>> case-1
>> this={ owner=2, type=BUY, lots=1, market=Beginner }, orders(i)={ owner=1,
>> type=SELL, lots=1, market=Beginner }
>> computeAndSetMarketValue
>> computeNewMarketValue
>> setMarketValue from ID=1 to: 10001
>> findAndCloseOpenOrder: found=0
>> findAndCloseOpenOrder: found=0
>> i += 1
>> outside while
>> start of joinAll!
>> outside while
>> INFO - Service request (GET) /images/ajax-loader.gif took 1 Milliseconds
>>
>> --
>>
>> You received this message because you are subscribed to the Google Groups
>> "Lift" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<liftweb%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/liftweb?hl=en.
>>
>>
>>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Surf the harmonics
>
> --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected].
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Lift" group.
> To post to this group, send email to [email protected].
> To unsubscribe from this group, send email to
> [email protected]<liftweb%[email protected]>
> .
> For more options, visit this group at
> http://groups.google.com/group/liftweb?hl=en.
>



-- 
Lift, the simply functional web framework http://liftweb.net
Beginning Scala http://www.apress.com/book/view/1430219890
Follow me: http://twitter.com/dpp
Surf the harmonics

--

You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to