Hi David,
>
>
> On Mon, Nov 30, 2009 at 12:11 AM, Hannes <[email protected] 
> <mailto:[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.
I think the biggest problem is, that its necessary in my logic to inform 
the Actor, everytime a new order is created. This while-loop is an 
exception to this rule. I don't think that it would be a good idea, to 
change the behavior of how the Actor responds to messages, just to fix 
this case, or? Or is there any chance to tell a new order NOT to inform 
the Actor, even when its defined in def afterCreate ?
>
> 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)
> }
I thought about pattern matching as well, but in my first 
implementation, I just wanted to get it running and change it 
afterwards. Something else: I think recursion is slower than a 
while-loop as long as its not tail recursive, or?

thanks.
>
> 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]
>>     <mailto:[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 <http://this.lots.is> ==
>>         orders(i).lots.is <http://lots.is>){
>>
>>                            println("case-1")
>>
>>                            println("this=" + this + ", orders(i)=" +
>>         orders(i))
>>
>>                            this.open(orders(i))
>>
>>                            done = true
>>
>>                        }
>>
>>                        if (this.lots.is <http://this.lots.is> <
>>         orders(i).lots.is <http://lots.is>){
>>
>>                            println("case-2")
>>
>>                            println("this=" + this + ", orders(i)=" +
>>         orders(i))
>>
>>                            orders(i).reduceLots(this.lots.is
>>         <http://this.lots.is>)
>>
>>                            val newOrder =
>>         orders(i).cloneWith(this.lots.is <http://this.lots.is>)
>>
>>                            newOrder.save
>>
>>                            this.open(newOrder)
>>
>>                            println("before done=" + done)
>>
>>                            done = true
>>
>>                            println("after done=" + done)
>>
>>                        }
>>
>>                        if (this.lots.is <http://this.lots.is> >
>>         orders(i).lots.is <http://lots.is>){
>>
>>                            println("case-3")
>>
>>                            println("this=" + this + ", orders(i)=" +
>>         orders(i))
>>
>>                            this.reduceLots(orders(i).lots.is
>>         <http://lots.is>)
>>
>>                            val newOrder =
>>         this.cloneWith(orders(i).lots.is <http://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]
>>         <mailto:[email protected]>.
>>         To unsubscribe from this group, send email to
>>         [email protected]
>>         <mailto: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]
>>     <mailto:[email protected]>.
>>     To unsubscribe from this group, send email to
>>     [email protected]
>>     <mailto:[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]
>     <mailto:[email protected]>.
>     To unsubscribe from this group, send email to
>     [email protected]
>     <mailto: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].
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to