On Mon, Nov 30, 2009 at 11:26 PM, Hannes <hannes.flo...@gmx.li> wrote:

>  Hi David,
>
>
>
> On Mon, Nov 30, 2009 at 12:11 AM, Hannes <hannes.flo...@gmx.li> 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 ?
>

Without seeing the whole of your application logic, it's difficult for me to
advise you.


>
>
> 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?
>

This case is tail recursive, so it's as fast as a well written while loop.
But you've got an O(n ^ 2) construct in your app, so performance doesn't
seem to be paramount.

Thanks,

David


>
> 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 <hannes.flo...@gmx.li> 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 lift...@googlegroups.com.
>>> To unsubscribe from this group, send email to
>>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>>> .
>>> 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 lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com.
>> 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 lift...@googlegroups.com.
>> To unsubscribe from this group, send email to
>> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
>> .
>> 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 lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com.
> 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 lift...@googlegroups.com.
> To unsubscribe from this group, send email to
> liftweb+unsubscr...@googlegroups.com<liftweb%2bunsubscr...@googlegroups.com>
> .
> 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 lift...@googlegroups.com.
To unsubscribe from this group, send email to 
liftweb+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en.


Reply via email to