[Lift] Re: Jetty or Tomcat, Which web container is recommended to use to deploy the Lift app ?
I am uging lift develop a projectI, I want to deploy my project using jetty instead of tomcat, so i test jetty 6.1.22. my notebook: lenovo Y330(cpu: Core2 Duo p7350 2GHz, mem: 3G) my os: debian lenny for amd64 jdk: Java(TM) SE Runtime Environment (build 1.6.0_17-b04) step 1: download jetty 6.1.22 from http://dist.codehaus.org/jetty/jetty-6.1.22/jetty-6.1.22.zip step 2: unzip jetty 6.1.22 in my home dir. setp3: set environment var export JAVA_OPTS=-Drun.mode=production -server -Xmx2048 setp3: run jetty (cd jetty-6.1.22/ ; java -jar start.jar ) test 1: start - test the Hello World Servlet example of jetty-6.1.22, the example url: http://localhost:8080/hello/ mo...@den:~/jetty-6.1.22$ ab -n 1 -c 300 http://localhost:8080/hello/ This is ApacheBench, Version 2.3 $Revision: 655654 $ Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient) Completed 1000 requests Completed 2000 requests Completed 3000 requests Completed 4000 requests Completed 5000 requests Completed 6000 requests Completed 7000 requests Completed 8000 requests Completed 9000 requests Completed 1 requests Finished 1 requests Server Software:Jetty(6.1.22) Server Hostname:localhost Server Port:8080 Document Path: /hello/ Document Length:39 bytes Concurrency Level: 300 Time taken for tests: 10.344 seconds Complete requests: 1 Failed requests:0 Write errors: 0 Total transferred: 1060212 bytes HTML transferred: 390078 bytes Requests per second:966.72 [#/sec] (mean) Time per request: 310.329 [ms] (mean) Time per request: 1.034 [ms] (mean, across all concurrent requests) Transfer rate: 100.09 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect:0 12 152.7 23000 Processing: 200 293 53.0266 566 Waiting:1 93 53.6 65 364 Total:206 305 159.12713251 Percentage of the requests served within a certain time (ms) 50%271 66%338 75%345 80%350 90%359 95%366 98%378 99%434 100% 3251 (longest request) ===the test1 result is good! = Failed requests:0 Requests per second:966.72 [#/sec] (mean) test 1: end test 2: start - test the Request Dump JSP exmaple of jetty-6.1.22, the example url: http://localhost:8080/snoop.jsp mo...@den:~/jetty-6.1.22$ ab -n 50 -c 3 http://localhost:8080/snoop.jsp This is ApacheBench, Version 2.3 $Revision: 655654 $ Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/ Licensed to The Apache Software Foundation, http://www.apache.org/ Benchmarking localhost (be patient).done Server Software:Jetty(6.1.22) Server Hostname:localhost Server Port:8080 Document Path: /snoop.jsp Document Length:2249 bytes Concurrency Level: 3 Time taken for tests: 0.044 seconds Complete requests: 50 Failed requests:23 (Connect: 0, Receive: 0, Length: 23, Exceptions: 0) Write errors: 0 Total transferred: 124547 bytes HTML transferred: 114676 bytes Requests per second:1132.76 [#/sec] (mean) Time per request: 2.648 [ms] (mean) Time per request: 0.883 [ms] (mean, across all concurrent requests) Transfer rate: 2755.50 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect:00 0.0 0 0 Processing: 13 2.9 1 12 Waiting:12 2.9 1 12 Total: 13 2.9 1 12 Percentage of the requests served within a certain time (ms) 50% 1 66% 3 75% 3 80% 3 90% 9 95% 10 98% 12 99% 12 100% 12 (longest request) ===the test2 result is bad! = Failed requests:23 (Connect: 0, Receive: 0, Length: 23, Exceptions: 0) Requests per second:1132.76 [#/sec] (mean) why the Request Dump JSP exmaple testing result is failed, so less Number of requests(50) and less concurrency (3), -- 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=.
[Lift] Re: todo tutorial compile problem
Seems more than your User class is not implemented or not visible. Is it ? Does your model classes declare the same package ? On Nov 20, 6:42 am, adamp adam.perrypellet...@gmail.com wrote: I'm brand new to Lift and Scala, but an old hand to Java. I'm trying to work through the 'todo' example and get the following compile error. [INFO] excludes = [] [INFO] Compiling 3 source files to C:\eclipse_workspaces\ws_riojas\todo \target\c lasses C:\eclipse_workspaces\ws_riojas\todo\src\main\scala\liftworkshop\model \ToDo.scal a:13: error: not found: value User object owner extends MappedLongForeignKey(this, User) ^ C:\eclipse_workspaces\ws_riojas\todo\src\main\scala\liftworkshop\model \ToDo.scal a:13: error: wrong number of arguments for constructor Object: () java.lang.Objec t object owner extends MappedLongForeignKey(this, User) ^ two errors found [INFO] In java, I know exactly what this means and can usually figure it out. But with Scala, I'm struggling. The User object doesn't show up on the classpath and I'm wondering what jar/dependency I'm missing to get this to compile. Thanks in advance for any help. Adam -- 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=.
[Lift] early execution of snippet
I am developing an application in which i need to do url rewriting so that all the request of type /document/id gets directed to webpage display.html which calls a snippet in which i am trying to do some processing by capturing the parameter passed during urlrewriting,everything works fine but i am facing a problem here that every time i run lift and click on any link in menu the snippet called in display.html gets executed itself. my urlrewriting code is : case RewriteRequest(ParsePath(document :: id :: Nil,_,_,_ ), _,_) = RewriteResponse(display :: Nil, Map(id -id )) Can somebody help me out pointing where am i wrong and how can i solve this problem. -- 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=.
Re: [Lift] early execution of snippet
Have a read of my article here: http://is.gd/wq4K Cheers, Tim On 23 Nov 2009, at 10:50, iboy wrote: I am developing an application in which i need to do url rewriting so that all the request of type /document/id gets directed to webpage display.html which calls a snippet in which i am trying to do some processing by capturing the parameter passed during urlrewriting,everything works fine but i am facing a problem here that every time i run lift and click on any link in menu the snippet called in display.html gets executed itself. my urlrewriting code is : case RewriteRequest(ParsePath(document :: id :: Nil,_,_,_ ), _,_) = RewriteResponse(display :: Nil, Map(id -id )) Can somebody help me out pointing where am i wrong and how can i solve this problem. -- 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=. -- 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=.
Re: [Lift] Re: Call it Lift 2.0
Interesting - this is something i've not actually thought about: If we were to compile a list of all the breaking changes in 1.1, perhaps that would give some focus to this discussion... as josh points out, there are most likely quite a few now and 1.0 - 1.1 is a fairly short jump. Loc and LocParam Actor - LiftActor Full,Box etc have moved packages JSON parsing alterations and changes in JsExp Im probably missing a number of others, but we are talking about some fairly significant breaks here, right? Cheers, Tim On 23 Nov 2009, at 07:09, Heiko Seeberger wrote: Josh, Thank you for your brilliant elaboration of compatibility issues! 2009/11/22 Josh Suereth joshua.suer...@gmail.com The real question is, with all these breaking changes in lift 1.1, has any attempt been made at source-compatability? If not, I would argue a bigger version jump than 1.1. The current Lift is not source compatible with 1.0.x, just consider Box moved from ...util to ...common. Hence you would go for 2.0, right? Also, there is the possibility of taking the version system and adding a functionality milestone version at the begginning. In this case, you can use that number for marketting purposes (e.g. Lift goes 1.0!). Your version number would then be Marketing.SourceCompatability.All but Trait BinaryCompatability.Binary Compatibility. I am all against using versioning policy for marketing! Heiko Seeberger My job: weiglewilczek.com My blog: heikoseeberger.name Follow me: twitter.com/hseeberger OSGi on Scala: scalamodules.org Lift, the simply functional web framework: liftweb.net -- 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=. -- 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=.
[Lift] Re: problem defining a snippet - Method Not Found reported.
Thanks. It helped. On Nov 23, 3:03 pm, David Pollak feeder.of.the.be...@gmail.com wrote: On Sun, Nov 22, 2009 at 3:36 AM, Anatoli anatoli...@gmail.com wrote: I get following problem when trying to access a testOps.list method from a template WARN - Snippet Failure: SnippetFailure(/ - ParsePath(List (index),,true,false),Full(testOps.list),Method Not Found) I checked that LiftRules.addToPackages correctly names the package and other snippets work. Strangely enough during testing and trying dummy methods I discovered that if the method defined like this: def list(html: NodeSeq) = { val items = Item.findAll() items.flatMap(item = bind(item, html, title -- Text(Lala)) ) } it does not work but if it is defined like this def list(html: NodeSeq) = { val items = Item.findAll() bind(item, html, title -- Text(Lala)) } the snippet is found correctly. What am I doing wrong? Please help, I wasted almost the whole day on it. First, please use Lift 1.1-M6 or 1.1-SNAPSHOT. You'll get much more developer friendly error messages... some even come with diagnostics. Second, the signature of a snippet is NodeSeq = NodeSeq, so it's best to declare a return type: def list(html: NodeSeq): NodeSeq = Thanks, David -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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=.
Re: [Lift] labels for inputs
Thanks Naftoli, that did it. I wonder, why use a new method -% for attribute preservation? Naftoli Gugenheim wrote: This was changed. Instead, with the regular arrow - attributes are not preserved at all, and a new arrow was introduced -% that preserves all attributes from the template as is. This is in addition to being able to pass attributes to many SHtml methods; being able to add attributes to the returned NodeSeq; binding on attributes; and attribute snippets. - Chris Lewisburningodzi...@gmail.com wrote: Hello list, I was looking for a way to attach label elements to form inputs (via DOM id), and I came across this thread: http://www.mail-archive.com/liftweb@googlegroups.com/msg04821.html This suggests that bind points, when expanded, result in elements that have any attribute under the bind point namespace merged into the result element. This isn't working in 1.1-M7, unless I'm misunderstanding something. Given this template code: lift:Order.allOrders tr tdorder:status order:id=status//td /tr /lift:Order.allOrders I should see a DOM id of status on the resulting element, right? Instead it's just ignored. Am I doing something wrong? thanks! chris -- 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=. -- 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=. -- 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=.
[Lift] Re: Where are the dragons hiding?
Is Lift suitable for web for mobiles? Generally web for mobiles (especially in Japan) has some characteristics: * No JavaScript support * No cookie support * Non standard HTML tags Thanks I think this thread contains the key dragons in Lift. Basically, it boils down to: Lift is highly stateful... that has its pluses and minuses. We're working on mitigating the minuses (session replication and persistence). -- 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=.
Re: [Lift] Lift compiles on Scala 2.8 and runs the demo
To run maven without compiling+running test from commandline : mvn -Dmaven.test.skip=true To fully disable test without commenting them : edit pom.xml properties maven.test.skiptrue/maven.test.skip /properties (I prefer using the property instead of directly configure surfire because : * don't require to add a surfire section if it doesn't already exists * some profile (eg : integration test) are enabled only if maven.test.skip != true (include false, not-define,...) ) On Fri, Nov 20, 2009 at 01:31, David Pollak feeder.of.the.be...@gmail.comwrote: Folks, The 280_port of Lift properly compiles and runs the Lift demo application against the Scala 2.8.0 nightly. I spent most of today tracking down a bug that I can't reproduce in isolation, but it seems that the ensureCapacity method in Scala's StringBuilder method has an infinite: def ensureCapacity(n: Int) { 117http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L117 if (n array.length) { 118http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L118 var newsize = array.length * 2 119http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L119 while (n newsize) 120http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L120 newsize = newsize * 2 121http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L121 val newar = new Array[Char](newsize) 122http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L122 arraycopy(array, 0, newar, 0, count) 123http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L123 array = newar 124http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L124 } 125http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L125 } I saw an infinite loop in lines 119/120 (it was line 115 in the version I was testing against). I replaced Scala's StringBuilder with the Java native code and all worked just fine. It might be worth a gander at the byte-code for StringBuilder to see how an infinite loop could happen. Anyway, I'm looking forward to the next drop of a stable 2.8.0 so I can compile against Specs and get a more complete (read: passes tests... right now the tests are commented out because I don't have the Specs/ScalaCheck/etc. chain in the 2.8.0 nightly). Thanks, David -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Re: session variable question
Jack, 1. object MyThing extends SessionVar[Box[String]](Empty) Im using Box[String] here, but you can use whatever types you want... 2. They can be anything (classes, actors, objects), provided they are in session scope (that is, S.init has been called) Cheers, Tim On 23 Nov 2009, at 13:15, jack wrote: To give more information, I have two questions. 1) I want to define and set a session variable in Class A and read it in Class B. What is the code? 2) Can A and B be arbitrary classes or do they have to be snippets? On Nov 22, 9:14 pm, jack jack.wid...@gmail.com wrote: I defined a session variable like this object isAdminVar extends SessionVar[Box[Boolean]](Empty) in a class. I set it to true in that same class upon successful login and then access it in another class but it is coming out false. I am accessing it with isAdminVar.is.openOr(false) Am I missing something obvious? -- 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=. -- 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=.
[Lift] Re: session variable question
Do not call S.init on your own. Lift does that automatically. object MyThing extends SessionVar[Box[String]](Empty) set value: MyThing.set(Full(my value)) get the value: MyThing.get Br's, Marius On Nov 23, 3:26 pm, Jack Widman jack.wid...@gmail.com wrote: Thanks Tim. I didn't know S.init has to be called explicitly. This can be called from anywhere? On Mon, Nov 23, 2009 at 8:19 AM, Timothy Perrett timo...@getintheloop.euwrote: Jack, 1. object MyThing extends SessionVar[Box[String]](Empty) Im using Box[String] here, but you can use whatever types you want... 2. They can be anything (classes, actors, objects), provided they are in session scope (that is, S.init has been called) Cheers, Tim On 23 Nov 2009, at 13:15, jack wrote: To give more information, I have two questions. 1) I want to define and set a session variable in Class A and read it in Class B. What is the code? 2) Can A and B be arbitrary classes or do they have to be snippets? On Nov 22, 9:14 pm, jack jack.wid...@gmail.com wrote: I defined a session variable like this object isAdminVar extends SessionVar[Box[Boolean]](Empty) in a class. I set it to true in that same class upon successful login and then access it in another class but it is coming out false. I am accessing it with isAdminVar.is.openOr(false) Am I missing something obvious? -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Jack Widman co-founder / cto, Authoritude, Inc. 203-641-9355 -- 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=.
Re: [Lift] Re: session variable question
Jack, No, you don't call that yourself - I was meaning that Lift initiates the session for you, thats not your worry :-) My point really was that comet actors and other lift infrastructure initiate the session, but normal scala actors would require you to start the session scope manually using S.initIfUninited ;-) Basically, dont worry about it - just use the SessionVar extension and you should be good to go. Cheers, Tim On 23 Nov 2009, at 13:26, Jack Widman wrote: Thanks Tim. I didn't know S.init has to be called explicitly. This can be called from anywhere? On Mon, Nov 23, 2009 at 8:19 AM, Timothy Perrett timo...@getintheloop.eu wrote: Jack, 1. object MyThing extends SessionVar[Box[String]](Empty) Im using Box[String] here, but you can use whatever types you want... 2. They can be anything (classes, actors, objects), provided they are in session scope (that is, S.init has been called) Cheers, Tim On 23 Nov 2009, at 13:15, jack wrote: To give more information, I have two questions. 1) I want to define and set a session variable in Class A and read it in Class B. What is the code? 2) Can A and B be arbitrary classes or do they have to be snippets? On Nov 22, 9:14 pm, jack jack.wid...@gmail.com wrote: I defined a session variable like this object isAdminVar extends SessionVar[Box[Boolean]](Empty) in a class. I set it to true in that same class upon successful login and then access it in another class but it is coming out false. I am accessing it with isAdminVar.is.openOr(false) Am I missing something obvious? -- 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=. -- 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=. -- Jack Widman co-founder / cto, Authoritude, Inc. 203-641-9355 -- 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=. -- 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=.
Re: [Lift] Lift compiles on Scala 2.8 and runs the demo
I agree skipping test is BAD, but in the case of 2.8 for lift or when running test is long and you need to run install (eg to check compilation on a multi-module project). -Dtest=false less typing but not the same result : -Dtest=false == avoid running test not compiling them and generate this [INFO] [surefire:test] [INFO] Surefire report directory: /home/dwayne/work/./target/surefire-reports --- T E S T S --- There are no tests to run. Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [INFO] [ERROR] BUILD FAILURE [INFO] [INFO] No tests were executed! (Set -DfailIfNoTests=false to ignore this error.) /davidB On Mon, Nov 23, 2009 at 14:59, Eric Bowman ebow...@boboco.ie wrote: Some people consider it slightly evil, but you can also just do mvn ... -Dtest=false. Less typing. David Bernard wrote: To run maven without compiling+running test from commandline : mvn -Dmaven.test.skip=true To fully disable test without commenting them : edit pom.xml properties maven.test.skiptrue/maven.test.skip /properties (I prefer using the property instead of directly configure surfire because : * don't require to add a surfire section if it doesn't already exists * some profile (eg : integration test) are enabled only if maven.test.skip != true (include false, not-define,...) ) On Fri, Nov 20, 2009 at 01:31, David Pollak feeder.of.the.be...@gmail.com mailto:feeder.of.the.be...@gmail.com wrote: Folks, The 280_port of Lift properly compiles and runs the Lift demo application against the Scala 2.8.0 nightly. I spent most of today tracking down a bug that I can't reproduce in isolation, but it seems that the ensureCapacity method in Scala's StringBuilder method has an infinite: def ensureCapacity(n: Int) { 117 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L117 if (n array.length) { 118 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L118 var newsize = array.length * 2 119 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L119 while (n newsize) 120 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L120 newsize = newsize * 2 121 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L121 val newar = new Array[Char](newsize) 122 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L122 arraycopy(array, 0, newar, 0, count) 123 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L123 array = newar 124 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L124 } 125 http://lampsvn.epfl.ch/trac/scala/browser/scala/trunk/src/library/scala/collection/mutable/StringBuilder.scala?view=markup#L125 } I saw an infinite loop in lines 119/120 (it was line 115 in the version I was testing against). I replaced Scala's StringBuilder with the Java native code and all worked just fine. It might be worth a gander at the byte-code for StringBuilder to see how an infinite loop could happen. Anyway, I'm looking forward to the next drop of a stable 2.8.0 so I can compile against Specs and get a more complete (read: passes tests... right now the tests are commented out because I don't have the Specs/ScalaCheck/etc. chain in the 2.8.0 nightly). Thanks, David -- 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 liftweb@googlegroups.com mailto:liftweb@googlegroups.com. To unsubscribe from this group, send email to liftweb+unsubscr...@googlegroups.comliftweb%2bunsubscr...@googlegroups.com
[Lift] Re: Where are the dragons hiding?
It should be just fine. You can tell lift to not use Ajax or any JS at all. There are some flags in LiftRules to do that. LiftRules.setAutoIncludeComet = false; LiftRules.setAutoIncludeAjax = false; Besides that just don't use JS in your markup or don't use Lift's ajax stuff. Lift works with no cookies. Turning off cookies from container would automatically make Lift to use url-rewriting and put jsessionid in urls. You should be able to use XHTML MP with no problems. Br's, Marius On Nov 20, 6:28 am, ngocdaothanh ngocdaoth...@gmail.com wrote: Is Lift suitable for web for mobiles? Generally web for mobiles (especially in Japan) has some characteristics: * No JavaScript support * No cookie support * Non standard HTML tags Thanks I think this thread contains the key dragons in Lift. Basically, it boils down to: Lift is highly stateful... that has its pluses and minuses. We're working on mitigating the minuses (session replication and persistence). -- 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=.
[Lift] Combined primary key?
Hi all I can't seem to find a way to use a combined primary key. The use case I'm looking at would be something like a bug tracker where you can comment on each bug. Each comment would have a number (only unique within each bug report). In SQL I'd write something like: CREATE TABLE bug_comments ( bugid integer REFERENCES bugs (id), number integer, comment text, PRIMARY KEY (bugid, number) ) I've seen that I can enforce the uniqueness of (bugid, number) with def dbIndexes = Index (bugid, number) :: super.dbIndexes I'd like to have the comments numbered 1..n in each bug so they can be easily referenced. What is the common way to do this in Lift? Should I try to go that way or would you abandon the combined primary key and simply use a synthetic primary key with LongKeyedMapper with IdPK? Thanks for any input. Yours Arthur -- 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=.
Re: [Lift] Re: Where are the dragons hiding?
Marius marius.dan...@gmail.com writes: It should be just fine. You can tell lift to not use Ajax or any JS at all. There are some flags in LiftRules to do that. LiftRules.setAutoIncludeComet = false; LiftRules.setAutoIncludeAjax = false; Besides that just don't use JS in your markup or don't use Lift's ajax stuff. Even if you don't explicitly use any Ajax, I believe Lift will store callback mappings in the session? How does Lift's GC work if there's no JS support? /Jeppe -- 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=.
Re: [Lift] Re: Jetty or Tomcat, Which web container is recommended to use to deploy the Lift app ?
Ummm, there is no pom for this - its not that kind of thing. NGINX is a front end C application - if you want the fair load balencer, just download the module and compile into your NGINX build. Cheers, Tim On 20 Nov 2009, at 10:59, Jeremy Day wrote: All, I'm admittedly quite a n00b here and I have very little Maven experience. Can someone provide a POM for the Nginx + Jetty configuration? I think that I would find it quite helpful. Thanks. Jeremy 2009/11/20 Timothy Perrett timo...@getintheloop.eu Your missing a trick here - there is a fork of nginx done by Ezra that includes a fair load balencer. Google for it and you'll find the link as I don't have it handy - this version would remove the need for your intermediate proxy. Cheers, Tim Sent from my iPhone On 20 Nov 2009, at 06:59, monty chen montyc...@qq.com wrote: Hi,David Pollk! Nginx only comes with a round-robin balancer and a hash-based balancer, so if a request takes a while to load, Nginx will start routing requests to backends that are already processing requests -- as a result, some backends will be queueing up requests while some backends will remain idle. You will get an uneven load distribution, and the unevenness will increase with the amount of load subject to the load-balancer. Haproxy as a LB can: 1: Plenty of load-balancing algorithms, including a least connections strategy that picks the backend with the fewest pending connections. Which happens to be just what we want. 2: Backends can be sanity- and health-checked by URL to avoid routing requests to brain-damaged backends. (It can even stagger these checks to avoid spikes.) 3: Requests can be routed based on all sorts of things: cookies, URL substrings, client IP, etc. So, I use nginx + haproxy + tomcat(jetty). On 11月20日, 上午11时27分, David Pollak feeder.of.the.be...@gmail.com wrote: I recommend Nginx + Jetty. Apache is the worst front end for this situation... it can only support a few hundred simultaneous connections before it falls over. Ngnix on the other hand can proxy tens of thousands. Jetty's continuations make it a much better choice than Tomcat. You can have thousands of open Comet request to a Jetty instance where Tomcat is capped at a couple of hundred. Once the Servlet 3.0 spec in implemented in Glassfish, etc., Lift will support 3.0 continuations and any 3.0 container will have the same scaling characteristics that Jetty currently does. On Thu, Nov 19, 2009 at 5:35 PM, Neil.Lv anim...@gmail.com wrote: Hi all, I have a silly question about the deploy. Which web container is recommended to use to deploy the Lift app ? Jetty or Tomcat ? I want to use the Comet to push the data in the app. * Apache + Tomcat ? * Apache + what ? * Nginx + what ? Thanks for any suggestion ! Cheers, Neil -- 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.comliftweb %2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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= . -- 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=. -- 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=. -- 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=.
Re: [Lift] Re: Call it Lift 2.0
The real question is could you still keep source compatibility if you made use of some interesting implict and @deprecated annotations? I believe those are acceptable. - Josh On Mon, Nov 23, 2009 at 6:05 AM, Timothy Perrett timo...@getintheloop.euwrote: Interesting - this is something i've not actually thought about: If we were to compile a list of all the breaking changes in 1.1, perhaps that would give some focus to this discussion... as josh points out, there are most likely quite a few now and 1.0 - 1.1 is a fairly short jump. Loc and LocParam Actor - LiftActor Full,Box etc have moved packages JSON parsing alterations and changes in JsExp Im probably missing a number of others, but we are talking about some fairly significant breaks here, right? Cheers, Tim On 23 Nov 2009, at 07:09, Heiko Seeberger wrote: Josh, Thank you for your brilliant elaboration of compatibility issues! 2009/11/22 Josh Suereth joshua.suer...@gmail.com The real question is, with all these breaking changes in lift 1.1, has any attempt been made at source-compatability? If not, I would argue a bigger version jump than 1.1. The current Lift is not source compatible with 1.0.x, just consider Box moved from ...util to ...common. Hence you would go for 2.0, right? Also, there is the possibility of taking the version system and adding a functionality milestone version at the begginning. In this case, you can use that number for marketting purposes (e.g. Lift goes 1.0!). Your version number would then be Marketing.SourceCompatability.All but Trait BinaryCompatability.Binary Compatibility. I am all against using versioning policy for marketing! Heiko Seeberger My job: weiglewilczek.com My blog: heikoseeberger.name Follow me: twitter.com/hseeberger OSGi on Scala: scalamodules.org Lift, the simply functional web framework: liftweb.net -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Re: Call it Lift 2.0
On Mon, Nov 23, 2009 at 2:09 AM, Heiko Seeberger seeber...@weiglewilczek.com wrote: Josh, Thank you for your brilliant elaboration of compatibility issues! [snip/] Also, there is the possibility of taking the version system and adding a functionality milestone version at the begginning. In this case, you can use that number for marketting purposes (e.g. Lift goes 1.0!). Your version number would then be Marketing.SourceCompatability.All but Trait BinaryCompatability.Binary Compatibility. I am all against using versioning policy for marketing! Ah, but this is the real world. Providing a means for marketing to use the first version number and still letting engineering have some control seems a better world to me than what I currently have ;) - Josh -- 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=.
Re: [Lift] Re: Where are the dragons hiding?
On Mon, Nov 23, 2009 at 7:24 AM, Jeppe Nejsum Madsen je...@ingolfs.dkwrote: Marius marius.dan...@gmail.com writes: It should be just fine. You can tell lift to not use Ajax or any JS at all. There are some flags in LiftRules to do that. LiftRules.setAutoIncludeComet = false; LiftRules.setAutoIncludeAjax = false; Besides that just don't use JS in your markup or don't use Lift's ajax stuff. Even if you don't explicitly use any Ajax, I believe Lift will store callback mappings in the session? How does Lift's GC work if there's no JS support? The functions are retained for the duration of the session. This will not likely cause an issue on mobiles and the usage is not likely to produce a lot of pages/forms during a given session. /Jeppe -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Re: How to make Ajax call from onLoad/onResize?
If those other issues are with lift and you're stuck, of course feel free to post to the list for help. -Ross On Nov 20, 2009, at 9:31 AM, jhonig wrote: Hi Ross, I haven't been able to test your solution yet, still struggling with several other issues. I seldom feel this unproductive, I'm afraid, the lack of documentation and issues of what documentation are up to date are both troubling me. Thanks for your help and I will definitely post back once I was successful. Job H. PS: maybe I will now be someone else: google groups wanted me to re- register to this group with a new nickname... On Nov 18, 10:18 pm, Ross Mellgren dri...@gmail.com wrote: Yes, jsonCall is an extension of ajaxCall that automatically does the JSON conversion for you, which why you get an immutable.Map out of it rather than a blob of text. Let me know how it works out. -Ross On Nov 18, 2009, at 4:16 PM, jhonig wrote: Hi Ross, Thanks for your suggestion! So I can actually use any jsonCall as if it were Ajax and deal with the result... OK, nice. Will try it out tomorrow! Job On Nov 18, 6:24 pm, Ross Mellgren dri...@gmail.com wrote: (n.b. not compiled or tested, and there might be an easier way:) class MySnippet { def handlers(ns: NodeSeq): NodeSeq = { val handleResize = SHtml.jsonCall(JE.JsObj(width - JE.JsVar (window, screen, width), height - JE.JsVar(window, screen, height)), obj = { val result = for { m - (Box!!obj).asA[scala.collection.immutable.Map [String, Any]] width - m.get(width).asA[Int] height - m.get(height).asA[Int] } yield { // do stuff with the width and height // some JS command to send back to the browser JsCmds.Noop } result.openOr(/* JS command to send back to browser if we failed to get arguments and so on */ JsCmds.Noop) })._2 head{ Script { Function(handleResize, Nil, handleResize) } }/head } } Then in your template say onResize=handleResize() Hope that gives you some pointers, -Ross On Nov 18, 2009, at 4:19 AM, jhonig wrote: Hi All, Yet another question: I need to make Ajax calls when a page is loaded or resized. The call would need to pass some local client information (browser size). The return should be javascript code that populates a div on that page (in particular: an image that is scaled on the server to match the browser size). Actually, local js code is in place that makes the call only after the user has stopped resizing (using a timeout). I guess I have to use AjaxCall, providing an expression that puts the window dimensions in an array or list, then return the javascript to add an img tag that downloads the scaled image from a generated url. Given the level of success I achieved so far, I thought I better ask if this would work our before I start trying endlessly. Thanks for any suggestions, Job -- 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 athttp://groups.google.com/group/liftweb?hl= . -- 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 athttp://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 . For more options, visit this group at http://groups.google.com/group/liftweb?hl= . -- 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=.
Re: [Lift] Combined primary key?
I have heard on the list previously that compound primary keys are not supported by mapper. -Ross On Nov 23, 2009, at 10:18 AM, Arthur wrote: Hi all I can't seem to find a way to use a combined primary key. The use case I'm looking at would be something like a bug tracker where you can comment on each bug. Each comment would have a number (only unique within each bug report). In SQL I'd write something like: CREATE TABLE bug_comments ( bugid integer REFERENCES bugs (id), number integer, comment text, PRIMARY KEY (bugid, number) ) I've seen that I can enforce the uniqueness of (bugid, number) with def dbIndexes = Index (bugid, number) :: super.dbIndexes I'd like to have the comments numbered 1..n in each bug so they can be easily referenced. What is the common way to do this in Lift? Should I try to go that way or would you abandon the combined primary key and simply use a synthetic primary key with LongKeyedMapper with IdPK? Thanks for any input. Yours Arthur -- 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= . -- 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=.
Re: [Lift] labels for inputs
One reason is that the regular arrow takes a NodeSeq which can't necessarily have attributes; for example it might be a few Elems. The new arrow takes Elem which can. - Chris Lewisburningodzi...@gmail.com wrote: Thanks Naftoli, that did it. I wonder, why use a new method -% for attribute preservation? Naftoli Gugenheim wrote: This was changed. Instead, with the regular arrow - attributes are not preserved at all, and a new arrow was introduced -% that preserves all attributes from the template as is. This is in addition to being able to pass attributes to many SHtml methods; being able to add attributes to the returned NodeSeq; binding on attributes; and attribute snippets. - Chris Lewisburningodzi...@gmail.com wrote: Hello list, I was looking for a way to attach label elements to form inputs (via DOM id), and I came across this thread: http://www.mail-archive.com/liftweb@googlegroups.com/msg04821.html This suggests that bind points, when expanded, result in elements that have any attribute under the bind point namespace merged into the result element. This isn't working in 1.1-M7, unless I'm misunderstanding something. Given this template code: lift:Order.allOrders tr tdorder:status order:id=status//td /tr /lift:Order.allOrders I should see a DOM id of status on the resulting element, right? Instead it's just ignored. Am I doing something wrong? thanks! chris -- 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=. -- 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=. -- 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=. -- 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=.
Re: [Lift] Working with legacy databases
On Sat, Nov 21, 2009 at 8:16 PM, Donald McLean dmclea...@gmail.com wrote: We are considering porting an existing Java desktop app to a Scala/lift web app. The application works with a Sybase DB. I'm still pretty new to Scala and Lift so I'm probably overlooking something obvious but could someone recommend a technology that is know to work for this environment? I have used Hibernate in the past and will use it again if necessary but I would be interested to know if there are other options. You have Record and Mapper, which are a part of lift. You have Scala QL. Since Lift is written in Scala you have a plethora of Java based ORM's and DB acccess libraries as well. It's your choice, really. Thank you, Donald -- Family photographs are a critical legacy for ourselves and our descendants. Protect that legacy with a digital backup and recovery plan. Join the photo preservation advocacy Facebook group: http://www.facebook.com/home.php?ref=logo#/group.php?gid=148274709288 -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- James A Barrows -- 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=.
Re: [Lift] Working with legacy databases
On Mon, Nov 23, 2009 at 8:38 AM, Jim Barrows jim.barr...@gmail.com wrote: On Sat, Nov 21, 2009 at 8:16 PM, Donald McLean dmclea...@gmail.comwrote: We are considering porting an existing Java desktop app to a Scala/lift web app. The application works with a Sybase DB. I'm still pretty new to Scala and Lift so I'm probably overlooking something obvious but could someone recommend a technology that is know to work for this environment? I have used Hibernate in the past and will use it again if necessary but I would be interested to know if there are other options. You have Record and Mapper, which are a part of lift. You have Scala QL. Since Lift is written in Scala you have a plethora of Java based ORM's and DB acccess libraries as well. Neither Mapper or Record supports Sybase... I think a JPA solution or even using the existing Java-based model classes might be the best bet. Thanks, David It's your choice, really. Thank you, Donald -- Family photographs are a critical legacy for ourselves and our descendants. Protect that legacy with a digital backup and recovery plan. Join the photo preservation advocacy Facebook group: http://www.facebook.com/home.php?ref=logo#/group.php?gid=148274709288 -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- James A Barrows -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Combined primary key?
On Mon, Nov 23, 2009 at 8:30 AM, Ross Mellgren dri...@gmail.com wrote: I have heard on the list previously that compound primary keys are not supported by mapper. That'd be correct. Please use JPA. -Ross On Nov 23, 2009, at 10:18 AM, Arthur wrote: Hi all I can't seem to find a way to use a combined primary key. The use case I'm looking at would be something like a bug tracker where you can comment on each bug. Each comment would have a number (only unique within each bug report). In SQL I'd write something like: CREATE TABLE bug_comments ( bugid integer REFERENCES bugs (id), number integer, comment text, PRIMARY KEY (bugid, number) ) I've seen that I can enforce the uniqueness of (bugid, number) with def dbIndexes = Index (bugid, number) :: super.dbIndexes I'd like to have the comments numbered 1..n in each bug so they can be easily referenced. What is the common way to do this in Lift? Should I try to go that way or would you abandon the combined primary key and simply use a synthetic primary key with LongKeyedMapper with IdPK? Thanks for any input. Yours Arthur -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl= . -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Re: Call it Lift 2.0
I guess this conversation should have taken place before we started doing milestone releases etc - stuff thats broken will have to stay broken now otherwise we'll be making more breaking changes just to un-break previous stuff... Cheers, Tim On 23 Nov 2009, at 16:18, Josh Suereth wrote: The real question is could you still keep source compatibility if you made use of some interesting implict and @deprecated annotations? I believe those are acceptable. - Josh On Mon, Nov 23, 2009 at 6:05 AM, Timothy Perrett timo...@getintheloop.eu wrote: Interesting - this is something i've not actually thought about: If we were to compile a list of all the breaking changes in 1.1, perhaps that would give some focus to this discussion... as josh points out, there are most likely quite a few now and 1.0 - 1.1 is a fairly short jump. Loc and LocParam Actor - LiftActor Full,Box etc have moved packages JSON parsing alterations and changes in JsExp Im probably missing a number of others, but we are talking about some fairly significant breaks here, right? Cheers, Tim On 23 Nov 2009, at 07:09, Heiko Seeberger wrote: Josh, Thank you for your brilliant elaboration of compatibility issues! 2009/11/22 Josh Suereth joshua.suer...@gmail.com The real question is, with all these breaking changes in lift 1.1, has any attempt been made at source-compatability? If not, I would argue a bigger version jump than 1.1. The current Lift is not source compatible with 1.0.x, just consider Box moved from ...util to ...common. Hence you would go for 2.0, right? Also, there is the possibility of taking the version system and adding a functionality milestone version at the begginning. In this case, you can use that number for marketting purposes (e.g. Lift goes 1.0!). Your version number would then be Marketing.SourceCompatability.All but Trait BinaryCompatability.Binary Compatibility. I am all against using versioning policy for marketing! Heiko Seeberger My job: weiglewilczek.com My blog: heikoseeberger.name Follow me: twitter.com/hseeberger OSGi on Scala: scalamodules.org Lift, the simply functional web framework: liftweb.net -- 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=. -- 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=. -- 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=. -- 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=.
Re: [Lift] todo tutorial compile problem
What command line command did you use to create the project? Is there a User.scala file in your model package/directory? On Thu, Nov 19, 2009 at 9:42 PM, adamp adam.perrypellet...@gmail.comwrote: I'm brand new to Lift and Scala, but an old hand to Java. I'm trying to work through the 'todo' example and get the following compile error. [INFO] excludes = [] [INFO] Compiling 3 source files to C:\eclipse_workspaces\ws_riojas\todo \target\c lasses C:\eclipse_workspaces\ws_riojas\todo\src\main\scala\liftworkshop\model \ToDo.scal a:13: error: not found: value User object owner extends MappedLongForeignKey(this, User) ^ C:\eclipse_workspaces\ws_riojas\todo\src\main\scala\liftworkshop\model \ToDo.scal a:13: error: wrong number of arguments for constructor Object: () java.lang.Objec t object owner extends MappedLongForeignKey(this, User) ^ two errors found [INFO] In java, I know exactly what this means and can usually figure it out. But with Scala, I'm struggling. The User object doesn't show up on the classpath and I'm wondering what jar/dependency I'm missing to get this to compile. Thanks in advance for any help. Adam -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] url problem
On Sun, Nov 22, 2009 at 11:36 PM, mr najmi mnajm...@gmail.com wrote: dear all, i have one problem in url rewriting..what i want is something like this guest/view?branch=?date=?...or guest/view/branch/date. my code as below: LiftRules.rewrite.append { case RewriteRequest( ParsePath(List(guest, view, branch, date),_,_,_),_,_) = RewriteResponse(List(guest,view), Map(branch - branch,date - date)) } val entries = Menu(Loc(Home, List(index), Home)):: Menu(Loc(View, guest::view::Nil, View)):: User.sitemap LiftRules.setSiteMap(SiteMap(entries:_*)) and my error is The Requested URL guest/view/Full(1)/Full(11/17/2009) was not found on the above URL will parse to: List(guest, view, Full(1), Full(11, 17, 2009)) This does not match List(guest, view, branch, date) When you generate your URL, please make sure the URL Encode each path element (see Helpers.urlEncode) Thanks, David this server..can anyone help me..is it my code wrong. for your info view.html is in the guest folder -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
[Lift] Lift archetypes broken
Guys (IRC specifically), The archetypes in master are broken: [INFO] [ERROR] BUILD ERROR [INFO] [INFO] Error creating from archetype Embedded error: The META-INF/maven/archetype.xml descriptor cannot be found. Can someone please address this. Thanks, Tim -- 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=.
[Lift] Re: Combined primary key?
On 23 Nov., 17:42, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 8:30 AM, Ross Mellgren dri...@gmail.com wrote: I have heard on the list previously that compound primary keys are not supported by mapper. That'd be correct. Please use JPA. Thanks Ross and David. Compound primary key, not combined primary key, that's why I haven't found much. :) In that case I go with a synthetic primary key. Regards Arthur On Nov 23, 2009, at 10:18 AM, Arthur wrote: Hi all I can't seem to find a way to use a combined primary key. The use case I'm looking at would be something like a bug tracker where you can comment on each bug. Each comment would have a number (only unique within each bug report). In SQL I'd write something like: CREATE TABLE bug_comments ( bugid integer REFERENCES bugs (id), number integer, comment text, PRIMARY KEY (bugid, number) ) I've seen that I can enforce the uniqueness of (bugid, number) with def dbIndexes = Index (bugid, number) :: super.dbIndexes I'd like to have the comments numbered 1..n in each bug so they can be easily referenced. What is the common way to do this in Lift? Should I try to go that way or would you abandon the combined primary key and simply use a synthetic primary key with LongKeyedMapper with IdPK? Thanks for any input. Yours Arthur -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl= . -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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=.
Re: [Lift] NPE in S.?! if used outside a request
I am okay with an NPE thrown from using S outside a request. Yeah, it'd be nicer to have a more polite error message, but there should be no creep towards being able to call S outside a request/session scope. Also, except for tests or actors, one should never think about initializing S. On Sat, Nov 21, 2009 at 3:28 PM, Ross Mellgren dri...@gmail.com wrote: Hmm, you raise an interesting point. So I guess the situation is more variegated: 1) If you have a locale calculator that works per-request and does not have an app default, then it is definitely incorrect to call S.? out of a request context, 2) but if you have one that works app-wide then it should work -- but doesn't, unless you call S.init or one of those by yourself, 3) so my proposed error is not good. It would be nice to catch uses of S.? outside of a request context when your intended behavior is that you only have per-request locales, so I guess if that is the desire then one should make their locale calculator log the error text, and the change to lift should be something more like: def resourceBundles: List[ResourceBundle] = { -_resBundle.value match { - case Nil = { +_resBundle.box match { + case Full(bundles) if !bundles.isEmpty = bundles + case _ = { _resBundle.set(LiftRules.resourceNames.flatMap(name = tryo( List(ResourceBundle.getBundle(name, locale)) ).openOr( NamedPF.applyBox((name, locale), LiftRules.resourceBundleFactories.toList).map(List(_)) openOr Nil ))) _resBundle.value } - case bundles = bundles } } That is, if the _resBundle ThreadGlobal has not been initialized yet, or it's been initialized with the empty list, then do resource bundle loading. If it has been initialized with a non-empty list then use that. I don't think this should interact badly with S.init, since S.init uses _resBundle.doWith(Nil) ... which will both overwrite any loaded app-level bundles with the empty list, but also restore them upon completion of the S scope. -Ross On Nov 21, 2009, at 6:15 PM, Timothy Perrett wrote: I agree that getting an NPE is less than desirable! I'm not sure things are wrong per-say; the defualt locale calculator has an app wide setting and there is nothing to say that that a user must implement their locale calculator in a particular way... This is one of the great things about lift ;-) So the issue here seems to be the lazy / eager evaluation of bald rather than localization out of request context? I'm all for getting rid of these NPE scenarios though :-) Cheers, Tim Sent from my iPhone On 22 Nov 2009, at 00:02, Ross Mellgren dri...@gmail.com wrote: It's being called to provide the link text for menus during sitemap creation at boot time, as well as during class initialization time to make some vals that contain error text. I believe initializing these at Boot time to be incorrect since the correct locale cannot be known until a request is made (unless you force one locale for the entire site, I guess), but the NPE seems uglier than providing an error log explaining the problem. -Ross On Nov 21, 2009, at 5:57 PM, Timothy Perrett wrote: Ross, Where in your code are you calling this method? What I'd the context that puts it outside of a request? Cheers, Tim Sent from my iPhone On 21 Nov 2009, at 23:03, Ross Mellgren dri...@gmail.com wrote: I'm poking around the LiftTicket codebase, and currently it suffers from an NPE on Boot: ERROR - Failed to Boot java.lang.ExceptionInInitializerError at org.liftticket.liftticket.snippet.UserAdmin$.menus (UserAdmin.scala:41) at bootstrap.liftweb.Boot.buildMenus(Boot.scala:74) at bootstrap.liftweb.Boot.boot(Boot.scala:67) ... Caused by: java.lang.NullPointerException at net.liftweb.http.S$.$qmark$bang(S.scala:675) at net.liftweb.http.S$.$qmark(S.scala:636) at org.liftticket.liftticket.snippet.RoleAdmin$.init (RoleAdmin.scala:94) at org.liftticket.liftticket.snippet.RoleAdmin$.clinit (RoleAdmin.scala) ... 57 more This is apparently due to S._resBundle being null because S.init has not yet been entered, so S._resBundle.doWith(Nil) is not in the enclosing scope, and so: private def ?!(str: String, resBundle: List[ResourceBundle]): String = resBundle.flatMap(r = tryo(r.getObject(str) match { Blows up with NPE. resBundle is passed in from S.? by calling S.resourceBundles, which is defined thus: def resourceBundles: List[ResourceBundle] = { _resBundle.value match { case Nil = { // loads the resource bundles here } case bundles = bundles } } I don't think the resource bundles can be reasonably loaded outside a request since no locale can be computed -- the call site should lazily compute the menu text at request time using LinkText rather than eagerly using S.?, but the error case is
Re: [Lift] Working with legacy databases
I think scalajpa is a very good option if your database is supported by the underlying jpa provider. - according to https://www.hibernate.org/80.html, the hibernate / sybase supported version is Sybase 12.5 (JConnect 5.5) - according to https://www.hibernate.org/120.html, there is some Batch update issue with Sybase If you have another database version, you can customize the generated sql writing your own custom Dialect class. A few issues I had : - hibernate + cglib + scala : using a lot of permgen memory, exhausted PermGen memory can cause OutOfMemoryException (solution : add some more PermGen memory with -XX:MaxPermSize) - hibernate + c3po + mysql : issue with connection pool, connections with timeout are reused and issue errors (solution : review code and always call cleanup when necessary) Maybe someone else will provide some info about other JPA providers. You can generate your first scala/jpa web application using the lift-archetype-jpa-basic / 1.1-SNAPSHOT archetype. Don't forget to use http://scala-tools.org/repo-snapshots repository. If you have any problem, just ask ! Jean-Luc jlcane...@gmail.com 2009/11/23 David Pollak feeder.of.the.be...@gmail.com On Mon, Nov 23, 2009 at 8:38 AM, Jim Barrows jim.barr...@gmail.comwrote: On Sat, Nov 21, 2009 at 8:16 PM, Donald McLean dmclea...@gmail.comwrote: We are considering porting an existing Java desktop app to a Scala/lift web app. The application works with a Sybase DB. I'm still pretty new to Scala and Lift so I'm probably overlooking something obvious but could someone recommend a technology that is know to work for this environment? I have used Hibernate in the past and will use it again if necessary but I would be interested to know if there are other options. You have Record and Mapper, which are a part of lift. You have Scala QL. Since Lift is written in Scala you have a plethora of Java based ORM's and DB acccess libraries as well. Neither Mapper or Record supports Sybase... I think a JPA solution or even using the existing Java-based model classes might be the best bet. Thanks, David It's your choice, really. Thank you, Donald -- Family photographs are a critical legacy for ourselves and our descendants. Protect that legacy with a digital backup and recovery plan. Join the photo preservation advocacy Facebook group: http://www.facebook.com/home.php?ref=logo#/group.php?gid=148274709288 -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- James A Barrows -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Jean-Luc Canela jlcane...@gmail.com -- 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=.
Re: [Lift] NPE in S.?! if used outside a request
So would you prefer no change or change to have better error message? -Ross On Nov 23, 2009, at 1:55 PM, David Pollak wrote: I am okay with an NPE thrown from using S outside a request. Yeah, it'd be nicer to have a more polite error message, but there should be no creep towards being able to call S outside a request/session scope. Also, except for tests or actors, one should never think about initializing S. On Sat, Nov 21, 2009 at 3:28 PM, Ross Mellgren dri...@gmail.com wrote: Hmm, you raise an interesting point. So I guess the situation is more variegated: 1) If you have a locale calculator that works per-request and does not have an app default, then it is definitely incorrect to call S.? out of a request context, 2) but if you have one that works app-wide then it should work -- but doesn't, unless you call S.init or one of those by yourself, 3) so my proposed error is not good. It would be nice to catch uses of S.? outside of a request context when your intended behavior is that you only have per-request locales, so I guess if that is the desire then one should make their locale calculator log the error text, and the change to lift should be something more like: def resourceBundles: List[ResourceBundle] = { -_resBundle.value match { - case Nil = { +_resBundle.box match { + case Full(bundles) if !bundles.isEmpty = bundles + case _ = { _resBundle.set(LiftRules.resourceNames.flatMap(name = tryo( List(ResourceBundle.getBundle(name, locale)) ).openOr( NamedPF.applyBox((name, locale), LiftRules.resourceBundleFactories.toList).map(List(_)) openOr Nil ))) _resBundle.value } - case bundles = bundles } } That is, if the _resBundle ThreadGlobal has not been initialized yet, or it's been initialized with the empty list, then do resource bundle loading. If it has been initialized with a non-empty list then use that. I don't think this should interact badly with S.init, since S.init uses _resBundle.doWith(Nil) ... which will both overwrite any loaded app-level bundles with the empty list, but also restore them upon completion of the S scope. -Ross On Nov 21, 2009, at 6:15 PM, Timothy Perrett wrote: I agree that getting an NPE is less than desirable! I'm not sure things are wrong per-say; the defualt locale calculator has an app wide setting and there is nothing to say that that a user must implement their locale calculator in a particular way... This is one of the great things about lift ;-) So the issue here seems to be the lazy / eager evaluation of bald rather than localization out of request context? I'm all for getting rid of these NPE scenarios though :-) Cheers, Tim Sent from my iPhone On 22 Nov 2009, at 00:02, Ross Mellgren dri...@gmail.com wrote: It's being called to provide the link text for menus during sitemap creation at boot time, as well as during class initialization time to make some vals that contain error text. I believe initializing these at Boot time to be incorrect since the correct locale cannot be known until a request is made (unless you force one locale for the entire site, I guess), but the NPE seems uglier than providing an error log explaining the problem. -Ross On Nov 21, 2009, at 5:57 PM, Timothy Perrett wrote: Ross, Where in your code are you calling this method? What I'd the context that puts it outside of a request? Cheers, Tim Sent from my iPhone On 21 Nov 2009, at 23:03, Ross Mellgren dri...@gmail.com wrote: I'm poking around the LiftTicket codebase, and currently it suffers from an NPE on Boot: ERROR - Failed to Boot java.lang.ExceptionInInitializerError at org.liftticket.liftticket.snippet.UserAdmin$.menus (UserAdmin.scala:41) at bootstrap.liftweb.Boot.buildMenus(Boot.scala:74) at bootstrap.liftweb.Boot.boot(Boot.scala:67) ... Caused by: java.lang.NullPointerException at net.liftweb.http.S$.$qmark$bang(S.scala:675) at net.liftweb.http.S$.$qmark(S.scala:636) at org.liftticket.liftticket.snippet.RoleAdmin$.init (RoleAdmin.scala:94) at org.liftticket.liftticket.snippet.RoleAdmin$.clinit (RoleAdmin.scala) ... 57 more This is apparently due to S._resBundle being null because S.init has not yet been entered, so S._resBundle.doWith(Nil) is not in the enclosing scope, and so: private def ?!(str: String, resBundle: List[ResourceBundle]): String = resBundle.flatMap(r = tryo(r.getObject(str) match { Blows up with NPE. resBundle is passed in from S.? by calling S.resourceBundles, which is defined thus: def resourceBundles: List[ResourceBundle] = { _resBundle.value match { case Nil = { // loads the resource bundles here } case bundles = bundles } } I don't think the resource bundles can be reasonably loaded
Re: [Lift] NPE in S.?! if used outside a request
On Mon, Nov 23, 2009 at 11:01 AM, Ross Mellgren dri...@gmail.com wrote: So would you prefer no change or change to have better error message? Change to have a better error message -Ross On Nov 23, 2009, at 1:55 PM, David Pollak wrote: I am okay with an NPE thrown from using S outside a request. Yeah, it'd be nicer to have a more polite error message, but there should be no creep towards being able to call S outside a request/session scope. Also, except for tests or actors, one should never think about initializing S. On Sat, Nov 21, 2009 at 3:28 PM, Ross Mellgren dri...@gmail.com wrote: Hmm, you raise an interesting point. So I guess the situation is more variegated: 1) If you have a locale calculator that works per-request and does not have an app default, then it is definitely incorrect to call S.? out of a request context, 2) but if you have one that works app-wide then it should work -- but doesn't, unless you call S.init or one of those by yourself, 3) so my proposed error is not good. It would be nice to catch uses of S.? outside of a request context when your intended behavior is that you only have per-request locales, so I guess if that is the desire then one should make their locale calculator log the error text, and the change to lift should be something more like: def resourceBundles: List[ResourceBundle] = { -_resBundle.value match { - case Nil = { +_resBundle.box match { + case Full(bundles) if !bundles.isEmpty = bundles + case _ = { _resBundle.set(LiftRules.resourceNames.flatMap(name = tryo( List(ResourceBundle.getBundle(name, locale)) ).openOr( NamedPF.applyBox((name, locale), LiftRules.resourceBundleFactories.toList).map(List(_)) openOr Nil ))) _resBundle.value } - case bundles = bundles } } That is, if the _resBundle ThreadGlobal has not been initialized yet, or it's been initialized with the empty list, then do resource bundle loading. If it has been initialized with a non-empty list then use that. I don't think this should interact badly with S.init, since S.init uses _resBundle.doWith(Nil) ... which will both overwrite any loaded app-level bundles with the empty list, but also restore them upon completion of the S scope. -Ross On Nov 21, 2009, at 6:15 PM, Timothy Perrett wrote: I agree that getting an NPE is less than desirable! I'm not sure things are wrong per-say; the defualt locale calculator has an app wide setting and there is nothing to say that that a user must implement their locale calculator in a particular way... This is one of the great things about lift ;-) So the issue here seems to be the lazy / eager evaluation of bald rather than localization out of request context? I'm all for getting rid of these NPE scenarios though :-) Cheers, Tim Sent from my iPhone On 22 Nov 2009, at 00:02, Ross Mellgren dri...@gmail.com wrote: It's being called to provide the link text for menus during sitemap creation at boot time, as well as during class initialization time to make some vals that contain error text. I believe initializing these at Boot time to be incorrect since the correct locale cannot be known until a request is made (unless you force one locale for the entire site, I guess), but the NPE seems uglier than providing an error log explaining the problem. -Ross On Nov 21, 2009, at 5:57 PM, Timothy Perrett wrote: Ross, Where in your code are you calling this method? What I'd the context that puts it outside of a request? Cheers, Tim Sent from my iPhone On 21 Nov 2009, at 23:03, Ross Mellgren dri...@gmail.com wrote: I'm poking around the LiftTicket codebase, and currently it suffers from an NPE on Boot: ERROR - Failed to Boot java.lang.ExceptionInInitializerError at org.liftticket.liftticket.snippet.UserAdmin$.menus (UserAdmin.scala:41) at bootstrap.liftweb.Boot.buildMenus(Boot.scala:74) at bootstrap.liftweb.Boot.boot(Boot.scala:67) ... Caused by: java.lang.NullPointerException at net.liftweb.http.S$.$qmark$bang(S.scala:675) at net.liftweb.http.S$.$qmark(S.scala:636) at org.liftticket.liftticket.snippet.RoleAdmin$.init (RoleAdmin.scala:94) at org.liftticket.liftticket.snippet.RoleAdmin$.clinit (RoleAdmin.scala) ... 57 more This is apparently due to S._resBundle being null because S.init has not yet been entered, so S._resBundle.doWith(Nil) is not in the enclosing scope, and so: private def ?!(str: String, resBundle: List[ResourceBundle]): String = resBundle.flatMap(r = tryo(r.getObject(str) match { Blows up with NPE. resBundle is passed in from S.? by calling S.resourceBundles, which is defined thus: def resourceBundles: List[ResourceBundle] = { _resBundle.value match { case Nil = { // loads the resource bundles here } case bundles = bundles } }
Re: [Lift] Okay... part of the slow problem is javax.script
mvn dependency:tree -Ross On Nov 23, 2009, at 2:55 PM, David Pollak wrote: Folks, I've narrowed down part of the slowness problem. There's a reference to javax.script:script-js that's never satisfied. How can I track down what is including this reference or alternatively blacklist the particular reference?\ Thanks, David -- 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= . -- 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=.
[Lift] Re: Okay... part of the slow problem is javax.script
David, it's probably a broken Specs 1.6.1 which causes this. Please see this: http://github.com/robey/xrayspecs/issues/closed/#issue/1 Cheers Joni On 23 marras, 22:06, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 12:02 PM, Ross Mellgren dri...@gmail.com wrote: mvn dependency:tree Cool. Thanks! -Ross On Nov 23, 2009, at 2:55 PM, David Pollak wrote: Folks, I've narrowed down part of the slowness problem. There's a reference to javax.script:script-js that's never satisfied. How can I track down what is including this reference or alternatively blacklist the particular reference?\ Thanks, David -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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=. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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=.
Re: [Lift] Re: Okay... part of the slow problem is javax.script
On Mon, Nov 23, 2009 at 12:56 PM, Joni Freeman freeman.j...@gmail.comwrote: David, it's probably a broken Specs 1.6.1 which causes this. Please see this: http://github.com/robey/xrayspecs/issues/closed/#issue/1 Tnx! Cheers Joni On 23 marras, 22:06, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 12:02 PM, Ross Mellgren dri...@gmail.com wrote: mvn dependency:tree Cool. Thanks! -Ross On Nov 23, 2009, at 2:55 PM, David Pollak wrote: Folks, I've narrowed down part of the slowness problem. There's a reference to javax.script:script-js that's never satisfied. How can I track down what is including this reference or alternatively blacklist the particular reference?\ Thanks, David -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%2bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
[Lift] Improving lift-flot
I've been working with lift-flot a lot recently and I'd like to share some thoughts and suggest some improvements. It's a very useful interface to a great Javascript plotting library, so consider these as small suggestions from a fan. First, the fact that FlotSerie's data property is a List[Pair[Double, Double]] means that detail about what you're charting can get lost. If you're plotting more than one line and want to refer to a certain FlotSerie later, you have to rely upon the FlotSerie's label and the order of the List[FlotSerie] used by Flot.render and JsFlotAppendData. This can be addressed either by having a parallel list of your own more expressive data instances, which is what I'm doing, or by only having this more expressive list and having an implicit conversion to a Pair[Double, Double] (I just thought of this and haven't tested it). I can't think of a better way to do this, since everyone's data source will be different and so the generic Pair[Double, Double] is needed – this is just a comment on how the library works. There is a general reliance on List[Pair[Double, Double]] throughout lift-flot and it is an actual annoyance when you are updating an existing graph, for instance via a Comet actor. Speaking of the List [FlotSerie] I mentioned earlier, if you are updating your chart you need to keep this list of series around and update it as you have new data to plot. This is fine except for the fact that JsFlotAppendData requires you to pass it both the updated List[FlotSerie] and a List [Pair[Double, Double]] with one and only one new data point for each FlotSerie. This means that you need to hard-code the list order so that the order of the List[Pair[Double, Double]] matches that of the List[FlotSerie], so that the correct series is updated with the correct new point. I assume you need to give it the new data twice so it knows which FlotSeries have new points and which don't, but this is something the library could do behind the scenes to make the developers' lives easier. More importantly, I don't like the fact that the method replies upon two lists being in the exact same order. So, what would I like to see with lift-flot? Mainly I'd like to see the whole situation with the List[Pair[Double, Double]]'s improved. I don't know if another Flot class, such as a FlotPoint, would help or maybe just making better use of the List[FlotSeries], but I think there definitely is room for improvement. If someone else has been using lift-flot I'd love to hear their suggestions, as perhaps I've been making it more complicated than it actually is. I think a lot of the annoyances I described only crop up when using the JsFlotAppendData method, so I don't won't to propose anything that ends up being a regression for the majority of the library's users. Please let me know if you're doing static charts and anything suggested would make your work more complicated. Since I am using lift-flot a lot (perhaps more than anyone else, seeing how little it's been discussed here recently), I'm more than happy to take the lead and contribute some code if others agree that my suggestions are reasonable (please convince me otherwise!). I guess that the first thing I could do would be to write a tutorial on using the library. Would that be appreciated? Peter Robinett PS I've been working with 1.1-M5 and 1.1-M6, but I don't think there have been any changes to lift-flot since then, let alone any that would invalidate my comments. -- 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=.
Re: [Lift] Lift on Azure
I really thought that you were talking about Azul, which is something I would *love* to run Lift on :) http://www.azulsystems.com/ Derek On Thu, Nov 19, 2009 at 3:20 PM, David Pollak feeder.of.the.be...@gmail.com wrote: On Thu, Nov 19, 2009 at 1:51 PM, Matt Harrington mbh.li...@gmail.comwrote: Java apps have gotten a lot easier to run on Azure this week. Here's a video on developing a simple app with Eclipse and deploying in Tomcat on Azure: http://microsoftpdc.com/Sessions/SVC50 Cool! I don't believe Java on Azure has the same restrictions as Java on GAE. For example, you can write to the local filesystem and use threads. Using the REST-based Azure Tables datastore (non-RDBMS) with Lift's ORM might be tricky, But maybe the Record stuff could work. but SQL Azure is available via JDBC. Or, as far as I know Derby should work. It'd be interesting to support SQL Azure... I'm betting it's not a material deviation from SQL Server. I think you need to be on Windows to develop though, even though the example in the video just uses Eclipse. For one thing, the desktop version of Azure is Windows-only. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
Re: [Lift] Problem with issue 182
OK, thinking about this a little further, technically it would be a breaking change to remove the menus method from MetaMegaProtoUser. Would it be better to simply introduce a MenuGenerator trait, a la trait MenuGenerator { def menus : List[Menu] } And add that to CRUDify and MetaMegaProtoUser? On Thu, Nov 19, 2009 at 3:36 PM, Jeppe Nejsum Madsen je...@ingolfs.dkwrote: Derek Chen-Becker dchenbec...@gmail.com writes: I hadn't though about mixing in CRUDify with users. I suppose we should just pull it out and leave sitemap as the sole menuing method. Jeppe, can you open a ticket? Sure: http://github.com/dpp/liftweb/issues/#issue/200 /Jeppe -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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=.
[Lift] Re: Configuring web.xml
I get the HTTP Status 404 Error: The requested resource () is not available On Nov 24, 11:21 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:13 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I need the url pattern for my application to be /grid/*. I configured the web.xml file like this: web-app filter filter-nameLiftFilter/filter-name display-nameLift Filter/display-name descriptionThe Filter that intercepts lift calls/description filter-classnet.liftweb.http.LiftFilter/filter-class /filter filter-mapping filter-nameLiftFilter/filter-name url-pattern/grid/*/url-pattern /filter-mapping /web-app But my application does not run with this pattern (e.g. http://localhost:8080/SortableGridViewApp-0.0.1/grid/). What other seetings I need to make? What do you mean by does not run? Regards, Sunanda -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text -- Hide quoted text - - Show quoted text - -- 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=.
Re: [Lift] Re: Configuring web.xml
On Mon, Nov 23, 2009 at 4:27 PM, sunanda sunanda.pa...@gmail.com wrote: I get the HTTP Status 404 Error: The requested resource () is not available Do you have items and SiteMap entries for /grid/index /grid/ ? On Nov 24, 11:21 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:13 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I need the url pattern for my application to be /grid/*. I configured the web.xml file like this: web-app filter filter-nameLiftFilter/filter-name display-nameLift Filter/display-name descriptionThe Filter that intercepts lift calls/description filter-classnet.liftweb.http.LiftFilter/filter-class /filter filter-mapping filter-nameLiftFilter/filter-name url-pattern/grid/*/url-pattern /filter-mapping /web-app But my application does not run with this pattern (e.g. http://localhost:8080/SortableGridViewApp-0.0.1/grid/). What other seetings I need to make? What do you mean by does not run? Regards, Sunanda -- 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.comliftweb%2bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text -- Hide quoted text - - Show quoted text - -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.
[Lift] Re: Configuring web.xml
No I don't have. Do I need to have this. On Nov 24, 11:49 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:27 PM, sunanda sunanda.pa...@gmail.com wrote: I get the HTTP Status 404 Error: The requested resource () is not available Do you have items and SiteMap entries for /grid/index /grid/ ? On Nov 24, 11:21 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:13 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I need the url pattern for my application to be /grid/*. I configured the web.xml file like this: web-app filter filter-nameLiftFilter/filter-name display-nameLift Filter/display-name descriptionThe Filter that intercepts lift calls/description filter-classnet.liftweb.http.LiftFilter/filter-class /filter filter-mapping filter-nameLiftFilter/filter-name url-pattern/grid/*/url-pattern /filter-mapping /web-app But my application does not run with this pattern (e.g. http://localhost:8080/SortableGridViewApp-0.0.1/grid/). What other seetings I need to make? What do you mean by does not run? Regards, Sunanda -- 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.comliftweb%2bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text -- Hide quoted text - - Show quoted text - -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text - -- 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.
Re: [Lift] Re: Change to support dynamic top level menu items
As much as I subscribe to the a lack of dissent is implicit assent policy, I'm hoping somebody deeply familiar with SiteMap can comment on whether this change seems like a bad idea? I guess if I don't hear anything I'll create an issue and submit the patch for review, but I'd feel better with a bit more discussion. -Ross On Nov 22, 2009, at 9:28 PM, philip wrote: Essential for the CMS I am programming as the user needs to be able to define the menu structure. On 11月22日, 上午4時46分, Ross Mellgren dri...@gmail.com wrote: In the recent thread, a couple people asked for the ability to create dynamic menu items per request from the database. David suggested Loc.supplimentalKidMenuItems which works fine for dynamic children of a static menu, but doesn't support the ability to make the top level menu dynamic. Menu has a method called makeMenuItem which gives a Box of MenuItem. What about a new method makeMenuItems that gives a possible plurality of MenuItems whose default implementation deferred to the existing makeMenuItem in the case where it's not overridden? I made this change to my local copy of lift and it seems to work alright. Example Menu: case class DynMenu() extends Menu(Loc(dynmenu, Link(List(dynmenu), true, /dynmenu), Dynamic Menu)) { override def makeMenuItems(path: List[Loc[_]]): Iterable[MenuItem] = DynMenuItem.findAll.map(dmi = { MenuItem(Text(dmi.label.is), Text(dmi.link.is), Nil, false, false, Nil) }) } That is, a Menu can generate 0 or more MenuItems when the menu is being generated. The disadvantage I see is similar to the one with supplimentalKidMenuItems -- that is, you have to manually compute the attributes of MenuItem such as current. However, it does give you the full power to make whatever kind of menu items you want. I looked briefly at seeing if it would be feasible to use a function Box[Req] = SiteMap on LiftRules, but I think the RewritePF auto detection thing in LiftRules.setSiteMap prevents this from being the right thing. The change to lift-webkit: diff --git a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala index d33d1dc..79194f5 100644 --- a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala +++ b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala @@ -61,8 +61,10 @@ case class Menu(loc: Loc[_], kids: Menu*) extends HasKids { } // def buildChildLine: List[MenuItem] = kids.toList.flatMap(m = m.loc.buildItem(Nil, false, false)) + def makeMenuItems(path: List[Loc[_]]): Iterable[MenuItem] = makeMenuItem(path) + def makeMenuItem(path: List[Loc[_]]): Box[MenuItem] = - loc.buildItem(loc.buildKidMenuItems(kids), _lastInPath(path), _inPath(path)) +loc.buildItem(loc.buildKidMenuItems(kids), _lastInPath(path), _inPath(path)) private def _inPath(in: List[Loc[_]]): Boolean = in match { case Nil = false diff --git a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala index 7939938..f8fa307 100644 --- a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala +++ b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala @@ -66,7 +66,7 @@ case class SiteMap(globalParamFuncs: List[PartialFunction[Box[Req], Loc.AnyLocPa case Full(loc) = loc.breadCrumbs case _ = Nil } -CompleteMenu(kids.flatMap(_.makeMenuItem(path))) +CompleteMenu(kids.flatMap(_.makeMenuItems(path))) } } Thoughts? -Ross -- 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=. -- 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.
Re: [Lift] Re: Configuring web.xml
On Mon, Nov 23, 2009 at 4:54 PM, sunanda sunanda.pa...@gmail.com wrote: No I don't have. Do I need to have this. If you don't define the pages, then you'll get a 404. On Nov 24, 11:49 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:27 PM, sunanda sunanda.pa...@gmail.com wrote: I get the HTTP Status 404 Error: The requested resource () is not available Do you have items and SiteMap entries for /grid/index /grid/ ? On Nov 24, 11:21 am, David Pollak feeder.of.the.be...@gmail.com wrote: On Mon, Nov 23, 2009 at 4:13 PM, sunanda sunanda.pa...@gmail.com wrote: Hi, I need the url pattern for my application to be /grid/*. I configured the web.xml file like this: web-app filter filter-nameLiftFilter/filter-name display-nameLift Filter/display-name descriptionThe Filter that intercepts lift calls/description filter-classnet.liftweb.http.LiftFilter/filter-class /filter filter-mapping filter-nameLiftFilter/filter-name url-pattern/grid/*/url-pattern /filter-mapping /web-app But my application does not run with this pattern (e.g. http://localhost:8080/SortableGridViewApp-0.0.1/grid/). What other seetings I need to make? What do you mean by does not run? Regards, Sunanda -- 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.comliftweb%2bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com liftweb%252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text -- Hide quoted text - - Show quoted text - -- 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.comliftweb%2bunsubscr...@googlegroups.com liftweb%2bunsubscr...@googlegroups.comliftweb%252bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- Lift, the simply functional web frameworkhttp://liftweb.net Beginning Scalahttp://www.apress.com/book/view/1430219890 Follow me:http://twitter.com/dpp Surf the harmonics- Hide quoted text - - Show quoted text - -- 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.comliftweb%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.
Re: [Lift] Re: Change to support dynamic top level menu items
On Mon, Nov 23, 2009 at 4:55 PM, Ross Mellgren dri...@gmail.com wrote: As much as I subscribe to the a lack of dissent is implicit assent policy, I'm hoping somebody deeply familiar with SiteMap can comment on whether this change seems like a bad idea? I guess if I don't hear anything I'll create an issue and submit the patch for review, but I'd feel better with a bit more discussion. Give me a few days to respond please. -Ross On Nov 22, 2009, at 9:28 PM, philip wrote: Essential for the CMS I am programming as the user needs to be able to define the menu structure. On 11月22日, 上午4時46分, Ross Mellgren dri...@gmail.com wrote: In the recent thread, a couple people asked for the ability to create dynamic menu items per request from the database. David suggested Loc.supplimentalKidMenuItems which works fine for dynamic children of a static menu, but doesn't support the ability to make the top level menu dynamic. Menu has a method called makeMenuItem which gives a Box of MenuItem. What about a new method makeMenuItems that gives a possible plurality of MenuItems whose default implementation deferred to the existing makeMenuItem in the case where it's not overridden? I made this change to my local copy of lift and it seems to work alright. Example Menu: case class DynMenu() extends Menu(Loc(dynmenu, Link(List(dynmenu), true, /dynmenu), Dynamic Menu)) { override def makeMenuItems(path: List[Loc[_]]): Iterable[MenuItem] = DynMenuItem.findAll.map(dmi = { MenuItem(Text(dmi.label.is), Text(dmi.link.is), Nil, false, false, Nil) }) } That is, a Menu can generate 0 or more MenuItems when the menu is being generated. The disadvantage I see is similar to the one with supplimentalKidMenuItems -- that is, you have to manually compute the attributes of MenuItem such as current. However, it does give you the full power to make whatever kind of menu items you want. I looked briefly at seeing if it would be feasible to use a function Box[Req] = SiteMap on LiftRules, but I think the RewritePF auto detection thing in LiftRules.setSiteMap prevents this from being the right thing. The change to lift-webkit: diff --git a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala index d33d1dc..79194f5 100644 --- a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala +++ b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/Menu.scala @@ -61,8 +61,10 @@ case class Menu(loc: Loc[_], kids: Menu*) extends HasKids { } // def buildChildLine: List[MenuItem] = kids.toList.flatMap(m = m.loc.buildItem(Nil, false, false)) + def makeMenuItems(path: List[Loc[_]]): Iterable[MenuItem] = makeMenuItem(path) + def makeMenuItem(path: List[Loc[_]]): Box[MenuItem] = - loc.buildItem(loc.buildKidMenuItems(kids), _lastInPath(path), _inPath(path)) +loc.buildItem(loc.buildKidMenuItems(kids), _lastInPath(path), _inPath(path)) private def _inPath(in: List[Loc[_]]): Boolean = in match { case Nil = false diff --git a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala index 7939938..f8fa307 100644 --- a/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala +++ b/lift-base/lift-webkit/src/main/scala/net/liftweb/sitemap/SiteMap.scala @@ -66,7 +66,7 @@ case class SiteMap(globalParamFuncs: List[PartialFunction[Box[Req], Loc.AnyLocPa case Full(loc) = loc.breadCrumbs case _ = Nil } -CompleteMenu(kids.flatMap(_.makeMenuItem(path))) +CompleteMenu(kids.flatMap(_.makeMenuItems(path))) } } Thoughts? -Ross -- 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.comliftweb%2bunsubscr...@googlegroups.com . For more options, visit this group at http://groups.google.com/group/liftweb?hl=. -- 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.comliftweb%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
[Lift] Need for lift application to coexist with spring in the same webapp
Hi David, Thank for all the help so far. My lift application needs to coexist with the spring servlet in the same web application. I have configured the web.xml file for both of the spring servlet and lift filter. Hence I need to configure the url pattern in such a way that /grid/* request will be handled by lift application and other urls will be processed by spring. What I need to understand is how to set up the rules such that this can be achieved. -- 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.
Re: [Lift] Feature Request: deleteMenuLocParams in CRUDify
Added an issue for you: http://github.com/dpp/liftweb/issues#issue/205 and it's on review board: http://reviewboard.liftweb.net/r/121/ So it will (probably) be in 1.1-SNAPSHOT in a day or two, assuming the change isn't unacceptable for whatever reason. -Ross On Nov 23, 2009, at 11:50 PM, tommycli wrote: Add deleteMenuLocParams to CRUDify. Patch below. (I tried github, but you guys don't pull apparently). pre diff --git a/lift-persistence/lift-mapper/src/main/scala/net/liftweb/ mapper/CRUDify.scala b/lift-persistence/lift-mapper/src/main/scala/net/ liftweb/mapper/CR index 21e5a3b..5aae123 100644 --- a/lift-persistence/lift-mapper/src/main/scala/net/liftweb/mapper/ CRUDify.scala +++ b/lift-persistence/lift-mapper/src/main/scala/net/liftweb/mapper/ CRUDify.scala @@ -265,7 +265,7 @@ trait CRUDify[KeyType, CrudType : KeyedMapper [KeyType, CrudType]] { def defaultValue = Empty - def params = Nil + def params = deleteMenuLocParams /** * What's the text of the link? @@ -297,6 +297,11 @@ trait CRUDify[KeyType, CrudType : KeyedMapper [KeyType, CrudType]] { })) } + /** + * Override to include new Params for the show all menu + */ + def deleteMenuLocParams: List[Loc.AnyLocParam] = Nil + def deleteMenuName = S.??(Delete)+ +displayName def deleteTemplate(): NodeSeq = pageWrapper(_deleteTemplate) /pre -- 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. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.
Re: [Lift] Controlling fields in form generation
Thanks, that's what I was looking for. On Tue, Nov 24, 2009 at 12:40 AM, Ross Mellgren dri...@gmail.com wrote: It looks like you can override dbIncludeInForm_? to suppress fields from showing up in the form: ... object myField extends MappedString(this, 32) { override def dbIncludeInForm_? = false } ... -Ross On Nov 23, 2009, at 11:38 PM, Oscar Picasso wrote: HI, I generate a form with .toForm and want some fields to not appear in the form. I have tried to subclass fieldOrder in the MetaMapper but while it controls the order, all the fields keep appearing in the form even if they are not in the list returned by the overrided fieldOrder methods. I have tried other methods but with no luck. -- 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.comliftweb%2bunsubscr...@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. For more options, visit this group at http://groups.google.com/group/liftweb?hl=en.