[Lift] Re: Why fields are declared as 'object' with Mapper/Record?
After reading Naftoli's post i checked the way inner object laziness is implemented. And it appears to be not thread safe. Following code: class A { val a = 1 } class B { object b extends A } Generates getter for b as follows: public final B$b$ b(); Code: 0: aload_0 1: getfield#18; //Field b$module:LB$b$; 4: ifnonnull 19 7: aload_0 8: new #20; //class B$b$ 11: dup 12: aload_0 13: invokespecial #23; //Method B$b$."":(LB;)V 16: putfield#18; //Field b$module:LB$b$; 19: aload_0 20: getfield#18; //Field b$module:LB$b$; 23: areturn Looks like its not synchronized? I also looked at lazy vals generated code (when i was thinking on val based Records) and dropped the idea because of synchronization for every single access to a field. --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
I've got a change on review board that will pick up vals and lazy vals that are MappedFields. See http://reviewboard.liftweb.net/r/40/ However, until certain defects in the Scala compiler ( https://lampsvn.epfl.ch/trac/scala/ticket/2463 and https://lampsvn.epfl.ch/trac/scala/ticket/1006) are fixed, these features are dangerous and should not be used. 2009/10/12 Oleg G. > > Very interesting reading, Naftoli! Thanks alot for such extensive > explainations. I'm going to read your message again and again until i > understand it all :) > > On 13 окт, 02:09, Naftoli Gugenheim wrote: > >1. Personally I would not take the approach of creating a totally new > ORM > >with a completely new paradigm just to eliminate the object syntax. > > > > The first step, as with anything in life, is to define our goals. What > > exactly is it about the object syntax that's problematic? Is > overridability > > a problem? Is reflection evil? Let's make a list of our objectives over > > here. > > In any case, I would take the following approach. > > Currently, the way Mapper works is as follows. Every Mapper instance > > delegates database actions to its MetaMapper instance, which, upon > > initialization, builds the information about its fields using reflection, > > including the list of fields and their names. > > Three reasons for the object approach were mentioned in this thread. > > > >1. To allow access to members. It was mentioned that this is now > possible > >with anonymous classes (val x = new Y { ... } ). What was not > mentioned but > >I read elsewhere IIRC is that the latter is implemented by scalac via > >reflection. Not that that's the end of the world, especially as we're > >relying on reflection as it is. Also, at least the argument > remains--allow > >one to choose whichever syntax one desires. On the other hand, if > Mapper > >would not use reflection, objects, being lazy, would not be known > about > >until initialized, thus requiring the user to manually reference them. > >2. To disambiguate members that reference or return other fields. > >However, this argument assumes that the list of fields is built via > >reflection; maybe it should not be. > >3. To allow the field names to become available via reflection. I > don't > >there's any way around this other than a compiler plugin (or maybe > >scala.reflect.Code?) So my suggestion would require passing the field > name > >to a constructor. On the other hand, as I mentioned in a previous post > and > >will explain better below, passing "this" to the constructor can be > >eliminated. > > > > So the first reason basically says, "since people may need to use > 'object,' > > and objects are lazy and we won't necessarily know about them, we had > better > > use reflection." On the other hand, if we use vals most of the time, the > > constructor itself can inform the MetaMapper of its existence, and if > > someone wants to use 'object' or 'lazy val' then they will be required to > > initialize it before using it with Mapper. > > The second reason is eliminated if we don't use reflection. > > The third reason remains valid but the question is how important it is, > at > > the expense of preventing subclasses from overriding fields. > > > > If it is acceptable to eliminate the "this" parameter and instead require > a > > field name parameter, then it would seem possible to use a val based > system > > instead of an object + reflection system. > > > > Here is how it would work. > > class Field(name: String)(implicit meta: MetaModel) { > > meta.register(this)} > > > > class Model { > > implicit def meta = getSingleton} > > > > > > class MyModel extends Model { > > val field1 = new Field("firstname") // meta gets passed automatically > > val fieldRef = field1 // doesn't cause duplication because fields are > > registered on instantiation} > > > > val fieldX = new Field("lastname") // compiler error because no implicit > > MetaModel in scope > > val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad > > idea > > > > Two points. > > > >1. The concept of the meta being passed implicitly could probably be > >implemented into the current system. The only thing it has to do with > this > >discussion is that if you would have to pass 'this' and the field name > it > >would be really verbose, so I'm just pointing out that we could have a > >non-reflection-based system with about the same verbosity that we use > now, > >although we could make the current system less verbose too. > >2. On the surface it would seem impossible to implement this in > Mapper, > >because by not using reflection there's no way to get all the object > members > >since objects are lazy. However since the reflection system only picks > up > >objects and not vals, one could solve this as follows. As long as the > same > >field cannot be registered twice, i
[Lift] Re: URL in PlainMailBodyType to BlackBerry
True, I may have to do that at some point, although I'm not super confident I'll find such specs. What do you say to Ross's comment? Why is it multipart? - David Pollak wrote: On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim wrote: > > Does this help? It's from GMail / Show original > GMail munges things, so I don't know if that's the original message. You might want to figure out what the specs are for blackberry to convert messages and see why this kind of message is not being converted. > > Delivered-To: naftoli...@gmail.com > Received: by 10.86.30.11 with SMTP id d11cs12302fgd; >Wed, 7 Oct 2009 12:28:57 -0700 (PDT) > Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Return-Path: > Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122]) >by mx.google.com with ESMTP id > 1si71430296yxe.11.2009.10.07.12.28.55; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Received-SPF: neutral (google.com: 174.143.236.122 is neither > permitted nor denied by best guess record for domain of > yehu...@lrbcol.org) client-ip=174.143.236.122; > Authentication-Results: mx.google.com; spf=neutral (google.com: > 174.143.236.122 is neither permitted nor denied by best guess record > for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org > Received: from lrbcol (localhost [127.0.0.1]) >by lrbcol (Postfix) with ESMTP id CDB51A0055 >for ; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > From: yehu...@lrbcol.org > To: naftoli...@gmail.com > Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol> > Subject: Detail of Transportation #843 > MIME-Version: 1.0 > Content-Type: multipart/alternative; >boundary="=_Part_0_1227069312.1254943735894" > Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > > --=_Part_0_1227069312.1254943735894 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 7bit > > naftuli gugenheim; 617 6st > ; M: 7325342893; From : ; To : 39 hearth ct; > Request URL: [TODO] > --=_Part_0_1227069312.1254943735894-- > > > On Mon, Oct 12, 2009 at 6:15 PM, David Pollak > wrote: > > Please send some test email to an account you can access using > Thunderbird. > > Open the message and look at the message source. Is it really plain > text? > > What do the headers say it is? > > > > On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim > > > wrote: > >> > >> Hi. I'm sending an email using PlainMailBodyType that contains a URL. > >> Normally when a BlackBerry receives a plain text email it > >> automatically hyperlinks URLS and potential phone numbers. For some > >> reason this email is not being hyperlinked on the BlackBerry. Is it > >> possible that it's somehow not purely plain text? How would I solve > >> this? I don't want to send HTML messages because some recipients may > >> not be able to view it. > >> Thanks. > >> > >> > > > > > > > > -- > > 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 > > > > > > > > > > > -- 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 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: URL in PlainMailBodyType to BlackBerry
On Mon, Oct 12, 2009 at 6:17 PM, Naftoli Gugenheim wrote: > > Does this help? It's from GMail / Show original > GMail munges things, so I don't know if that's the original message. You might want to figure out what the specs are for blackberry to convert messages and see why this kind of message is not being converted. > > Delivered-To: naftoli...@gmail.com > Received: by 10.86.30.11 with SMTP id d11cs12302fgd; >Wed, 7 Oct 2009 12:28:57 -0700 (PDT) > Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Return-Path: > Received: from lrbcol (174-143-236-122.static.slicehost.net[174.143.236.122]) >by mx.google.com with ESMTP id > 1si71430296yxe.11.2009.10.07.12.28.55; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Received-SPF: neutral (google.com: 174.143.236.122 is neither > permitted nor denied by best guess record for domain of > yehu...@lrbcol.org) client-ip=174.143.236.122; > Authentication-Results: mx.google.com; spf=neutral (google.com: > 174.143.236.122 is neither permitted nor denied by best guess record > for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org > Received: from lrbcol (localhost [127.0.0.1]) >by lrbcol (Postfix) with ESMTP id CDB51A0055 >for ; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > From: yehu...@lrbcol.org > To: naftoli...@gmail.com > Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol> > Subject: Detail of Transportation #843 > MIME-Version: 1.0 > Content-Type: multipart/alternative; >boundary="=_Part_0_1227069312.1254943735894" > Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > > --=_Part_0_1227069312.1254943735894 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 7bit > > naftuli gugenheim; 617 6st > ; M: 7325342893; From : ; To : 39 hearth ct; > Request URL: [TODO] > --=_Part_0_1227069312.1254943735894-- > > > On Mon, Oct 12, 2009 at 6:15 PM, David Pollak > wrote: > > Please send some test email to an account you can access using > Thunderbird. > > Open the message and look at the message source. Is it really plain > text? > > What do the headers say it is? > > > > On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim > > > wrote: > >> > >> Hi. I'm sending an email using PlainMailBodyType that contains a URL. > >> Normally when a BlackBerry receives a plain text email it > >> automatically hyperlinks URLS and potential phone numbers. For some > >> reason this email is not being hyperlinked on the BlackBerry. Is it > >> possible that it's somehow not purely plain text? How would I solve > >> this? I don't want to send HTML messages because some recipients may > >> not be able to view it. > >> Thanks. > >> > >> > > > > > > > > -- > > 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 > > > > > > > > > > > -- 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 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: Extend the tables that like the migration in the Rails ?
Yeah, I see it now, and it works ! 1): ### I add a column in the User model, like this class User extends MegaProtoUser[User] { ... /* add column dos4 */ object dos4 extends MappedBoolean(this) ... } result: INFO - ALTER TABLE users ADD COLUMN do4 SMALLINT ### 2): ### I remove a column in the User model, like this class User extends MegaProtoUser[User] { ... /* remove column dos4 */ /* object dos4 extends MappedBoolean(this) */ ... } result: Don't remove the cloumn dos4. ### 3): How can i remove the column in the liftweb (change the structure of the table), just like the execute raw SQL statement. execute("SELECT * from users") # Rails code in Migration On Oct 13, 10:16 am, David Pollak wrote: > Just add the column to the User model. Schemifier will add the column to > the RDBMS. > > > > On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv wrote: > > > Yeah, I have add this code in the Boot.scala. > > > ### > >Schemifier.schemify(true, Log.infoF _, User) > > ### > > > But i want to add a column into the user table (extend the user table) > > now, and how can i achieve this purpose. > > > Ex: > > ### Original user table like this > > idemail first_name last_name > > 1 a...@b.comhelloworld > > ### But the user table need to extend (add a column, like this) > > idemail first_name last_name sex > > 1 a...@b.comhelloworld 0 > > ### > > > I add this code in the User model and restart the server, the table > > don't change anything ! > > ### > >Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala > > > class User extends MegaProtoUser[User] { > > ... > > object desc extends MappedPoliteString(this, 128) > > ... > > } > > ### > > > How the liftweb can do this ? > > > Cheers, > > Neil > > > On Oct 12, 6:10 pm, Peter Robinett wrote: > > > Is User added to Schemefier in Boot.scala? It should look something > > > like: Schemifier.schemify(true, Log.infoF _, User) > > > > Peter Robinett > > > > On Oct 12, 11:22 am, "Neil.Lv" wrote: > > > > > Hi all, > > > > >I don't know whether there is a mechanism that like the migration > > > > of the Rails in the Liftweb, and how can we > > > > > extend the table, such as add a column "desc " into a table users (OR > > > > user ?). > > > > >I add this code in the User model and restart the server, the table > > > > don't change anything ! > > > >### > > > >class User extends MegaProtoUser[User] { > > > > ... > > > > object desc extends MappedPoliteString(this, 128) > > > > ... > > > >} > > > >### > > > > > How can i do if i want to achieve this purpose ? > > > > > Thanks for any suggestion! > > > > > Cheers, > > > > Neil > > -- > 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 liftweb@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: Extend the tables that like the migration in the Rails ?
Just add the column to the User model. Schemifier will add the column to the RDBMS. On Mon, Oct 12, 2009 at 6:20 PM, Neil.Lv wrote: > > Yeah, I have add this code in the Boot.scala. > > ### >Schemifier.schemify(true, Log.infoF _, User) > ### > > But i want to add a column into the user table (extend the user table) > now, and how can i achieve this purpose. > > Ex: > ### Original user table like this > idemail first_name last_name > 1 a...@b.comhelloworld > ### But the user table need to extend (add a column, like this) > idemail first_name last_name sex > 1 a...@b.comhelloworld 0 > ### > > I add this code in the User model and restart the server, the table > don't change anything ! > ### >Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala > > class User extends MegaProtoUser[User] { > ... > object desc extends MappedPoliteString(this, 128) > ... > } > ### > > How the liftweb can do this ? > > > Cheers, > Neil > > > On Oct 12, 6:10 pm, Peter Robinett wrote: > > Is User added to Schemefier in Boot.scala? It should look something > > like: Schemifier.schemify(true, Log.infoF _, User) > > > > Peter Robinett > > > > On Oct 12, 11:22 am, "Neil.Lv" wrote: > > > > > Hi all, > > > > >I don't know whether there is a mechanism that like the migration > > > of the Rails in the Liftweb, and how can we > > > > > extend the table, such as add a column "desc " into a table users (OR > > > user ?). > > > > >I add this code in the User model and restart the server, the table > > > don't change anything ! > > >### > > >class User extends MegaProtoUser[User] { > > > ... > > > object desc extends MappedPoliteString(this, 128) > > > ... > > >} > > >### > > > > > How can i do if i want to achieve this purpose ? > > > > > Thanks for any suggestion! > > > > > Cheers, > > > Neil > > > > -- 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 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: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?
Yeah, it works now ! Thanks very much ! Cheers, Neil On Oct 13, 1:32 am, David Pollak wrote: > You have to include -DremoteRepositories=http://scala-tools.org/repo-* > snapshots* in the command line. > > > > On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv wrote: > > > I used this command to create my project and was successfully. > > > mvn archetype:generate -U -DarchetypeGroupId=net.liftweb - > > DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6 > > -DgroupId=demo.helloworld -DartifactId=helloworld2 - > > Dversion=1.1-M6 > > > If i use the 1.1-SNAPSHOT, some errors occur. > > > [INFO] The desired archetype does not exist (net.liftweb:lift- > > archetype-blank:1.1-SNAPSHOT) > > > Cheers, > > Neil > > > On Oct 9, 9:32 pm, David Pollak wrote: > > > I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at > > 7). > > > There's rarely breakage on SNAPSHOT. > > > > On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv wrote: > > > > > Hi liftweb, > > > > > Is anyone has used lift to create a stable and large site ? If i > > > > want to create this site which version that is suit, > > > > > lift1.0 or higher version. > > > > > If someone knows the site that develop by lift or has used lift to > > > > create a site, could you give me some ideas? > > > > > Thanks very much! > > > > > Cheers, > > > > Neil > > > > -- > > > 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 > > -- > 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 liftweb@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: Extend the tables that like the migration in the Rails ?
Yeah, I have add this code in the Boot.scala. ### Schemifier.schemify(true, Log.infoF _, User) ### But i want to add a column into the user table (extend the user table) now, and how can i achieve this purpose. Ex: ### Original user table like this idemail first_name last_name 1 a...@b.comhelloworld ### But the user table need to extend (add a column, like this) idemail first_name last_name sex 1 a...@b.comhelloworld 0 ### I add this code in the User model and restart the server, the table don't change anything ! ### Schemifier.schemify(true, Log.infoF _, User) # in the Boot.scala class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How the liftweb can do this ? Cheers, Neil On Oct 12, 6:10 pm, Peter Robinett wrote: > Is User added to Schemefier in Boot.scala? It should look something > like: Schemifier.schemify(true, Log.infoF _, User) > > Peter Robinett > > On Oct 12, 11:22 am, "Neil.Lv" wrote: > > > Hi all, > > >I don't know whether there is a mechanism that like the migration > > of the Rails in the Liftweb, and how can we > > > extend the table, such as add a column "desc " into a table users (OR > > user ?). > > >I add this code in the User model and restart the server, the table > > don't change anything ! > >### > >class User extends MegaProtoUser[User] { > > ... > > object desc extends MappedPoliteString(this, 128) > > ... > >} > >### > > > How can i do if i want to achieve this purpose ? > > > 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 liftweb@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: URL in PlainMailBodyType to BlackBerry
That looks to be plain text, although it's using multipart encoding where it probably does not need to. -Ross On Oct 12, 2009, at 9:17 PM, Naftoli Gugenheim wrote: > > Does this help? It's from GMail / Show original > > Delivered-To: naftoli...@gmail.com > Received: by 10.86.30.11 with SMTP id d11cs12302fgd; >Wed, 7 Oct 2009 12:28:57 -0700 (PDT) > Received: by 10.229.19.149 with SMTP id a21mr391667qcb. > 29.1254943736364; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Return-Path: > Received: from lrbcol (174-143-236-122.static.slicehost.net > [174.143.236.122]) >by mx.google.com with ESMTP id 1si71430296yxe. > 11.2009.10.07.12.28.55; >Wed, 07 Oct 2009 12:28:56 -0700 (PDT) > Received-SPF: neutral (google.com: 174.143.236.122 is neither > permitted nor denied by best guess record for domain of > yehu...@lrbcol.org) client-ip=174.143.236.122; > Authentication-Results: mx.google.com; spf=neutral (google.com: > 174.143.236.122 is neither permitted nor denied by best guess record > for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org > Received: from lrbcol (localhost [127.0.0.1]) > by lrbcol (Postfix) with ESMTP id CDB51A0055 > for ; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > From: yehu...@lrbcol.org > To: naftoli...@gmail.com > Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol> > Subject: Detail of Transportation #843 > MIME-Version: 1.0 > Content-Type: multipart/alternative; > boundary="=_Part_0_1227069312.1254943735894" > Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) > > --=_Part_0_1227069312.1254943735894 > Content-Type: text/plain; charset=UTF-8 > Content-Transfer-Encoding: 7bit > > naftuli gugenheim; 617 6st > ; M: 7325342893; From : ; To : 39 hearth ct; > Request URL: [TODO] > --=_Part_0_1227069312.1254943735894-- > > > On Mon, Oct 12, 2009 at 6:15 PM, David Pollak > wrote: >> Please send some test email to an account you can access using >> Thunderbird. >> Open the message and look at the message source. Is it really >> plain text? >> What do the headers say it is? >> >> On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim > > >> wrote: >>> >>> Hi. I'm sending an email using PlainMailBodyType that contains a >>> URL. >>> Normally when a BlackBerry receives a plain text email it >>> automatically hyperlinks URLS and potential phone numbers. For some >>> reason this email is not being hyperlinked on the BlackBerry. Is it >>> possible that it's somehow not purely plain text? How would I solve >>> this? I don't want to send HTML messages because some recipients may >>> not be able to view it. >>> Thanks. >>> >>> >> >> >> >> -- >> 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Before I go barking up the wrong tree, by JWS you mean Java Web Start or Java Web Services? >> I must confess, Im running a fairly specific config. >> Essentially I >> have an executable WAR file that has a jetty launcher class >> inside - >> its pretty sweet, and it works from the command line doing: >> >> java -jar myapp.war >> >> However, when I go to implement it with JWS I get this error. -Ross On Oct 12, 2009, at 9:05 PM, Timothy Perrett wrote: > > I cant really post the war im afraid, as its calling all manner of > services on some internal systems. > > The strange thing with all of this is that it works when you execute: > > java -jar myapp.war > > Here's what you should need to just make a similar demo project: > > https://gist.github.com/3ad5cd900bbe0012b147 - the first being the > maven build and the 2nd being the launcher im using for jetty. > > Cheers, Tim > > On Oct 13, 1:47 am, Ross Mellgren wrote: >> Especially since it prints out the valid class name in the log >> message. >> >> I suppose you can't post the WAR somewhere so I can have a poke? >> >> -Ross >> >> On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: >> >> >> >> >> >>> Nope, I've certainly only got 1 javax.servlet in my CP. >> >>> Looking at the Jetty source: >> >>> http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/ >>> FilterHolder >> >>> It appears its using isAssignableFrom - the question is, that how >>> can >>> it find the filter class usually, and be fine, but not when its >>> being >>> called by the wrapper? >> >>> Cheers, Tim >> >>> On Oct 13, 1:26 am, Timothy Perrett wrote: Hey Ross, >> Thanks for the response - I'll just take a look; im using maven- shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. >> Cheers, Tim >> On Oct 13, 1:22 am, Ross Mellgren wrote: >> > My top-of-the-brain guess would be that you have two servlet > JARs in > your classpath, and jetty is using one but your WAR is using > another. >> > Really weird error though, for sure. >> > -Ross >> > On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: >> >> Hey guys, >> >> I've been having a crazy problem all day (and now into the >> extremely >> late night). Basically, Jetty is throwing this error: >> >> jvm 1| java.lang.IllegalStateException: class >> net.liftweb.http.LiftFilter is not a javax.servlet.Filter >> jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart >> (FilterHolder.java:88) >> jvm 1| at org.mortbay.component.AbstractLifeCycle.start >> (AbstractLifeCycle.java:50) >> jvm 1| at >> org.mortbay.jetty.servlet.ServletHandler.initialize >> (ServletHandler.java:662) >> jvm 1| at org.mortbay.jetty.servlet.Context.startContext >> (Context.java:140) >> jvm 1| at >> org.mortbay.jetty.webapp.WebAppContext.startContext >> (WebAppContext.java:1250) >> jvm 1| at >> org.mortbay.jetty.handler.ContextHandler.doStart >> (ContextHandler.java:517) >> jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart >> (WebAppContext.java:467) >> jvm 1| at org.mortbay.component.AbstractLifeCycle.start >> (AbstractLifeCycle.java:50) >> jvm 1| at >> org.mortbay.jetty.handler.HandlerWrapper.doStart >> (HandlerWrapper.java:130) >> jvm 1| at org.mortbay.jetty.Server.doStart(Server.java: >> 224) >> jvm 1| at org.mortbay.component.AbstractLifeCycle.start >> (AbstractLifeCycle.java:50) >> jvm 1| at Launcher.main(Launcher.java:53) >> jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0 >> (Native >> Method) >> jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke >> (Unknown >> Source) >> jvm 1| at >> sun.reflect.DelegatingMethodAccessorImpl.invoke >> (Unknown Source) >> jvm 1| at java.lang.reflect.Method.invoke(Unknown >> Source) >> jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run >> (WrapperJarApp.java:358) >> jvm 1| at java.lang.Thread.run(Unknown Source) >> jvm 1| 2009-10-13 01:10:12.781::INFO: Started >> selectchannelconnec...@0.0.0.0:9090 >> >> I must confess, Im running a fairly specific config. >> Essentially I >> have an executable WAR file that has a jetty launcher class >> inside - >> its pretty sweet, and it works from the command line doing: >> >> java -jar myapp.war >> >> However, when I go to implement it with JWS I get this error. >> >> Any help would be really, really welcome >> >> Cheers, Tim > > --~--~-~--~~~---~--~~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send
[Lift] Re: URL in PlainMailBodyType to BlackBerry
Does this help? It's from GMail / Show original Delivered-To: naftoli...@gmail.com Received: by 10.86.30.11 with SMTP id d11cs12302fgd; Wed, 7 Oct 2009 12:28:57 -0700 (PDT) Received: by 10.229.19.149 with SMTP id a21mr391667qcb.29.1254943736364; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Return-Path: Received: from lrbcol (174-143-236-122.static.slicehost.net [174.143.236.122]) by mx.google.com with ESMTP id 1si71430296yxe.11.2009.10.07.12.28.55; Wed, 07 Oct 2009 12:28:56 -0700 (PDT) Received-SPF: neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) client-ip=174.143.236.122; Authentication-Results: mx.google.com; spf=neutral (google.com: 174.143.236.122 is neither permitted nor denied by best guess record for domain of yehu...@lrbcol.org) smtp.mail=yehu...@lrbcol.org Received: from lrbcol (localhost [127.0.0.1]) by lrbcol (Postfix) with ESMTP id CDB51A0055 for ; Wed, 7 Oct 2009 15:28:56 -0400 (EDT) From: yehu...@lrbcol.org To: naftoli...@gmail.com Message-ID: <2107786874.01254943736214.javamail.r...@lrbcol> Subject: Detail of Transportation #843 MIME-Version: 1.0 Content-Type: multipart/alternative; boundary="=_Part_0_1227069312.1254943735894" Date: Wed, 7 Oct 2009 15:28:56 -0400 (EDT) --=_Part_0_1227069312.1254943735894 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit naftuli gugenheim; 617 6st ; M: 7325342893; From : ; To : 39 hearth ct; Request URL: [TODO] --=_Part_0_1227069312.1254943735894-- On Mon, Oct 12, 2009 at 6:15 PM, David Pollak wrote: > Please send some test email to an account you can access using Thunderbird. > Open the message and look at the message source. Is it really plain text? > What do the headers say it is? > > On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim > wrote: >> >> Hi. I'm sending an email using PlainMailBodyType that contains a URL. >> Normally when a BlackBerry receives a plain text email it >> automatically hyperlinks URLS and potential phone numbers. For some >> reason this email is not being hyperlinked on the BlackBerry. Is it >> possible that it's somehow not purely plain text? How would I solve >> this? I don't want to send HTML messages because some recipients may >> not be able to view it. >> Thanks. >> >> > > > > -- > 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Wouldn't know, but have you tried looking up the source code that throws the exception? Is Jetty trying to do anything unusual? On Mon, Oct 12, 2009 at 8:14 PM, Timothy Perrett wrote: > > Hey guys, > > I've been having a crazy problem all day (and now into the extremely > late night). Basically, Jetty is throwing this error: > > jvm 1 | java.lang.IllegalStateException: class > net.liftweb.http.LiftFilter is not a javax.servlet.Filter > jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart > (FilterHolder.java:88) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize > (ServletHandler.java:662) > jvm 1 | at org.mortbay.jetty.servlet.Context.startContext > (Context.java:140) > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext > (WebAppContext.java:1250) > jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart > (ContextHandler.java:517) > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart > (WebAppContext.java:467) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart > (HandlerWrapper.java:130) > jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at Launcher.main(Launcher.java:53) > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > Source) > jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke > (Unknown Source) > jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) > jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run > (WrapperJarApp.java:358) > jvm 1 | at java.lang.Thread.run(Unknown Source) > jvm 1 | 2009-10-13 01:10:12.781::INFO: Started > selectchannelconnec...@0.0.0.0:9090 > > I must confess, Im running a fairly specific config. Essentially I > have an executable WAR file that has a jetty launcher class inside - > its pretty sweet, and it works from the command line doing: > > java -jar myapp.war > > However, when I go to implement it with JWS I get this error. > > Any help would be really, really welcome > > Cheers, Tim > > > > --~--~-~--~~~---~--~~ 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
I cant really post the war im afraid, as its calling all manner of services on some internal systems. The strange thing with all of this is that it works when you execute: java -jar myapp.war Here's what you should need to just make a similar demo project: https://gist.github.com/3ad5cd900bbe0012b147 - the first being the maven build and the 2nd being the launcher im using for jetty. Cheers, Tim On Oct 13, 1:47 am, Ross Mellgren wrote: > Especially since it prints out the valid class name in the log message. > > I suppose you can't post the WAR somewhere so I can have a poke? > > -Ross > > On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: > > > > > > > Nope, I've certainly only got 1 javax.servlet in my CP. > > > Looking at the Jetty source: > > >http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder > > > It appears its using isAssignableFrom - the question is, that how can > > it find the filter class usually, and be fine, but not when its being > > called by the wrapper? > > > Cheers, Tim > > > On Oct 13, 1:26 am, Timothy Perrett wrote: > >> Hey Ross, > > >> Thanks for the response - I'll just take a look; im using maven-shade > >> but thought id been careful about making sure i only had one > >> javax.servlet I'll just double check now. > > >> Cheers, Tim > > >> On Oct 13, 1:22 am, Ross Mellgren wrote: > > >>> My top-of-the-brain guess would be that you have two servlet JARs in > >>> your classpath, and jetty is using one but your WAR is using > >>> another. > > >>> Really weird error though, for sure. > > >>> -Ross > > >>> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: > > Hey guys, > > I've been having a crazy problem all day (and now into the > extremely > late night). Basically, Jetty is throwing this error: > > jvm 1 | java.lang.IllegalStateException: class > net.liftweb.http.LiftFilter is not a javax.servlet.Filter > jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart > (FilterHolder.java:88) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at > org.mortbay.jetty.servlet.ServletHandler.initialize > (ServletHandler.java:662) > jvm 1 | at org.mortbay.jetty.servlet.Context.startContext > (Context.java:140) > jvm 1 | at > org.mortbay.jetty.webapp.WebAppContext.startContext > (WebAppContext.java:1250) > jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart > (ContextHandler.java:517) > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart > (WebAppContext.java:467) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart > (HandlerWrapper.java:130) > jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java: > 224) > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1 | at Launcher.main(Launcher.java:53) > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0 > (Native > Method) > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke > (Unknown > Source) > jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke > (Unknown Source) > jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) > jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run > (WrapperJarApp.java:358) > jvm 1 | at java.lang.Thread.run(Unknown Source) > jvm 1 | 2009-10-13 01:10:12.781::INFO: Started > selectchannelconnec...@0.0.0.0:9090 > > I must confess, Im running a fairly specific config. Essentially I > have an executable WAR file that has a jetty launcher class > inside - > its pretty sweet, and it works from the command line doing: > > java -jar myapp.war > > However, when I go to implement it with JWS I get this error. > > Any help would be really, really welcome > > Cheers, Tim --~--~-~--~~~---~--~~ 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Especially since it prints out the valid class name in the log message. I suppose you can't post the WAR somewhere so I can have a poke? -Ross On Oct 12, 2009, at 8:41 PM, Timothy Perrett wrote: > > Nope, I've certainly only got 1 javax.servlet in my CP. > > Looking at the Jetty source: > > http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86 > > It appears its using isAssignableFrom - the question is, that how can > it find the filter class usually, and be fine, but not when its being > called by the wrapper? > > Cheers, Tim > > On Oct 13, 1:26 am, Timothy Perrett wrote: >> Hey Ross, >> >> Thanks for the response - I'll just take a look; im using maven-shade >> but thought id been careful about making sure i only had one >> javax.servlet I'll just double check now. >> >> Cheers, Tim >> >> On Oct 13, 1:22 am, Ross Mellgren wrote: >> >> >> >>> My top-of-the-brain guess would be that you have two servlet JARs in >>> your classpath, and jetty is using one but your WAR is using >>> another. >> >>> Really weird error though, for sure. >> >>> -Ross >> >>> On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: >> Hey guys, >> I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: >> jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java: 224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 >> I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: >> java -jar myapp.war >> However, when I go to implement it with JWS I get this error. >> Any help would be really, really welcome >> Cheers, Tim > > --~--~-~--~~~---~--~~ 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Nope, I've certainly only got 1 javax.servlet in my CP. Looking at the Jetty source: http://jetty.mortbay.com/xref/org/mortbay/jetty/servlet/FilterHolder.html#86 It appears its using isAssignableFrom - the question is, that how can it find the filter class usually, and be fine, but not when its being called by the wrapper? Cheers, Tim On Oct 13, 1:26 am, Timothy Perrett wrote: > Hey Ross, > > Thanks for the response - I'll just take a look; im using maven-shade > but thought id been careful about making sure i only had one > javax.servlet I'll just double check now. > > Cheers, Tim > > On Oct 13, 1:22 am, Ross Mellgren wrote: > > > > > My top-of-the-brain guess would be that you have two servlet JARs in > > your classpath, and jetty is using one but your WAR is using another. > > > Really weird error though, for sure. > > > -Ross > > > On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: > > > > Hey guys, > > > > I've been having a crazy problem all day (and now into the extremely > > > late night). Basically, Jetty is throwing this error: > > > > jvm 1 | java.lang.IllegalStateException: class > > > net.liftweb.http.LiftFilter is not a javax.servlet.Filter > > > jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart > > > (FilterHolder.java:88) > > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > > (AbstractLifeCycle.java:50) > > > jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize > > > (ServletHandler.java:662) > > > jvm 1 | at org.mortbay.jetty.servlet.Context.startContext > > > (Context.java:140) > > > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext > > > (WebAppContext.java:1250) > > > jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart > > > (ContextHandler.java:517) > > > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart > > > (WebAppContext.java:467) > > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > > (AbstractLifeCycle.java:50) > > > jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart > > > (HandlerWrapper.java:130) > > > jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) > > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > > (AbstractLifeCycle.java:50) > > > jvm 1 | at Launcher.main(Launcher.java:53) > > > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > > Method) > > > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > > > Source) > > > jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke > > > (Unknown Source) > > > jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) > > > jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run > > > (WrapperJarApp.java:358) > > > jvm 1 | at java.lang.Thread.run(Unknown Source) > > > jvm 1 | 2009-10-13 01:10:12.781::INFO: Started > > > selectchannelconnec...@0.0.0.0:9090 > > > > I must confess, Im running a fairly specific config. Essentially I > > > have an executable WAR file that has a jetty launcher class inside - > > > its pretty sweet, and it works from the command line doing: > > > > java -jar myapp.war > > > > However, when I go to implement it with JWS I get this error. > > > > Any help would be really, really welcome > > > > Cheers, Tim --~--~-~--~~~---~--~~ 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 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] "Unused binding values for "
I recently started getting this warning my log, after I started using more than one bind position in my default template. Looking at the code, it looks like it will (erroneously?) warn any time there is more than one bind point and you are in dev mode: 20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values for : content 20:18:53,987 [http-0.0.0.0-28543-1] WARN lift - Unused binding values for : title This is the branch of BindHelpers that looks to be causing it: case Some(nodes) => { if (Props.devMode && vals.size > 1) { warnOnUnused() } nodes } There is another place where warnOnUnused is used in the same one, but it gives an adjacent log message I'm not seeing. This is the definition of warnOnUnused: def warnOnUnused() = Log.warn("Unused binding values for : " + vals.keySet.filter(key => key != ns.text).mkString(", ")) This seems incorrect -- any time it hits a lift:bind node, I think it'll log this warning for every other bound value that isn't the current one. Should I file a ticket? Is this an actual warning and I'm misreading? The template is working correctly. -Ross --~--~-~--~~~---~--~~ 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Hey Ross, Thanks for the response - I'll just take a look; im using maven-shade but thought id been careful about making sure i only had one javax.servlet I'll just double check now. Cheers, Tim On Oct 13, 1:22 am, Ross Mellgren wrote: > My top-of-the-brain guess would be that you have two servlet JARs in > your classpath, and jetty is using one but your WAR is using another. > > Really weird error though, for sure. > > -Ross > > On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: > > > > > > > Hey guys, > > > I've been having a crazy problem all day (and now into the extremely > > late night). Basically, Jetty is throwing this error: > > > jvm 1 | java.lang.IllegalStateException: class > > net.liftweb.http.LiftFilter is not a javax.servlet.Filter > > jvm 1 | at org.mortbay.jetty.servlet.FilterHolder.doStart > > (FilterHolder.java:88) > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > (AbstractLifeCycle.java:50) > > jvm 1 | at org.mortbay.jetty.servlet.ServletHandler.initialize > > (ServletHandler.java:662) > > jvm 1 | at org.mortbay.jetty.servlet.Context.startContext > > (Context.java:140) > > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.startContext > > (WebAppContext.java:1250) > > jvm 1 | at org.mortbay.jetty.handler.ContextHandler.doStart > > (ContextHandler.java:517) > > jvm 1 | at org.mortbay.jetty.webapp.WebAppContext.doStart > > (WebAppContext.java:467) > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > (AbstractLifeCycle.java:50) > > jvm 1 | at org.mortbay.jetty.handler.HandlerWrapper.doStart > > (HandlerWrapper.java:130) > > jvm 1 | at org.mortbay.jetty.Server.doStart(Server.java:224) > > jvm 1 | at org.mortbay.component.AbstractLifeCycle.start > > (AbstractLifeCycle.java:50) > > jvm 1 | at Launcher.main(Launcher.java:53) > > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > > Method) > > jvm 1 | at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > > Source) > > jvm 1 | at sun.reflect.DelegatingMethodAccessorImpl.invoke > > (Unknown Source) > > jvm 1 | at java.lang.reflect.Method.invoke(Unknown Source) > > jvm 1 | at org.tanukisoftware.wrapper.WrapperJarApp.run > > (WrapperJarApp.java:358) > > jvm 1 | at java.lang.Thread.run(Unknown Source) > > jvm 1 | 2009-10-13 01:10:12.781::INFO: Started > > selectchannelconnec...@0.0.0.0:9090 > > > I must confess, Im running a fairly specific config. Essentially I > > have an executable WAR file that has a jetty launcher class inside - > > its pretty sweet, and it works from the command line doing: > > > java -jar myapp.war > > > However, when I go to implement it with JWS I get this error. > > > Any help would be really, really welcome > > > Cheers, Tim --~--~-~--~~~---~--~~ 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 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: net.liftweb.http.LiftFilter is not a javax.servlet.Filter
My top-of-the-brain guess would be that you have two servlet JARs in your classpath, and jetty is using one but your WAR is using another. Really weird error though, for sure. -Ross On Oct 12, 2009, at 8:14 PM, Timothy Perrett wrote: > > Hey guys, > > I've been having a crazy problem all day (and now into the extremely > late night). Basically, Jetty is throwing this error: > > jvm 1| java.lang.IllegalStateException: class > net.liftweb.http.LiftFilter is not a javax.servlet.Filter > jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart > (FilterHolder.java:88) > jvm 1| at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize > (ServletHandler.java:662) > jvm 1| at org.mortbay.jetty.servlet.Context.startContext > (Context.java:140) > jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext > (WebAppContext.java:1250) > jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart > (ContextHandler.java:517) > jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart > (WebAppContext.java:467) > jvm 1| at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart > (HandlerWrapper.java:130) > jvm 1| at org.mortbay.jetty.Server.doStart(Server.java:224) > jvm 1| at org.mortbay.component.AbstractLifeCycle.start > (AbstractLifeCycle.java:50) > jvm 1| at Launcher.main(Launcher.java:53) > jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native > Method) > jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown > Source) > jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke > (Unknown Source) > jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) > jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run > (WrapperJarApp.java:358) > jvm 1| at java.lang.Thread.run(Unknown Source) > jvm 1| 2009-10-13 01:10:12.781::INFO: Started > selectchannelconnec...@0.0.0.0:9090 > > I must confess, Im running a fairly specific config. Essentially I > have an executable WAR file that has a jetty launcher class inside - > its pretty sweet, and it works from the command line doing: > > java -jar myapp.war > > However, when I go to implement it with JWS I get this error. > > Any help would be really, really welcome > > Cheers, Tim > > > --~--~-~--~~~---~--~~ 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 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] net.liftweb.http.LiftFilter is not a javax.servlet.Filter
Hey guys, I've been having a crazy problem all day (and now into the extremely late night). Basically, Jetty is throwing this error: jvm 1| java.lang.IllegalStateException: class net.liftweb.http.LiftFilter is not a javax.servlet.Filter jvm 1| at org.mortbay.jetty.servlet.FilterHolder.doStart (FilterHolder.java:88) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.servlet.ServletHandler.initialize (ServletHandler.java:662) jvm 1| at org.mortbay.jetty.servlet.Context.startContext (Context.java:140) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.startContext (WebAppContext.java:1250) jvm 1| at org.mortbay.jetty.handler.ContextHandler.doStart (ContextHandler.java:517) jvm 1| at org.mortbay.jetty.webapp.WebAppContext.doStart (WebAppContext.java:467) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at org.mortbay.jetty.handler.HandlerWrapper.doStart (HandlerWrapper.java:130) jvm 1| at org.mortbay.jetty.Server.doStart(Server.java:224) jvm 1| at org.mortbay.component.AbstractLifeCycle.start (AbstractLifeCycle.java:50) jvm 1| at Launcher.main(Launcher.java:53) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) jvm 1| at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) jvm 1| at sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source) jvm 1| at java.lang.reflect.Method.invoke(Unknown Source) jvm 1| at org.tanukisoftware.wrapper.WrapperJarApp.run (WrapperJarApp.java:358) jvm 1| at java.lang.Thread.run(Unknown Source) jvm 1| 2009-10-13 01:10:12.781::INFO: Started selectchannelconnec...@0.0.0.0:9090 I must confess, Im running a fairly specific config. Essentially I have an executable WAR file that has a jetty launcher class inside - its pretty sweet, and it works from the command line doing: java -jar myapp.war However, when I go to implement it with JWS I get this error. Any help would be really, really welcome Cheers, Tim --~--~-~--~~~---~--~~ 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 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: URL in PlainMailBodyType to BlackBerry
Please send some test email to an account you can access using Thunderbird. Open the message and look at the message source. Is it really plain text? What do the headers say it is? On Mon, Oct 12, 2009 at 1:11 PM, Naftoli Gugenheim wrote: > > Hi. I'm sending an email using PlainMailBodyType that contains a URL. > Normally when a BlackBerry receives a plain text email it > automatically hyperlinks URLS and potential phone numbers. For some > reason this email is not being hyperlinked on the BlackBerry. Is it > possible that it's somehow not purely plain text? How would I solve > this? I don't want to send HTML messages because some recipients may > not be able to view it. > Thanks. > > > > -- 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 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: Debug cookies
I don't know if it increases compile time but I avoid wildcard imports like the plague because I think they're perhaps the most confusing thing reading scala code. Thinking to yourself that two types don't match, but you can't be sure if you're reading it wrong or if there's an implicit in scope, with explicit imports at least you can look at the import list to see if there are any applicable implicits in scope, whereas with wildcard imports you're left searching through a perhaps large list of perhaps large modules looking for implicits. And then there's the somewhat simpler pain of "where the heck is this name imported from" even where it's explicit. -Ross On Oct 12, 2009, at 4:27 PM, Naftoli Gugenheim wrote: > > Thanks. I actually looked at the source code of HTTPCookie but I > didn't put two and two together reading my code in Boot. > I think the reason I did the math manually is because I was trying to > minimize the number of imports. Do you think a lot of wildcard imports > increase compile time, or not significantly (for clean build of what's > currently 17 files / 70+ kb)? > > > On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren > wrote: >> >> setMaxAge is unfortunately named -- looking at the code it appears >> that HTTPCookies are actually immutable, and what setMaxAge does is >> returns you a new cookie with the new settings. >> >> Try: >> val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, >> user.uniqueId.is >> ).setMaxAge(2 weeks) >> S.addCookie(cookie) >> >> (I took the liberty of rewriting your manual date arithmetic to >> TimeSpan syntax) >> >> -Ross >> >> On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: >> >>> >>> Firecookie (a Firebug extension) says the cookie's Expires is >>> Session. >>> When I log in Firebug's Net panel shows the following response >>> header >>> (I changed the cookie name): >>> Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN >>> >>> My code in Boot looks like this: >>> User.autologinFunc = Full(()=>{ >>> for(uid <- S.findCookie(cookieName); >>> userId <- uid.value; >>> user <- User.find(net.liftweb.mapper.By(User.uniqueId, >>> userId)) >>> ) { >>> User.logUserIn(user) >>> S.redirectTo(User.homePage) >>> } >>> } >>> ) >>> User.onLogIn ::= { >>> case user => >>> val cookie = net.liftweb.http.provider.HTTPCookie >>> (cookieName, >>> user.uniqueId.is) >>> cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds >>> S.addCookie(cookie) >>> } >>> User.onLogOut ::= { >>> case _ => >>> S.deleteCookie(cookieName) >>> } >>> What am I doing wrong? Why is the max-age not getting set? >>> >>> >>> On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren >>> wrote: I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: > I'm writing an app in Lift that uses cookies to remember the > user as > logged in. When I run it from my local computer, and when I run it > from the server and view it from my local computer, it works fine. > But from my client's computer it doesn't work (it seems to expire > with the session). How can I debug this? > Thanks. > > >> > >>> >> >> >>> >> > > > --~--~-~--~~~---~--~~ 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 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: Debug cookies
Thanks. I actually looked at the source code of HTTPCookie but I didn't put two and two together reading my code in Boot. I think the reason I did the math manually is because I was trying to minimize the number of imports. Do you think a lot of wildcard imports increase compile time, or not significantly (for clean build of what's currently 17 files / 70+ kb)? On Mon, Oct 12, 2009 at 4:11 PM, Ross Mellgren wrote: > > setMaxAge is unfortunately named -- looking at the code it appears > that HTTPCookies are actually immutable, and what setMaxAge does is > returns you a new cookie with the new settings. > > Try: > val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is > ).setMaxAge(2 weeks) > S.addCookie(cookie) > > (I took the liberty of rewriting your manual date arithmetic to > TimeSpan syntax) > > -Ross > > On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: > >> >> Firecookie (a Firebug extension) says the cookie's Expires is Session. >> When I log in Firebug's Net panel shows the following response header >> (I changed the cookie name): >> Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN >> >> My code in Boot looks like this: >> User.autologinFunc = Full(()=>{ >> for(uid <- S.findCookie(cookieName); >> userId <- uid.value; >> user <- User.find(net.liftweb.mapper.By(User.uniqueId, >> userId)) >> ) { >> User.logUserIn(user) >> S.redirectTo(User.homePage) >> } >> } >> ) >> User.onLogIn ::= { >> case user => >> val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, >> user.uniqueId.is) >> cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds >> S.addCookie(cookie) >> } >> User.onLogOut ::= { >> case _ => >> S.deleteCookie(cookieName) >> } >> What am I doing wrong? Why is the max-age not getting set? >> >> >> On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren >> wrote: >>> >>> I usually use FireBug or Safari Web Inspector to look at the Set- >>> Cookie / Cookie headers going back and forth, or use the browser's >>> built in cookie index (usually buried in preferences). You could also >>> use something like Wireshark or tcpdump to watch the headers go by if >>> you're using a browser that doesn't have debugging extensions. >>> >>> -Ross >>> >>> On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: >>> I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this? Thanks. > >>> >>> >> >> > > > > > > --~--~-~--~~~---~--~~ 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 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: Debug cookies
setMaxAge is unfortunately named -- looking at the code it appears that HTTPCookies are actually immutable, and what setMaxAge does is returns you a new cookie with the new settings. Try: val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is ).setMaxAge(2 weeks) S.addCookie(cookie) (I took the liberty of rewriting your manual date arithmetic to TimeSpan syntax) -Ross On Oct 12, 2009, at 4:06 PM, Naftoli Gugenheim wrote: > > Firecookie (a Firebug extension) says the cookie's Expires is Session. > When I log in Firebug's Net panel shows the following response header > (I changed the cookie name): > Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN > > My code in Boot looks like this: > User.autologinFunc = Full(()=>{ > for(uid <- S.findCookie(cookieName); > userId <- uid.value; > user <- User.find(net.liftweb.mapper.By(User.uniqueId, > userId)) > ) { > User.logUserIn(user) > S.redirectTo(User.homePage) > } > } > ) > User.onLogIn ::= { > case user => > val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, > user.uniqueId.is) > cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds > S.addCookie(cookie) > } > User.onLogOut ::= { > case _ => > S.deleteCookie(cookieName) > } > What am I doing wrong? Why is the max-age not getting set? > > > On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren > wrote: >> >> I usually use FireBug or Safari Web Inspector to look at the Set- >> Cookie / Cookie headers going back and forth, or use the browser's >> built in cookie index (usually buried in preferences). You could also >> use something like Wireshark or tcpdump to watch the headers go by if >> you're using a browser that doesn't have debugging extensions. >> >> -Ross >> >> On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: >> >>> I'm writing an app in Lift that uses cookies to remember the user as >>> logged in. When I run it from my local computer, and when I run it >>> from the server and view it from my local computer, it works fine. >>> But from my client's computer it doesn't work (it seems to expire >>> with the session). How can I debug this? >>> Thanks. >>> >>> >> >> >>> > > > --~--~-~--~~~---~--~~ 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 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] URL in PlainMailBodyType to BlackBerry
Hi. I'm sending an email using PlainMailBodyType that contains a URL. Normally when a BlackBerry receives a plain text email it automatically hyperlinks URLS and potential phone numbers. For some reason this email is not being hyperlinked on the BlackBerry. Is it possible that it's somehow not purely plain text? How would I solve this? I don't want to send HTML messages because some recipients may not be able to view it. Thanks. --~--~-~--~~~---~--~~ 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 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: Debug cookies
Firecookie (a Firebug extension) says the cookie's Expires is Session. When I log in Firebug's Net panel shows the following response header (I changed the cookie name): Set-Cookie mycookiename=Z0GZIXFRBQMVTOITYSICI1XZN23ROYLN My code in Boot looks like this: User.autologinFunc = Full(()=>{ for(uid <- S.findCookie(cookieName); userId <- uid.value; user <- User.find(net.liftweb.mapper.By(User.uniqueId, userId)) ) { User.logUserIn(user) S.redirectTo(User.homePage) } } ) User.onLogIn ::= { case user => val cookie = net.liftweb.http.provider.HTTPCookie(cookieName, user.uniqueId.is) cookie.setMaxAge(2 * 7 * 24 * 60 * 60) // 2 weeks in seconds S.addCookie(cookie) } User.onLogOut ::= { case _ => S.deleteCookie(cookieName) } What am I doing wrong? Why is the max-age not getting set? On Mon, Oct 12, 2009 at 3:37 PM, Ross Mellgren wrote: > > I usually use FireBug or Safari Web Inspector to look at the Set- > Cookie / Cookie headers going back and forth, or use the browser's > built in cookie index (usually buried in preferences). You could also > use something like Wireshark or tcpdump to watch the headers go by if > you're using a browser that doesn't have debugging extensions. > > -Ross > > On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: > > > I'm writing an app in Lift that uses cookies to remember the user as > > logged in. When I run it from my local computer, and when I run it > > from the server and view it from my local computer, it works fine. > > But from my client's computer it doesn't work (it seems to expire > > with the session). How can I debug this? > > Thanks. > > > > > > > > > > > --~--~-~--~~~---~--~~ 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 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: Debug cookies
I usually use FireBug or Safari Web Inspector to look at the Set- Cookie / Cookie headers going back and forth, or use the browser's built in cookie index (usually buried in preferences). You could also use something like Wireshark or tcpdump to watch the headers go by if you're using a browser that doesn't have debugging extensions. -Ross On Oct 12, 2009, at 3:15 PM, Naftoli Gugenheim wrote: > I'm writing an app in Lift that uses cookies to remember the user as > logged in. When I run it from my local computer, and when I run it > from the server and view it from my local computer, it works fine. > But from my client's computer it doesn't work (it seems to expire > with the session). How can I debug this? > Thanks. > > > > --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
Very interesting reading, Naftoli! Thanks alot for such extensive explainations. I'm going to read your message again and again until i understand it all :) On 13 окт, 02:09, Naftoli Gugenheim wrote: > 1. Personally I would not take the approach of creating a totally new ORM > with a completely new paradigm just to eliminate the object syntax. > > The first step, as with anything in life, is to define our goals. What > exactly is it about the object syntax that's problematic? Is overridability > a problem? Is reflection evil? Let's make a list of our objectives over > here. > In any case, I would take the following approach. > Currently, the way Mapper works is as follows. Every Mapper instance > delegates database actions to its MetaMapper instance, which, upon > initialization, builds the information about its fields using reflection, > including the list of fields and their names. > Three reasons for the object approach were mentioned in this thread. > > 1. To allow access to members. It was mentioned that this is now possible > with anonymous classes (val x = new Y { ... } ). What was not mentioned but > I read elsewhere IIRC is that the latter is implemented by scalac via > reflection. Not that that's the end of the world, especially as we're > relying on reflection as it is. Also, at least the argument remains--allow > one to choose whichever syntax one desires. On the other hand, if Mapper > would not use reflection, objects, being lazy, would not be known about > until initialized, thus requiring the user to manually reference them. > 2. To disambiguate members that reference or return other fields. > However, this argument assumes that the list of fields is built via > reflection; maybe it should not be. > 3. To allow the field names to become available via reflection. I don't > there's any way around this other than a compiler plugin (or maybe > scala.reflect.Code?) So my suggestion would require passing the field name > to a constructor. On the other hand, as I mentioned in a previous post and > will explain better below, passing "this" to the constructor can be > eliminated. > > So the first reason basically says, "since people may need to use 'object,' > and objects are lazy and we won't necessarily know about them, we had better > use reflection." On the other hand, if we use vals most of the time, the > constructor itself can inform the MetaMapper of its existence, and if > someone wants to use 'object' or 'lazy val' then they will be required to > initialize it before using it with Mapper. > The second reason is eliminated if we don't use reflection. > The third reason remains valid but the question is how important it is, at > the expense of preventing subclasses from overriding fields. > > If it is acceptable to eliminate the "this" parameter and instead require a > field name parameter, then it would seem possible to use a val based system > instead of an object + reflection system. > > Here is how it would work. > class Field(name: String)(implicit meta: MetaModel) { > meta.register(this)} > > class Model { > implicit def meta = getSingleton} > > > class MyModel extends Model { > val field1 = new Field("firstname") // meta gets passed automatically > val fieldRef = field1 // doesn't cause duplication because fields are > registered on instantiation} > > val fieldX = new Field("lastname") // compiler error because no implicit > MetaModel in scope > val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad > idea > > Two points. > > 1. The concept of the meta being passed implicitly could probably be > implemented into the current system. The only thing it has to do with this > discussion is that if you would have to pass 'this' and the field name it > would be really verbose, so I'm just pointing out that we could have a > non-reflection-based system with about the same verbosity that we use now, > although we could make the current system less verbose too. > 2. On the surface it would seem impossible to implement this in Mapper, > because by not using reflection there's no way to get all the object > members > since objects are lazy. However since the reflection system only picks up > objects and not vals, one could solve this as follows. As long as the same > field cannot be registered twice, i.e., registration of a field skips it if > it's already registered, there's no problem with allowing both methods to > exist side by side. Let MappedField or some class or trait high in the > hierarchy call a register method on the MetaMapper upon its initialization. > This will register all val fields, as well as any object fields initialized > early. Then, when the MetaMapper goes through its reflection process, any > previously register fields will be skipped. > > However a basic problem with my approach may be the following. Say we have > instances a an
[Lift] Debug cookies
I'm writing an app in Lift that uses cookies to remember the user as logged in. When I run it from my local computer, and when I run it from the server and view it from my local computer, it works fine. But from my client's computer it doesn't work (it seems to expire with the session). How can I debug this?Thanks. --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
1. Personally I would not take the approach of creating a totally new ORM with a completely new paradigm just to eliminate the object syntax. The first step, as with anything in life, is to define our goals. What exactly is it about the object syntax that's problematic? Is overridability a problem? Is reflection evil? Let's make a list of our objectives over here. In any case, I would take the following approach. Currently, the way Mapper works is as follows. Every Mapper instance delegates database actions to its MetaMapper instance, which, upon initialization, builds the information about its fields using reflection, including the list of fields and their names. Three reasons for the object approach were mentioned in this thread. 1. To allow access to members. It was mentioned that this is now possible with anonymous classes (val x = new Y { ... } ). What was not mentioned but I read elsewhere IIRC is that the latter is implemented by scalac via reflection. Not that that's the end of the world, especially as we're relying on reflection as it is. Also, at least the argument remains--allow one to choose whichever syntax one desires. On the other hand, if Mapper would not use reflection, objects, being lazy, would not be known about until initialized, thus requiring the user to manually reference them. 2. To disambiguate members that reference or return other fields. However, this argument assumes that the list of fields is built via reflection; maybe it should not be. 3. To allow the field names to become available via reflection. I don't there's any way around this other than a compiler plugin (or maybe scala.reflect.Code?) So my suggestion would require passing the field name to a constructor. On the other hand, as I mentioned in a previous post and will explain better below, passing "this" to the constructor can be eliminated. So the first reason basically says, "since people may need to use 'object,' and objects are lazy and we won't necessarily know about them, we had better use reflection." On the other hand, if we use vals most of the time, the constructor itself can inform the MetaMapper of its existence, and if someone wants to use 'object' or 'lazy val' then they will be required to initialize it before using it with Mapper. The second reason is eliminated if we don't use reflection. The third reason remains valid but the question is how important it is, at the expense of preventing subclasses from overriding fields. If it is acceptable to eliminate the "this" parameter and instead require a field name parameter, then it would seem possible to use a val based system instead of an object + reflection system. Here is how it would work. class Field(name: String)(implicit meta: MetaModel) { meta.register(this) } class Model { implicit def meta = getSingleton } class MyModel extends Model { val field1 = new Field("firstname") // meta gets passed automatically val fieldRef = field1 // doesn't cause duplication because fields are registered on instantiation } val fieldX = new Field("lastname") // compiler error because no implicit MetaModel in scope val fieldY = new Field("xxx")(MyModelMeta) // works, but obviously a bad idea Two points. 1. The concept of the meta being passed implicitly could probably be implemented into the current system. The only thing it has to do with this discussion is that if you would have to pass 'this' and the field name it would be really verbose, so I'm just pointing out that we could have a non-reflection-based system with about the same verbosity that we use now, although we could make the current system less verbose too. 2. On the surface it would seem impossible to implement this in Mapper, because by not using reflection there's no way to get all the object members since objects are lazy. However since the reflection system only picks up objects and not vals, one could solve this as follows. As long as the same field cannot be registered twice, i.e., registration of a field skips it if it's already registered, there's no problem with allowing both methods to exist side by side. Let MappedField or some class or trait high in the hierarchy call a register method on the MetaMapper upon its initialization. This will register all val fields, as well as any object fields initialized early. Then, when the MetaMapper goes through its reflection process, any previously register fields will be skipped. However a basic problem with my approach may be the following. Say we have instances a and b of model C, if a field is a val, not a new class, what prevents that field from being registered twice? In other words, how can fields in multiple instances of a given model be recognized as being the same field? One answer, though maybe not the best, is through the field's field name. 2009/10/12 Naftoli Gugenheim > So Model represents the database connec
[Lift] Re: Why fields are declared as 'object' with Mapper/Record?
Thanks again for your answers, David. I've got your point and it all looks much more clear to me now. On 13 окт, 01:19, David Pollak wrote: > On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. wrote: > > > Well i don't think its a lot of complexity. > > You asked for feedback, I gave you my opinion. > > > > > Yes its 4 declarations instead of 1 for each field. But 3 of those are > > generatable by IDE same way as any Java IDE generates setters and > > getters. > > And this is a failure on its face. Anything that requires an IDE to > generate code represents a failure. It represents failure because the code > is (1) much less maintainable, (2) depends on IDE vendors to support it, and > (3) is harder for non-IDE users (me included... emacs is my tool for a lot > of my Lift-based development). > > > All the rest is spring-style instantiations/injections. And > > usage is even simplier and readable (i mean syntax > > record.field=value). The field list method can be implemented via > > reflection to reduce amount of code required from users. > > Calculating what fields are to be included in the List is what originally > led to using object. > > > > > Anyway thanks for your feedback, David, i really appreciate it. I'll > > try to see if i can integrate my model with Lift and implement it for > > Google Datastore. Then i'll report back. I understand that i still > > need to do more work before any serious conclusions can be made. > > While I appreciate your effort, it is is not in line with the goals of Lift. > The default is not to keep the meaning with the bytes (having _name implies > to me "don't use this, use name instead"). The complexity is significant... > so significant that it requires IDE support to use effectively. The problem > that it addresses is the "overriding definitions of fields in subclasses" > issue which is important, but in this case the cure is much, much worse than > disease. > > 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 liftweb@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: Why fields are declared as 'object' with Mapper/Record?
On 13 окт, 01:00, Naftoli Gugenheim wrote: > So Model represents the database connection? I tried to keep my thoughts at quite high abstraction level for the sake of flexibility. And i don't have rich enough experience in implementing object-database mapping to give you good full answer - also that's what i meant when i said 'i still need to do more work before any serious conclusions can be made' in reply to David. But... I thought of a following possible usage: a Model implementation gets instantiated and reads existing database tables structure, it also receives a set of 'register' events from Record prototypes. Then it can decide if the database structure is consistent with registered Records and maybe even alter it. The code might look like: val m = new DatabaseModel(params).validate Lift looks very good for quick start but i'm not sure about its strength in evolving/changing projects and overall code reusability. That's why i asked about extensibility/customizability and that's what i'm trying to express with my code. --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
On Mon, Oct 12, 2009 at 10:38 AM, Oleg G. wrote: > > Well i don't think its a lot of complexity. > You asked for feedback, I gave you my opinion. > > Yes its 4 declarations instead of 1 for each field. But 3 of those are > generatable by IDE same way as any Java IDE generates setters and > getters. And this is a failure on its face. Anything that requires an IDE to generate code represents a failure. It represents failure because the code is (1) much less maintainable, (2) depends on IDE vendors to support it, and (3) is harder for non-IDE users (me included... emacs is my tool for a lot of my Lift-based development). > All the rest is spring-style instantiations/injections. And > usage is even simplier and readable (i mean syntax > record.field=value). The field list method can be implemented via > reflection to reduce amount of code required from users. > Calculating what fields are to be included in the List is what originally led to using object. > > Anyway thanks for your feedback, David, i really appreciate it. I'll > try to see if i can integrate my model with Lift and implement it for > Google Datastore. Then i'll report back. I understand that i still > need to do more work before any serious conclusions can be made. > While I appreciate your effort, it is is not in line with the goals of Lift. The default is not to keep the meaning with the bytes (having _name implies to me "don't use this, use name instead"). The complexity is significant... so significant that it requires IDE support to use effectively. The problem that it addresses is the "overriding definitions of fields in subclasses" issue which is important, but in this case the cure is much, much worse than disease. 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 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: MappedLong & null values
Not offhand, maybe some discussion will generate an good plan.The easiest and worst way would be to have a marker trait or a flag, and test in each MappedXXX. Obviously not a good idea. What may work is to delegate all the code that makes decisions which depend on optionality to a method in MappedField, and override that method in a trait that can be mixed in. I haven't actually looked at the relevant Mapper code; just saying a thought. On Mon, Oct 12, 2009 at 1:31 PM, David Pollak wrote: > If you've got a good way to do this, feel encouraged to develop it on a > branch. > > > On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim > wrote: > >> It would be nice if there could be a generalized way of specifying >> optionality for fields.(The first though question is whether the default >> behavior is consistent -- do all field types equate NULL with their >> default?) >> I pasted the names of all the field types (by listing all Mapped*.class >> files in target/classes/net/liftweb/mapper). For which of them does it make >> sense to have optionality, which of them do, and would it make sense to have >> a trait to mix in or some other consistent way to allow nullablility? >> >> >> MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, >> MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, >> MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, >> MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, >> MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, >> MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, >> MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId >> >> >> On Wed, Oct 7, 2009 at 4:36 PM, David Pollak < >> feeder.of.the.be...@gmail.com> wrote: >> >>> >>> >>> On Wed, Oct 7, 2009 at 12:55 PM, harryh wrote: >>> I have a long field in my database that I want to have a unique index (enforced by the database). Sometimes this field will be empty, in which case I'd like to set it to NULL. 0 won't work because that won't work with the unique index. MappedLong appears to be converting null to 0 internally. Additionally overriding defaultValue for the field and returning null does not appear to work. Is this by design? >>> >>> >>> Yes. >>> >>> Is it possible that I am misunderstanding something here? >>> >>> I think you're looking for a MappedOptLong which will treat None (or >>> Empty) as NULL and Some(Long) as the value. >>> >>> Please open a ticket and I'll add the code. >>> -harryh >>> >>> >>> -- >>> 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 >>> >>> >>> >>> >> >> >> > > > -- > 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 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: Why fields are declared as 'object' with Mapper/Record?
So Model represents the database connection? 2009/10/12 Oleg G. > > On 13 окт, 00:08, naf g wrote: > > Why do you have two classes, Model and Record? What are they and why are > they interdependent? > I thought about Model being a place for metainformation (like database > structure, options/properties etc), or maybe it can be described as > global context for Record-related activity. They are dependant to > allow Field operations to reach the context. > > > > > --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
On 13 окт, 00:08, naf g wrote: > Why do you have two classes, Model and Record? What are they and why are they > interdependent? I thought about Model being a place for metainformation (like database structure, options/properties etc), or maybe it can be described as global context for Record-related activity. They are dependant to allow Field operations to reach the context. --~--~-~--~~~---~--~~ 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 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: Lift UVP's
Tim, Two things I stress about Lift that tends to resonate well: - Lift abstracts away the HTTP request/response cycle. You as the developer do not need to worry about setting up something to receive form posts, ajax events, or to do the whole Comet stuff. It's plumbing and plumbing should work. Every developer should not have to be a plumber... developers should focus on the sinks, toilets and bathtubs (the stuff the users see), not the pipes in the wall. - (nearly) everything in Lift is represented in Scala. This means that we don't have 17 different dialects of annotations to worry about. This means that developers can express JavaScript in Scala. This means things are generally more type-safe and developers don't have to context switch as much. My 2 cents (or points). Thanks, David On Mon, Oct 12, 2009 at 10:21 AM, Timothy Perrett wrote: > > Yeah it should pretty much be solid Java devs and architects :-) > > Cheers, Tim > > On 12 Oct 2009, at 18:04, marius d. wrote: > > > > > Is the audience mostly Java based or from different other fields > > including FP? > > > > I would insist in how Lift leverages functional programming idioms > > offered by Scala. Personally I believe this gives Lift a pretty unique > > position. > > > > Br's, > > Marius > > > > On Oct 12, 12:37 am, Timothy Perrett wrote: > >> Guys, > >> > >> In about a month im speaking at a fairly sizeable event in Belgium > >> and > >> wanted to ask a few questions about what users see at Lift's unique > >> value proposition. I did a talk about lift at a bar-camp recently and > >> whilst they were fairly well received, I think i still assumed too > >> much information. To that end, I thought by focusing on some of lifts > >> super cool features in a broad way I would then aim to give people a > >> better overview / warm fuzzy feeling about Lift in the allotted hour. > >> > >> So what are Lift's UVP's? My list looks a little like: > >> > >> - OOTB Comet (probably what draws most people to lift) > >> - View first / code free templating > >> - Utilisation of existing JEE infrastructure (WARs, JPA etc) > >> - Non-perscriptive but highly configurable framework > >> > >> Then we also have some stuff that we inherit from scala: > >> > >> - traits > >> - concise but type safe code > >> - etc etc etc > >> > >> What do people think? I have an hour to make people feel good about > >> Lift and hopefully give them enough of a taste to go away and try it > >> later - am i missing anything blindingly obvious? This isnt a hard > >> and > >> fast outline of my preso, just trying to kick around some thoughts > >> and > >> ideas :-) > >> > >> Cheers, Tim > > > > > > > > > > -- 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 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: Why fields are declared as 'object' with Mapper/Record?
Well i don't think its a lot of complexity. Yes its 4 declarations instead of 1 for each field. But 3 of those are generatable by IDE same way as any Java IDE generates setters and getters. All the rest is spring-style instantiations/injections. And usage is even simplier and readable (i mean syntax record.field=value). The field list method can be implemented via reflection to reduce amount of code required from users. Anyway thanks for your feedback, David, i really appreciate it. I'll try to see if i can integrate my model with Lift and implement it for Google Datastore. Then i'll report back. I understand that i still need to do more work before any serious conclusions can be made. --~--~-~--~~~---~--~~ 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 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: MappedLong & null values
If you've got a good way to do this, feel encouraged to develop it on a branch. On Sun, Oct 11, 2009 at 8:22 PM, Naftoli Gugenheim wrote: > It would be nice if there could be a generalized way of specifying > optionality for fields.(The first though question is whether the default > behavior is consistent -- do all field types equate NULL with their > default?) > I pasted the names of all the field types (by listing all Mapped*.class > files in target/classes/net/liftweb/mapper). For which of them does it make > sense to have optionality, which of them do, and would it make sense to have > a trait to mix in or some other consistent way to allow nullablility? > > > MappedBinary, MappedBirthYear, MappedBoolean, MappedCountry, MappedDate, > MappedDateTime, MappedDecimal, MappedDouble, MappedEmail, MappedEnum, > MappedEnumList, MappedFakeClob, MappedForeignKey, MappedGender, MappedInt, > MappedIntIndex, MappedLocale, MappedLong, MappedLongForeignKey, > MappedLongIndex, MappedPassword, MappedPoliteString, MappedPostalCode, > MappedString, MappedStringForeignKey, MappedStringIndex, MappedText, > MappedTextarea, MappedTime, MappedTimeZone, MappedUniqueId > > > On Wed, Oct 7, 2009 at 4:36 PM, David Pollak < > feeder.of.the.be...@gmail.com> wrote: > >> >> >> On Wed, Oct 7, 2009 at 12:55 PM, harryh wrote: >> >>> >>> I have a long field in my database that I want to have a unique index >>> (enforced by the database). Sometimes this field will be empty, in >>> which case I'd like to set it to NULL. 0 won't work because that >>> won't work with the unique index. >>> >>> MappedLong appears to be converting null to 0 internally. >>> Additionally overriding defaultValue for the field and returning null >>> does not appear to work. >>> >>> Is this by design? >> >> >> Yes. >> >> >>> Is it possible that I am misunderstanding something >>> here? >>> >> >> I think you're looking for a MappedOptLong which will treat None (or >> Empty) as NULL and Some(Long) as the value. >> >> Please open a ticket and I'll add the code. >> >>> >>> -harryh >>> >>> >>> >> >> >> -- >> 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 >> >> >> >> > > > > -- 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 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: Use lift1.0 or 1.1 or 1.x to create a stable and large site(project) ?
You have to include -DremoteRepositories=http://scala-tools.org/repo-* snapshots* in the command line. On Sun, Oct 11, 2009 at 7:41 PM, Neil.Lv wrote: > > I used this command to create my project and was successfully. > > mvn archetype:generate -U -DarchetypeGroupId=net.liftweb - > DarchetypeArtifactId=lift-archetype-blank -DarchetypeVersion=1.1-M6 > -DgroupId=demo.helloworld -DartifactId=helloworld2 - > Dversion=1.1-M6 > > > If i use the 1.1-SNAPSHOT, some errors occur. > > [INFO] The desired archetype does not exist (net.liftweb:lift- > archetype-blank:1.1-SNAPSHOT) > > > > Cheers, > Neil > > On Oct 9, 9:32 pm, David Pollak wrote: > > I use Lift 1.1-SNAPSHOT on all the sites I work on (that's currently at > 7). > > There's rarely breakage on SNAPSHOT. > > > > > > > > On Fri, Oct 9, 2009 at 3:01 AM, Neil.Lv wrote: > > > > > Hi liftweb, > > > > > Is anyone has used lift to create a stable and large site ? If i > > > want to create this site which version that is suit, > > > > > lift1.0 or higher version. > > > > > If someone knows the site that develop by lift or has used lift to > > > create a site, could you give me some ideas? > > > > > Thanks very much! > > > > > Cheers, > > > Neil > > > > -- > > 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 > > > > -- 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 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: Dynamic SiteMap
To address the specific issue of CondHidden/IfHidden, if a Loc (menu location) fails the If() or Unless() test, it will not be displayed/rendered/visible to the user. So, there's no need for a IfHidden or a CondHidden LocParam. More broadly, SiteMap represents all the pages in your site and the visibility/access rules for each of those pages. All the pages for which you have templates should also have a SiteMap entry (a Loc). The Loc will contain a set (0 or more) of If/Unless rules governing access. If there are no If/Unless rules, then the page will be accessible no matter the state of the application. If you want pages that are accessible in a particular application state (Anyone logged in, Teacher logged in, Student logged in, Teach with root privileges logged in, etc.), you define a method that calculates a Boolean based on the current application state: (assuming that User.currentUser returns a Box[User] and the User class has isTeacher, isStudent, isRootTeacher methods) def anyoneLoggedIn = User.currentUser.isDefined def teacherLoggedIn = User.currentUser.map(_.isTeacher) openOr false def studentLoggedIn = User.currentUser.map(_.isStudent) openOr false def rootTeacherLoggedIn = User.currentUser.map(_.isRootTeacher) openOr false def studentOrRootTeacher = studentLoggedIn || rootTeacherLoggedIn Now, you can define some conditionals: lazy val ifLoggedIn = If(anyoneLoggedIn _, S ?? "You must be logged in to view this page") lazy val ifTeacher = If(teacherLoggedIn _, S ?? "You must be a teacher to view this page") lazy val ifStudentOrRootTeacher = if(studentOrRootTeacher _, S ?? "You must be a student to view this page") And you can create locations (Loc) in your SiteMap that contain the ifLoggedIn, etc. LocParams. What you see is that how you calculate a given permission is not important to the If/Unless LocParam. It's all about the current app state and nothing more. Pages guarded by If/Unless will not load if the required conditions are not met nor will they be displayed in the menu hierarchy. Does this resolve the questions/issues raised in this thread? Thanks, David On Mon, Oct 12, 2009 at 12:05 AM, marius d. wrote: > > First of all I'm not reinventing anything. I don't think that If > LocParam semantic is giving you the hidden functionality as well. User > type 2 should not even see the menus for user type 1, not only to not > be able to access those locations. > > The way I see it this functionality should be totally irrespective of > Mappers or any persistence store. It is just a matter of how you > implement the function passed to If and other LocParams. > > You can also implement your own Loc and override the calcHidden > function and you can decide what to render there. I still think that a > conditional hidden LocParam would be helpful. > > Br's, > Marius. > > On Oct 12, 2:27 am, Dave wrote: > > Marius- > > > > Thanks for your help on this. I guess I'm not sure how this differs > > from the current conception of the If LocParam. As I understand it, it > > is checked when determining what to display on the Menu as well as > > when a User attempts to access the page (or its subdirectory if > > passing a pair). If this is true, then I think there is no need to > > reinvent the wheel per se. Assuming I'm right and we can use If's to > > accomplish this functionality, I can follow up this query with an > > implementation based question. Specifically, since both of my user > > types extend MegaProtoUser, I end up with loggedIn_? function that > > tells if some user is logged in, but is confused about which. So if a > > user of type 1 logs in and I call UserType2.loggedIn_?, it will also > > return true. Is there a way to check for this in If statements? Or > > is it necessary to override loggedIn_? (which I've been trying, but > > has been pretty slow going so far). > > > > Thanks > > Dave > > > > On Oct 11, 12:36 pm, "marius d." wrote: > > > > > Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test > > > would be used in conjunction with CondHidden to also provide > > > accessibility constraints. > > > > > Here is the definition > > > > > case object CondHidden(test: () => Boolean) extends LocParam > > > > > but we also have case class If(test: () => Boolean, failMsg: FailMsg) > > > extends LocParam > > > > > So the test function is the same which means that you essentially > > > implement one function and provide it to both LocParam's. We could > > > probably combine the two LocParams in a: > > > > > IfHidden(test: () => Boolean, failMsg: FailMsg) // if you have a > > > better name please let me know :) > > > > > The test function would be called in two cases: > > > > > 1. When rendering the Menu to see is the Menu should be rendered or > > > not > > > 2. When try to access the location to as a security check > > > > > I could probably add it this week and point you to my branch to check > > > it out. If I runt into something weird that I cannot
[Lift] Re: Lift UVP's
Yeah it should pretty much be solid Java devs and architects :-) Cheers, Tim On 12 Oct 2009, at 18:04, marius d. wrote: > > Is the audience mostly Java based or from different other fields > including FP? > > I would insist in how Lift leverages functional programming idioms > offered by Scala. Personally I believe this gives Lift a pretty unique > position. > > Br's, > Marius > > On Oct 12, 12:37 am, Timothy Perrett wrote: >> Guys, >> >> In about a month im speaking at a fairly sizeable event in Belgium >> and >> wanted to ask a few questions about what users see at Lift's unique >> value proposition. I did a talk about lift at a bar-camp recently and >> whilst they were fairly well received, I think i still assumed too >> much information. To that end, I thought by focusing on some of lifts >> super cool features in a broad way I would then aim to give people a >> better overview / warm fuzzy feeling about Lift in the allotted hour. >> >> So what are Lift's UVP's? My list looks a little like: >> >> - OOTB Comet (probably what draws most people to lift) >> - View first / code free templating >> - Utilisation of existing JEE infrastructure (WARs, JPA etc) >> - Non-perscriptive but highly configurable framework >> >> Then we also have some stuff that we inherit from scala: >> >> - traits >> - concise but type safe code >> - etc etc etc >> >> What do people think? I have an hour to make people feel good about >> Lift and hopefully give them enough of a taste to go away and try it >> later - am i missing anything blindingly obvious? This isnt a hard >> and >> fast outline of my preso, just trying to kick around some thoughts >> and >> ideas :-) >> >> Cheers, Tim > > > --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
Why do you have two classes, Model and Record? What are they and why are they interdependent? - David Pollak wrote: On Mon, Oct 12, 2009 at 1:55 AM, Oleg G. wrote: > > I spent some time and came up with this code: > http://github.com/ojow/Random-code/blob/master/Test.scala > I think it should allow all the needed stuff, it keeps meaning with > the bytes and also: > * its reusable and extensible in many directions > * looks like generated .class files don't have any additional hidden > fields or heavy methods, so it's technically light-weight > * it doesn't need reflection (not sure if its good or bad :) > > Would be nice to hear some feedback on that. > > P.S. I'm still a newbie in Scala so please excuse me if this code is > worthless and if i'm just wasting your time. > Oleg, I wrote the existing Mapper code when I was 2-3 weeks into Scala. It's very Javaesque. Your code is interesting, but the complexity of what the developer has to type would make it pretty difficult to use in practice. Sorry. David > > On Oct 7, 3:54 am, David Pollak wrote: > > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. wrote: > > > > > As i said before i'm not sure that i'm getting the whole picture and > > > maybe my initial question is incorrect in its root. Still: > > > > > Suppose i have a Person class declared with Mapper/Record and i want > > > to reuse the class and all the code associated with it in another > > > module/project. My first thought was to extend the Person class and > > > override some of its fields by mixing in some additional traits (see > > > my simplified example code in the initial message). But i noticed that > > > inner objects cannot be overriden (its not obvious for me but i can > > > get it if i dig it). > > > > You can't do this. There was a Scala language feature that would have > > allowed this (overriding an object) but it hasn't made the cut for 2.7 or > > 2.8. > > > > > > > > > So how do i reuse Mapper/Record based code if i need to extend/ > > > customize the data structures? > > > > Unfortunately, you can't. Once you've got a field defined, there's > nothing > > you can do to change it in a subclass. > > > > > > > > > > > > > > > > > On Oct 6, 11:59 pm, David Pollak > > > wrote: > > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. wrote: > > > > > > > Thanks for all the answers and especially for David's > clarification. > > > > > It would be really cool to upgrade the 'keeping the meaning with > the > > > > > bytes' thing ( > http://blog.lostlake.org/index.php?/archives/19-Keeping- > > > > > the-meaning-with-the-bytes.html) to allow extension/customization. > > > > > > What kind of extensions/customizations? > > > > > > MappedXXX can all be subclassed, extended and customized. > > > > -- > > 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 > > > > -- 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 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: Lift UVP's
Is the audience mostly Java based or from different other fields including FP? I would insist in how Lift leverages functional programming idioms offered by Scala. Personally I believe this gives Lift a pretty unique position. Br's, Marius On Oct 12, 12:37 am, Timothy Perrett wrote: > Guys, > > In about a month im speaking at a fairly sizeable event in Belgium and > wanted to ask a few questions about what users see at Lift's unique > value proposition. I did a talk about lift at a bar-camp recently and > whilst they were fairly well received, I think i still assumed too > much information. To that end, I thought by focusing on some of lifts > super cool features in a broad way I would then aim to give people a > better overview / warm fuzzy feeling about Lift in the allotted hour. > > So what are Lift's UVP's? My list looks a little like: > > - OOTB Comet (probably what draws most people to lift) > - View first / code free templating > - Utilisation of existing JEE infrastructure (WARs, JPA etc) > - Non-perscriptive but highly configurable framework > > Then we also have some stuff that we inherit from scala: > > - traits > - concise but type safe code > - etc etc etc > > What do people think? I have an hour to make people feel good about > Lift and hopefully give them enough of a taste to go away and try it > later - am i missing anything blindingly obvious? This isnt a hard and > fast outline of my preso, just trying to kick around some thoughts and > ideas :-) > > Cheers, Tim --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
On Mon, Oct 12, 2009 at 1:55 AM, Oleg G. wrote: > > I spent some time and came up with this code: > http://github.com/ojow/Random-code/blob/master/Test.scala > I think it should allow all the needed stuff, it keeps meaning with > the bytes and also: > * its reusable and extensible in many directions > * looks like generated .class files don't have any additional hidden > fields or heavy methods, so it's technically light-weight > * it doesn't need reflection (not sure if its good or bad :) > > Would be nice to hear some feedback on that. > > P.S. I'm still a newbie in Scala so please excuse me if this code is > worthless and if i'm just wasting your time. > Oleg, I wrote the existing Mapper code when I was 2-3 weeks into Scala. It's very Javaesque. Your code is interesting, but the complexity of what the developer has to type would make it pretty difficult to use in practice. Sorry. David > > On Oct 7, 3:54 am, David Pollak wrote: > > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. wrote: > > > > > As i said before i'm not sure that i'm getting the whole picture and > > > maybe my initial question is incorrect in its root. Still: > > > > > Suppose i have a Person class declared with Mapper/Record and i want > > > to reuse the class and all the code associated with it in another > > > module/project. My first thought was to extend the Person class and > > > override some of its fields by mixing in some additional traits (see > > > my simplified example code in the initial message). But i noticed that > > > inner objects cannot be overriden (its not obvious for me but i can > > > get it if i dig it). > > > > You can't do this. There was a Scala language feature that would have > > allowed this (overriding an object) but it hasn't made the cut for 2.7 or > > 2.8. > > > > > > > > > So how do i reuse Mapper/Record based code if i need to extend/ > > > customize the data structures? > > > > Unfortunately, you can't. Once you've got a field defined, there's > nothing > > you can do to change it in a subclass. > > > > > > > > > > > > > > > > > On Oct 6, 11:59 pm, David Pollak > > > wrote: > > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. wrote: > > > > > > > Thanks for all the answers and especially for David's > clarification. > > > > > It would be really cool to upgrade the 'keeping the meaning with > the > > > > > bytes' thing ( > http://blog.lostlake.org/index.php?/archives/19-Keeping- > > > > > the-meaning-with-the-bytes.html) to allow extension/customization. > > > > > > What kind of extensions/customizations? > > > > > > MappedXXX can all be subclassed, extended and customized. > > > > -- > > 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 > > > > -- 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 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: Sharing a RequestVar Across CometActors
On Mon, Oct 12, 2009 at 7:04 AM, Peter Robinett wrote: > > Hi all, > > I have a question about whether it's possible to access RequestVars in > CometActors (specifically, to access them in localSetup). I believe it > is, based upon a recent thread about sharing them among snippets[1] > and an older thread about Actors accessing S[2]. But first, some > background, as I may be going around this in totally the wrong way and > would appreciate your thoughts. > > I am making a dashboard to display a bunch of data that will be coming > in (near) real-time and I want to use Comet to make sure the user > always sees the most update-to-date information in their dashboard. I > have a variety of different aggregate values to display that fall into > several categories together, so I can group the calculations together. > I think this sectioning will prove useful in the future, as I can > imagine wanting to display some but not all of these sections on > another page. > > Because the CometActors all will need to know the dashboard to which > they belong, my thought was to share this Mapper instance via a > RequestVar. > You can create messages to be sent to a CometActor upon setup: for { session <- S.session } session.setupComet("Dashboard", Empty, ABunchOfInfo(sessionInfo)) When the "Dashboard" comet actor is created, it will be sent the ABunchOfInfo message. In this way you can send current request state info to a CometActor. Does this help? > > I call my snippet like so: > > > > The snippet defines a RequestVar called myDashboard and then returns a > NodeSeq: > > > > // > > > > > While I can get this all to compile, myDashboard is empty in the > CometActors. I understand that CometActors basically exist outside of > the normal request cycle, so would this be the reason why my > RequestVar is always empty? I was hoping that it would still be in the > request cycle when localSetup is called, but I can see why that would > be unrealistic. > > I just tried using SessionVar instead of a RequestVar and this works. > However, I'm worried about having to be more careful about emptying > the SessionVar if requesting a different dashboard than if I would if > I were using a RequestVar. Is this an unrealistic fear? > > What do you think is the best way to proceed? > > Thanks for your help, > Peter Robinett > > [1]: > http://groups.google.com/group/liftweb/browse_thread/thread/5cf4ae2ecd0d56b5 > [2]: > http://groups.google.com/group/liftweb/browse_thread/thread/274cfc9d25a1ab0b > > > -- 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 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: beyond widgets: plugins (modular architecture)
On Mon, Oct 12, 2009 at 1:31 AM, opyate wrote: > > Hey guys, > > I had a look at this thread: > > > http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gst&q=plugin+modular#f6719565f6550513 > > I'm about to attempt the same. The base app (BASE) will provide a > basic workflow system based on roles. The rest of the functionality > will be implemented via plugins (PLUGIN). > > I do have a couple of issues, though: > > 1) Is this correct?: PLUGIN is NOT necessarily generated with lift- > archetype-blank but follows a similar folder structure: > src/main/scala/bootstrap/liftweb > src/main/scala/my/app/plugins/pluginX > src/main/webapp (no WEB-INF, and referenced in BASE's classpath) > Correct. A plugin is something that does not have a Boot.scala file. It is something that is in a separate JAR file. > > 2) BASE needs to "load" PLUGIN by calling > LiftRules.addToPackages("my.app.plugins.pluginX") > ...but PLUGIN also needs to know about BASE's roles to utilise the > workflow functionality. > Will this cause a circular dependency issue? > No. I initialize my non-core app stuff by calling a method on an object in my external dependency. I pass whatever dependent information is needed to the plugin. > > A solution to this may be factoring out the roles model component and > workflow interface into a separate dependency: > BASE ref {PLUGIN,ROLE} > PLUGIN ref ROLE > > For the time being I'll put all my functionality into a monolithic > app, but it would be cool to hear everyone's thoughts on this, and > hopefully make it more modular soon. > > Thanks, > Juan > > > > -- 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 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: Lift UVP's
I would put more emphasis on the benefits of Scala than you implied, mentioning also the value of first class functions and partial functions and how lift ues them. (And maybe that Map is a partial function which can be used e.g. in a DispatchSnippet/StatefulSnippet.) - Viktor Klang wrote: Also, a demo of working with maven + jRebel to get easy to test development On Mon, Oct 12, 2009 at 12:27 PM, Timothy Perrett wrote: > > Agreed - the security stuff is pretty cool and adds value for sure. > Thanks for the thoughts - I need to get writing! > > Cheers, Tim > > On 12 Oct 2009, at 10:14, Viktor Klang wrote: > > > :-) > > Perhaps something like > > > > The Lift philosophy > > View-first - Pros and Cons > > Comet OOTB (the 30 line chat example is always a crowd-pleaser) > > The security model (random uids, SiteMap, Http Auth etc) > > Performance and scaling > > > > That's what's on top of my head... > > > > > -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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 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] Complex primary key
Hello guys, How can I create a mapper with two or more fields as primary key? For instance if we have a table of "people" with a Long primary key called ID generated by "IdPK", and also we have a table of addresses also with a Long primary key called ID generated by "IdPK". The idea is to create an association table with both IDs to represent people with many addresses and addresses with multiple people. So both IDs will be primary key of the new table. Thanks in advance, GA --~--~-~--~~~---~--~~ 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 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] Sharing a RequestVar Across CometActors
Hi all, I have a question about whether it's possible to access RequestVars in CometActors (specifically, to access them in localSetup). I believe it is, based upon a recent thread about sharing them among snippets[1] and an older thread about Actors accessing S[2]. But first, some background, as I may be going around this in totally the wrong way and would appreciate your thoughts. I am making a dashboard to display a bunch of data that will be coming in (near) real-time and I want to use Comet to make sure the user always sees the most update-to-date information in their dashboard. I have a variety of different aggregate values to display that fall into several categories together, so I can group the calculations together. I think this sectioning will prove useful in the future, as I can imagine wanting to display some but not all of these sections on another page. Because the CometActors all will need to know the dashboard to which they belong, my thought was to share this Mapper instance via a RequestVar. I call my snippet like so: The snippet defines a RequestVar called myDashboard and then returns a NodeSeq: // While I can get this all to compile, myDashboard is empty in the CometActors. I understand that CometActors basically exist outside of the normal request cycle, so would this be the reason why my RequestVar is always empty? I was hoping that it would still be in the request cycle when localSetup is called, but I can see why that would be unrealistic. I just tried using SessionVar instead of a RequestVar and this works. However, I'm worried about having to be more careful about emptying the SessionVar if requesting a different dashboard than if I would if I were using a RequestVar. Is this an unrealistic fear? What do you think is the best way to proceed? Thanks for your help, Peter Robinett [1]: http://groups.google.com/group/liftweb/browse_thread/thread/5cf4ae2ecd0d56b5 [2]: http://groups.google.com/group/liftweb/browse_thread/thread/274cfc9d25a1ab0b --~--~-~--~~~---~--~~ 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 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: Props file example
And how do I switch runtimes? within the boot.scala? On Oct 12, 2009, at 3:52 PM, Timothy Perrett wrote: > > > Note that you can also intermix this with runtimes: > > default.props > default.pilot.props > > Doing something like that can let you automatically load different > properties based on the run mode lift is in (production vs dev etc) > > Your code will still look like: > > Props.get("some.key") //=> Box[String] > > HTH > > Cheers, Tim > > On 12 Oct 2009, at 14:36, Peter Robinett wrote: > >> >> It's a simple java.properties file. You should place it in src/main/ >> resources/props. There is a search order but, off the top of my head, >> the last two options are the username running the app (e.g. >> peter.props) and default.props. >> >> My peter.props looks like this: >> db.driver=com.mysql.jdbc.Driver >> db.url=jdbc:mysql://localhost/myDB >> db.user=myUser >> db.password=myPassword >> isPeter=true >> >> Notice that you can define your own properties. >> >> Peter Robinett >> >> On Oct 12, 2:42 pm, Guillermo Acilu wrote: >>> Hello guys, >>> >>> I am starting to learn Lift and I have a very silly question. >>> >>> I am using postgresql and I have seen that the file boot.scala reads >>> the configuration parameters like connect string, user name and >>> password, from a properties file called Props. I could not find an >>> example of such a file in any document or in google. Is it a XML >>> file >>> or a simple java.properties file? Could you please send me an small >>> example? >>> >>> Thanks in advance, >>> >>> GA >>> >> > > > > --~--~-~--~~~---~--~~ 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 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: Props file example
Thanks for the information On Oct 12, 2009, at 3:36 PM, Peter Robinett wrote: > > It's a simple java.properties file. You should place it in src/main/ > resources/props. There is a search order but, off the top of my head, > the last two options are the username running the app (e.g. > peter.props) and default.props. > > My peter.props looks like this: > db.driver=com.mysql.jdbc.Driver > db.url=jdbc:mysql://localhost/myDB > db.user=myUser > db.password=myPassword > isPeter=true > > Notice that you can define your own properties. > > Peter Robinett > > On Oct 12, 2:42 pm, Guillermo Acilu wrote: >> Hello guys, >> >> I am starting to learn Lift and I have a very silly question. >> >> I am using postgresql and I have seen that the file boot.scala reads >> the configuration parameters like connect string, user name and >> password, from a properties file called Props. I could not find an >> example of such a file in any document or in google. Is it a XML file >> or a simple java.properties file? Could you please send me an small >> example? >> >> Thanks in advance, >> >> GA > > --~--~-~--~~~---~--~~ 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 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: Props file example
Note that you can also intermix this with runtimes: default.props default.pilot.props Doing something like that can let you automatically load different properties based on the run mode lift is in (production vs dev etc) Your code will still look like: Props.get("some.key") //=> Box[String] HTH Cheers, Tim On 12 Oct 2009, at 14:36, Peter Robinett wrote: > > It's a simple java.properties file. You should place it in src/main/ > resources/props. There is a search order but, off the top of my head, > the last two options are the username running the app (e.g. > peter.props) and default.props. > > My peter.props looks like this: > db.driver=com.mysql.jdbc.Driver > db.url=jdbc:mysql://localhost/myDB > db.user=myUser > db.password=myPassword > isPeter=true > > Notice that you can define your own properties. > > Peter Robinett > > On Oct 12, 2:42 pm, Guillermo Acilu wrote: >> Hello guys, >> >> I am starting to learn Lift and I have a very silly question. >> >> I am using postgresql and I have seen that the file boot.scala reads >> the configuration parameters like connect string, user name and >> password, from a properties file called Props. I could not find an >> example of such a file in any document or in google. Is it a XML file >> or a simple java.properties file? Could you please send me an small >> example? >> >> Thanks in advance, >> >> GA > > > --~--~-~--~~~---~--~~ 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 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: Props file example
It's a simple java.properties file. You should place it in src/main/ resources/props. There is a search order but, off the top of my head, the last two options are the username running the app (e.g. peter.props) and default.props. My peter.props looks like this: db.driver=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost/myDB db.user=myUser db.password=myPassword isPeter=true Notice that you can define your own properties. Peter Robinett On Oct 12, 2:42 pm, Guillermo Acilu wrote: > Hello guys, > > I am starting to learn Lift and I have a very silly question. > > I am using postgresql and I have seen that the file boot.scala reads > the configuration parameters like connect string, user name and > password, from a properties file called Props. I could not find an > example of such a file in any document or in google. Is it a XML file > or a simple java.properties file? Could you please send me an small > example? > > Thanks in advance, > > GA --~--~-~--~~~---~--~~ 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 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: PayPal Subscriptions
Just tested with paypal sandbox and it works, thanks. On Oct 11, 5:59 pm, Timothy Perrett wrote: > Ryan, > > I have pushed the code to master so give it a couple of hours and > Hudson should automatically start pulling those changes into 1.1- > SNAPSHOT JARs for you. Alternatively do a pull and build locally. > > Cheers, Tim > > On 10 Oct 2009, at 01:38, Timothy Perrett wrote: > > > > > Ryan, > > > Ignore my last email please - i've just tested the change using the > > IPN simulator and it now handles the Cancel message properly by > > passing Empty. > > > The change is on my branch here: > > >http://github.com/dpp/liftweb/commit/451dd3cb97e562a063da5cfe046badf1... > > > Cheers, Tim > > > On Oct 10, 1:05 am, Timothy Perrett wrote: > >> Ryan, > > >> Looking at it, the strange thing is actually why it compiles now, not > >> why it doesn't compile with the change you suggested. > > >> Given: > > >> for (info <- buildInfo(resp, r); > >> // stat is going to be a Box[PaypalTransactionStatus.Value] anyway > >> // because of L489. > >> stat <- info.paymentStatus) yield { > >> actions((stat, info, r)) > >> true > > >> } > > >> So, it appears that adding the Box[] to the partial function > >> definition would just make the type exactly right. Im starting to > >> write some mock tests etc as this is going to need testing > >> programatically. > > >> More to come soon. > > >> Cheers, Tim > > >> On Oct 9, 7:03 pm, Ryan Donahue wrote: > > >>> Here's a diff showing the changes I made. Notice I added a case > >>> to the > >>> SimplePaypal.actions method that I'd think would fail compilation > >>> but does > >>> not. > > >>> On Fri, Oct 9, 2009 at 1:08 PM, Ryan Donahue > >>> wrote: > Well, I am a scala newb, but I know maven all too well. I ran > "mvn clean > install" from the lift-paypal dir to install lift-paypal-1.1- > SNAPSHOT.jar to > my local repo. > > To be sure, I changed the signature as follows which does cause > errors: > def actions: PartialFunction[(PayPalInfo, Req), Unit] > > Change back to def actions: > PartialFunction[(Box[PaypalTransactionStatus.value], PayPalInfo, > Req), Unit] > and no errors. > > On Fri, Oct 9, 2009 at 12:35 PM, Timothy Perrett > wrote: > > > Hey Ryan, > > > How *exactly* did you locally do the build? If you had done the > > install of your altered lift-paypal then you would certainly get a > > compile error because the signature has changed. The new syntax > > should > > be: > > > object MyIPN extends PaypalIPN { > > def actions = { > > case (Full(CompletedPayment), info, req) => // do something > > } > > } > > > The only exclusion would be if you had a implicit conversion to > > Box > > PaypalTransactionStatus types that were unboxed. > > > Cheers, Tim > > > On Oct 9, 3:46 pm, Ryan Donahue wrote: > >> Tim, > > >> I locally changed the PaypalIPN.actions method return type to > >> trait PaypalIPN { > >> def actions: PartialFunction[(Box > >> [PaypalTransactionStatus.Value], > >> PayPalInfo, Req), Unit] > > >> } > > >> Apparently this does not cause any compilation errors for user > >> implementing their own IPN handler as follows > >> object MyIPN extends PaypalIPN { > >> import PaypalTransactionStatus._ > >> def actions = { > >> case (CompletedPayment, info, req) => // do something > >> } > > >> } > > >> This is not good since I assume the result is that the case won't > >> match anymore but we won't have a compilation error to tell us to > >> change our code. Maybe I missed something, I am a scala > >> newbie :) > > >> -Ryan > > >> On Oct 8, 3:57 pm, Timothy Perrett > >> wrote: > > >>> Ok cool, I'll take a look at this tomrrow all being well. > > >>> Thanks for the feedback > > >>> Cheers, Tim > > >>> Sent from my iPhone > > >>> On 8 Oct 2009, at 20:43, Ryan Donahue > >>> wrote: > > I created the ticket:http://github.com/dpp/liftweb/issues/ > #issue/88 > > I do receive the payment_status field for PDT. I bet in > practice > you will never receive a payment_status value other than > Completed, > > because if the payment was not completed PayPal would not > redirect > the user's browser back to your PDT URL. However, I have not > verified this and do check the payment status in my PDT code > anyway > > (how could I verify that it will never happen?). So I would > prefer > > that both were consistent, but just boxing the IPN payment > status > will be fine too :) > > On Thu, Oct 8, 2009 at 2:49 PM, Timothy Perrett > > > wrote: > Im not married to the current API, so breaking changes are OK >
[Lift] Props file example
Hello guys, I am starting to learn Lift and I have a very silly question. I am using postgresql and I have seen that the file boot.scala reads the configuration parameters like connect string, user name and password, from a properties file called Props. I could not find an example of such a file in any document or in google. Is it a XML file or a simple java.properties file? Could you please send me an small example? Thanks in advance, GA --~--~-~--~~~---~--~~ 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 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: Lift UVP's
Also, a demo of working with maven + jRebel to get easy to test development On Mon, Oct 12, 2009 at 12:27 PM, Timothy Perrett wrote: > > Agreed - the security stuff is pretty cool and adds value for sure. > Thanks for the thoughts - I need to get writing! > > Cheers, Tim > > On 12 Oct 2009, at 10:14, Viktor Klang wrote: > > > :-) > > Perhaps something like > > > > The Lift philosophy > > View-first - Pros and Cons > > Comet OOTB (the 30 line chat example is always a crowd-pleaser) > > The security model (random uids, SiteMap, Http Auth etc) > > Performance and scaling > > > > That's what's on top of my head... > > > > > -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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 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: Lift UVP's
Agreed - the security stuff is pretty cool and adds value for sure. Thanks for the thoughts - I need to get writing! Cheers, Tim On 12 Oct 2009, at 10:14, Viktor Klang wrote: > :-) > Perhaps something like > > The Lift philosophy > View-first - Pros and Cons > Comet OOTB (the 30 line chat example is always a crowd-pleaser) > The security model (random uids, SiteMap, Http Auth etc) > Performance and scaling > > That's what's on top of my head... --~--~-~--~~~---~--~~ 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 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: Extend the tables that like the migration in the Rails ?
Is User added to Schemefier in Boot.scala? It should look something like: Schemifier.schemify(true, Log.infoF _, User) Peter Robinett On Oct 12, 11:22 am, "Neil.Lv" wrote: > Hi all, > > I don't know whether there is a mechanism that like the migration > of the Rails in the Liftweb, and how can we > > extend the table, such as add a column "desc " into a table users (OR > user ?). > > I add this code in the User model and restart the server, the table > don't change anything ! > ### > class User extends MegaProtoUser[User] { > ... > object desc extends MappedPoliteString(this, 128) > ... > } > ### > > How can i do if i want to achieve this purpose ? > > 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 liftweb@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: Why fields are declared as 'object' with Mapper/Record?
I've spent some time and came up with this code: http://github.com/ojow/Random-code/blob/master/Test.scala I think it should allow all the needed stuff, it keeps meaning with the bytes and also: * its reusable/extensible in many directions, no static stuff * i checked generated .class files and looks like no extra hidden fields or heave methods are generated, so its technically light-weight * it doesn't use/need reflection (not sure if its good or bad) Would be nice to hear some feedback on that. P.S. I'm still a newbie in Scala so excuse me if this code is worthless and if i'm just stealing your time. On Oct 7, 3:54 am, David Pollak wrote: > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. wrote: > > > As i said before i'm not sure that i'm getting the whole picture and > > maybe my initial question is incorrect in its root. Still: > > > Suppose i have a Person class declared with Mapper/Record and i want > > to reuse the class and all the code associated with it in another > > module/project. My first thought was to extend the Person class and > > override some of its fields by mixing in some additional traits (see > > my simplified example code in the initial message). But i noticed that > > inner objects cannot be overriden (its not obvious for me but i can > > get it if i dig it). > > You can't do this. There was a Scala language feature that would have > allowed this (overriding an object) but it hasn't made the cut for 2.7 or > 2.8. > > > > > So how do i reuse Mapper/Record based code if i need to extend/ > > customize the data structures? > > Unfortunately, you can't. Once you've got a field defined, there's nothing > you can do to change it in a subclass. > > > > > > > > > On Oct 6, 11:59 pm, David Pollak > > wrote: > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. wrote: > > > > > Thanks for all the answers and especially for David's clarification. > > > > It would be really cool to upgrade the 'keeping the meaning with the > > > > bytes' thing (http://blog.lostlake.org/index.php?/archives/19-Keeping- > > > > the-meaning-with-the-bytes.html) to allow extension/customization. > > > > What kind of extensions/customizations? > > > > MappedXXX can all be subclassed, extended and customized. > > -- > 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 liftweb@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: Basic Theory Question: User Management and Access Controls
Hi Dave, Have a look at the Lift book: http://groups.google.com/group/the-lift-book Master PDF here: http://build.schuerrer.org/liftbook/master.pdf There's a section on AuthRole (see p.122 or there-abouts) Regards, Juan On Oct 10, 9:18 pm, Dave wrote: > Hi all- > > I am creating a site which has two types of users, of which many of > you have probably read about before. This is more of a theory > question: What is the proper (standard, best, easiest whatever) way > to manage user types. Right now I'm doing most of this through the > SiteMapper, using If objects to determine what type of user is logged > in and then send them on their merry way. For instance, I do something > like this to make sure logged in users are sent to the right places: > > val anyLoggedIn = If(() => !(Student.loggedIn_? || > Provider.loggedIn_?), > if (sessionLoginType.is map {_ == StudentLogin} openOr false) > { > println("student") > RedirectResponse("studentHome") > > } > else > { > println("provider") > RedirectResponse("providerHome") > } > ) > > // Build SiteMap > val entries = ... > Menu(Loc("loginBase", ("login"::""::Nil)->true, "Login Base", > Hidden, anyLoggedIn)):: > > What say you assembled lifters? > > Thanks, > > Dave --~--~-~--~~~---~--~~ 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 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] beyond widgets: plugins (modular architecture)
Hey guys, I had a look at this thread: http://groups.google.com/group/liftweb/browse_thread/thread/a875258c5cccdf09/f6719565f6550513?lnk=gst&q=plugin+modular#f6719565f6550513 I'm about to attempt the same. The base app (BASE) will provide a basic workflow system based on roles. The rest of the functionality will be implemented via plugins (PLUGIN). I do have a couple of issues, though: 1) Is this correct?: PLUGIN is NOT necessarily generated with lift- archetype-blank but follows a similar folder structure: src/main/scala/bootstrap/liftweb src/main/scala/my/app/plugins/pluginX src/main/webapp (no WEB-INF, and referenced in BASE's classpath) 2) BASE needs to "load" PLUGIN by calling LiftRules.addToPackages("my.app.plugins.pluginX") ...but PLUGIN also needs to know about BASE's roles to utilise the workflow functionality. Will this cause a circular dependency issue? A solution to this may be factoring out the roles model component and workflow interface into a separate dependency: BASE ref {PLUGIN,ROLE} PLUGIN ref ROLE For the time being I'll put all my functionality into a monolithic app, but it would be cool to hear everyone's thoughts on this, and hopefully make it more modular soon. Thanks, Juan --~--~-~--~~~---~--~~ 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 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] Question about the TreeViewDemo in the lift widgets section of the Exploring LIft pdf
I've interpreted the demo as the code below. However, I get this exception when I compile: /snippet/TreeViewDemo.scala:14: error: not found: value JsObj TreeView("example", JsObj("animated"->90)) I'm not sure what I'm doing wrong I'd appreciate any help. Here's the code: package com.nsfw.bmp.businesssetup.snippet import _root_.net.liftweb.http._ import S._ import _root_.net.liftweb.http.js.JsObj import _root_.net.liftweb.util._ import Helpers._ import _root_.net.liftweb.widgets.tree._ import _root_.scala.xml._ class TreeViewDemo { def render(xhtml:Group):NodeSeq={ TreeView("example", JsObj(("animated"->90))) } def loadTree() = { Tree("No Children"):: Tree("one static child", Tree("Lone child") :: Nil) :: Tree("Dynamic node", "myDynamic", true) :: Nil } def loadNode(id:String) : List[Tree] = id match { case "myDyanmic" => Tree("Child one") :: Tree("Child two") ::Nil case _ => Nil } } --~--~-~--~~~---~--~~ 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 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: Why fields are declared as 'object' with Mapper/Record?
I spent some time and came up with this code: http://github.com/ojow/Random-code/blob/master/Test.scala I think it should allow all the needed stuff, it keeps meaning with the bytes and also: * its reusable and extensible in many directions * looks like generated .class files don't have any additional hidden fields or heavy methods, so it's technically light-weight * it doesn't need reflection (not sure if its good or bad :) Would be nice to hear some feedback on that. P.S. I'm still a newbie in Scala so please excuse me if this code is worthless and if i'm just wasting your time. On Oct 7, 3:54 am, David Pollak wrote: > On Tue, Oct 6, 2009 at 10:16 AM, Oleg G. wrote: > > > As i said before i'm not sure that i'm getting the whole picture and > > maybe my initial question is incorrect in its root. Still: > > > Suppose i have a Person class declared with Mapper/Record and i want > > to reuse the class and all the code associated with it in another > > module/project. My first thought was to extend the Person class and > > override some of its fields by mixing in some additional traits (see > > my simplified example code in the initial message). But i noticed that > > inner objects cannot be overriden (its not obvious for me but i can > > get it if i dig it). > > You can't do this. There was a Scala language feature that would have > allowed this (overriding an object) but it hasn't made the cut for 2.7 or > 2.8. > > > > > So how do i reuse Mapper/Record based code if i need to extend/ > > customize the data structures? > > Unfortunately, you can't. Once you've got a field defined, there's nothing > you can do to change it in a subclass. > > > > > > > > > On Oct 6, 11:59 pm, David Pollak > > wrote: > > > On Tue, Oct 6, 2009 at 9:50 AM, Oleg G. wrote: > > > > > Thanks for all the answers and especially for David's clarification. > > > > It would be really cool to upgrade the 'keeping the meaning with the > > > > bytes' thing (http://blog.lostlake.org/index.php?/archives/19-Keeping- > > > > the-meaning-with-the-bytes.html) to allow extension/customization. > > > > What kind of extensions/customizations? > > > > MappedXXX can all be subclassed, extended and customized. > > -- > 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 liftweb@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] Extend the tables that like the migration in the Rails ?
Hi all, I don't know whether there is a mechanism that like the migration of the Rails in the Liftweb, and how can we extend the table, such as add a column "desc " into a table users (OR user ?). I add this code in the User model and restart the server, the table don't change anything ! ### class User extends MegaProtoUser[User] { ... object desc extends MappedPoliteString(this, 128) ... } ### How can i do if i want to achieve this purpose ? 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 liftweb@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: Lift UVP's
On Mon, Oct 12, 2009 at 11:06 AM, Timothy Perrett wrote: > > Completly :-) > > Thats why i just want to present a strong case of features and get > away from code on slides. I might do a few slides showing some code, > perhaps for things like template binding or comet. But generally id > like to think about features. > > So, what might you suggest mate? > :-) Perhaps something like The Lift philosophy View-first - Pros and Cons Comet OOTB (the 30 line chat example is always a crowd-pleaser) The security model (random uids, SiteMap, Http Auth etc) Performance and scaling That's what's on top of my head... > > Cheers, Tim > > On 12 Oct 2009, at 08:27, Viktor Klang wrote: > > > I think that focusing on the selling points is a good strategy, > > people cannot and will not learn the code in the preso, so > > demonstrating _why_ Lift is a good choice if you value the things > > that Lift brings to the table, and then start lining up things on > > the table. > > > > > -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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 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: Lift UVP's
Completly :-) Thats why i just want to present a strong case of features and get away from code on slides. I might do a few slides showing some code, perhaps for things like template binding or comet. But generally id like to think about features. So, what might you suggest mate? Cheers, Tim On 12 Oct 2009, at 08:27, Viktor Klang wrote: > I think that focusing on the selling points is a good strategy, > people cannot and will not learn the code in the preso, so > demonstrating _why_ Lift is a good choice if you value the things > that Lift brings to the table, and then start lining up things on > the table. --~--~-~--~~~---~--~~ 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 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: Lift UVP's
Hey Rick, Thanks for your feedback - its often helpful to get an outsiders perspective! Making note about the session granularity is an interesting one - if you had to give a simple message to someone else like yourself who was coming to lift about this, what would you say to them? Cheers, Tim On 11 Oct 2009, at 23:09, Rick R wrote: > From an outsider: Comet/Actors was a big draw for me to Lift. As I > learned more, the view-first philosophy began becoming very helpful. > > In addition, it offers an insanely powerful session state API. > It is also secure by default, offering many features that would be a > pain to retrofit into a system. > The component oriented views/templates and no-single-controller > philosophy is also a major win. IMO it, along with Nitrogen may be > the only major framework to actually offer true modularization. > > It was these and other benefits that lured me despite its > integration with the existing JEE infrastructure. Coming from a > functional and c++ background, Lift's association with Java was a > detriment in my eyes. I am know that there are others like me, and, > depending on the audience, it may need to be addressed. > > Just my two cents. Good luck with your talk! > > On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett > wrote: > > Guys, > > In about a month im speaking at a fairly sizeable event in Belgium and > wanted to ask a few questions about what users see at Lift's unique > value proposition. I did a talk about lift at a bar-camp recently and > whilst they were fairly well received, I think i still assumed too > much information. To that end, I thought by focusing on some of lifts > super cool features in a broad way I would then aim to give people a > better overview / warm fuzzy feeling about Lift in the allotted hour. > > So what are Lift's UVP's? My list looks a little like: > > - OOTB Comet (probably what draws most people to lift) > - View first / code free templating > - Utilisation of existing JEE infrastructure (WARs, JPA etc) > - Non-perscriptive but highly configurable framework > > Then we also have some stuff that we inherit from scala: > > - traits > - concise but type safe code > - etc etc etc > > What do people think? I have an hour to make people feel good about > Lift and hopefully give them enough of a taste to go away and try it > later - am i missing anything blindingly obvious? This isnt a hard and > fast outline of my preso, just trying to kick around some thoughts and > ideas :-) > > Cheers, Tim > > > > > --~--~-~--~~~---~--~~ 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 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: Dynamic SiteMap
Dave writes: [...] > Specifically, since both of my user types extend MegaProtoUser, I end > up with loggedIn_? function that tells if some user is logged in, but > is confused about which. So if a user of type 1 logs in and I call > UserType2.loggedIn_?, it will also return true. Is there a way to > check for this in If statements? Or is it necessary to override > loggedIn_? (which I've been trying, but has been pretty slow going so > far). Is there a reason you need two user _types_? It sounds like this could be accomplished by adding a role to the user. Then you could easily do If(User.loggedIn_? && User.role1_?) /Jeppe --~--~-~--~~~---~--~~ 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 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: Dynamic SiteMap
"marius d." writes: > First of all I'm not reinventing anything. I don't think that If > LocParam semantic is giving you the hidden functionality as well. I haven't checked closely, but the scaladoc seem to indicate that it does. And in my own menu snippets (which is based on the original menu snippet), inaccessible items doesn't show either /** * If the test returns True, the page can be accessed, otherwise, * the result of FailMsg will be sent as a response to the browser. * If the Loc cannot be accessed, it will not be displayed in menus. * * @param test -- the function that tests access to the page * @param failMsg -- what to return the the browser (e.g., 304, etc.) if * the page is accessed. */ case class If(test: () => Boolean, failMsg: FailMsg) extends LocParam /Jeppe --~--~-~--~~~---~--~~ 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 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: Lift UVP's
I think that focusing on the selling points is a good strategy, people cannot and will not learn the code in the preso, so demonstrating _why_ Lift is a good choice if you value the things that Lift brings to the table, and then start lining up things on the table. On Mon, Oct 12, 2009 at 12:09 AM, Rick R wrote: > From an outsider: Comet/Actors was a big draw for me to Lift. As I learned > more, the view-first philosophy began becoming very helpful. > > In addition, it offers an insanely powerful session state API. > It is also secure by default, offering many features that would be a pain > to retrofit into a system. > The component oriented views/templates and no-single-controller philosophy > is also a major win. IMO it, along with Nitrogen may be the only major > framework to actually offer true modularization. > > It was these and other benefits that lured me *despite* its integration > with the existing JEE infrastructure. Coming from a functional and c++ > background, Lift's association with Java was a detriment in my eyes. I am > know that there are others like me, and, depending on the audience, it may > need to be addressed. > > Just my two cents. Good luck with your talk! > > > On Sun, Oct 11, 2009 at 5:37 PM, Timothy Perrett > wrote: > >> >> Guys, >> >> In about a month im speaking at a fairly sizeable event in Belgium and >> wanted to ask a few questions about what users see at Lift's unique >> value proposition. I did a talk about lift at a bar-camp recently and >> whilst they were fairly well received, I think i still assumed too >> much information. To that end, I thought by focusing on some of lifts >> super cool features in a broad way I would then aim to give people a >> better overview / warm fuzzy feeling about Lift in the allotted hour. >> >> So what are Lift's UVP's? My list looks a little like: >> >> - OOTB Comet (probably what draws most people to lift) >> - View first / code free templating >> - Utilisation of existing JEE infrastructure (WARs, JPA etc) >> - Non-perscriptive but highly configurable framework >> >> Then we also have some stuff that we inherit from scala: >> >> - traits >> - concise but type safe code >> - etc etc etc >> >> What do people think? I have an hour to make people feel good about >> Lift and hopefully give them enough of a taste to go away and try it >> later - am i missing anything blindingly obvious? This isnt a hard and >> fast outline of my preso, just trying to kick around some thoughts and >> ideas :-) >> >> Cheers, Tim >> >> > > > > -- Viktor Klang Blog: klangism.blogspot.com Twttr: viktorklang Lift Committer - liftweb.com AKKA Committer - akkasource.org Cassidy - github.com/viktorklang/Cassidy.git SoftPub founder: http://groups.google.com/group/softpub --~--~-~--~~~---~--~~ 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 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: Dynamic SiteMap
First of all I'm not reinventing anything. I don't think that If LocParam semantic is giving you the hidden functionality as well. User type 2 should not even see the menus for user type 1, not only to not be able to access those locations. The way I see it this functionality should be totally irrespective of Mappers or any persistence store. It is just a matter of how you implement the function passed to If and other LocParams. You can also implement your own Loc and override the calcHidden function and you can decide what to render there. I still think that a conditional hidden LocParam would be helpful. Br's, Marius. On Oct 12, 2:27 am, Dave wrote: > Marius- > > Thanks for your help on this. I guess I'm not sure how this differs > from the current conception of the If LocParam. As I understand it, it > is checked when determining what to display on the Menu as well as > when a User attempts to access the page (or its subdirectory if > passing a pair). If this is true, then I think there is no need to > reinvent the wheel per se. Assuming I'm right and we can use If's to > accomplish this functionality, I can follow up this query with an > implementation based question. Specifically, since both of my user > types extend MegaProtoUser, I end up with loggedIn_? function that > tells if some user is logged in, but is confused about which. So if a > user of type 1 logs in and I call UserType2.loggedIn_?, it will also > return true. Is there a way to check for this in If statements? Or > is it necessary to override loggedIn_? (which I've been trying, but > has been pretty slow going so far). > > Thanks > Dave > > On Oct 11, 12:36 pm, "marius d." wrote: > > > Yes, a Loc accepts many LocParams ... as I said above If/Unless/Test > > would be used in conjunction with CondHidden to also provide > > accessibility constraints. > > > Here is the definition > > > case object CondHidden(test: () => Boolean) extends LocParam > > > but we also have case class If(test: () => Boolean, failMsg: FailMsg) > > extends LocParam > > > So the test function is the same which means that you essentially > > implement one function and provide it to both LocParam's. We could > > probably combine the two LocParams in a: > > > IfHidden(test: () => Boolean, failMsg: FailMsg) // if you have a > > better name please let me know :) > > > The test function would be called in two cases: > > > 1. When rendering the Menu to see is the Menu should be rendered or > > not > > 2. When try to access the location to as a security check > > > I could probably add it this week and point you to my branch to check > > it out. If I runt into something weird that I cannot foresee I'll let > > you know. > > > Would this work for you? > > > Other people are welcome to comment as well ... > > > Br's, > > Marius > > > On Oct 11, 7:06 pm, Dave wrote: > > > > Hi Marius, > > > > Thanks for the response. The LocParam is a good idea, but here is the > > > attendant problem. No only do I have to hide options A,B,C from user > > > type 2, I have to make sure user type 2 does not access those pages/ > > > areas. Can I include that in the locParam as well? Right now, I'm > > > using an If() val to determine what type of user it is, and then > > > funnel accordingly. I assume i can just include both the if (to > > > determine access/where to send) and then the conditional hider > > > LocParam if necessary. But can I bundle both into a more DRY solution? > > > > Thanks, > > > > Dave > > > > On Oct 11, 2:54 am, "marius d." wrote: > > > > > So doesn't what I described about help you? ... a conditional Hidden > > > > LocParam? ...thus the SiteMap contains all A, B, C, D, E, F menus but > > > > for user type 1 D, E,, F are hidden, and for user type 2 A, B, C are > > > > hidden. The decision would done in the function that you provide to > > > > CondHidden. > > > > > If this helps the new LocParam could be added with not much problems. > > > > > If this doesn't work for you, please elaborate. > > > > > Br's, > > > > Marius > > > > > On Oct 11, 2:09 am, Dave wrote: > > > > > > Hi all- > > > > > > I am interested in a similar question. I have two types of users and > > > > > once logged in, I'd like to provide them with distinct menu options. > > > > > For instance User type one would have a menu with A / B / C and User > > > > > Type Two would have D / E / F. I have tried a variety of approaches > > > > > including storing a session variable when the user first logs in, but > > > > > because the sitemap is already built, its tough to modify > > > > > dynamically. Further, unfortunately, User1.sitemap and User2.sitemap > > > > > don't play well together, and only one should be shown at one time > > > > > depending on the user type. Not to take away from Markus' question, > > > > > but if someone could address this more concrete scenario, it would be > > > > > much appreciated. > > > > > > Thanks, > > > > > Dave > > > > > > On Oct 10, 5:09 pm, "marius d.