It's been over a year since the release of Lift 1.0. For those of you who've never heard of Lift
, it's a powerful web framework for Scala and Java developers. There are only a handful of web frameworks for Scala and Lift is probably the most well-known. Today, Lift founder David Pollak announced
a bunch of changes that have been made in the fourth milestone of Lift 2.0.
One of the main advantages of Lift is its familiar platform (JVM), which includes enterprise tools like Eclipse and Maven. There is also Java interoperability to fall back on. Lift has clean templating and provides a quick way to get CRUD functionality running. The framework also has Ajax and comet support. The popular social geolocation app, FourSquare, has moved
their entire site onto Lift.
The last three milestones of Lift 2.0 have already implemented some exciting changes. Thanks to the FourSquare developers, Lift now has OAuth support. Lift developers have updated hibernate-entitymanager to 3.4.0.GA and upgraded to jQuery 1.4.1. Developers have also modified Lift so that it explicitly closes streams rather than waiting for garbage collection. Multidimensional arrays are now supported in JSON serialization and extraction. Lift 2.0 also adds CouchDB support and DataBinding types and traits to lift-webkit.
The M4 release of Lift 4 had more changes than any of the previous milestones. lift-core_pl.properties have been updated for Lift 2 and support for HTTP Reason Phrase has been added. M4 also includes enhanced JSON support based on the new JSON library and adds equals and hash methods for the mapper based on primary key. lift-mapper is now an OSGi bundle and the OSGi configurations of other broken modules have been fixed. lift-imaging got a new ImageResizer utility class for more resizing options to preserve aspect ratio and orientation. You can read the full list of Lift 2.0 M4 changes below. Information on other milestones can be found here
o Added a flag to disable Loc uniqeness testing Issue: 452.
o Added default settings for FadeIn and FadeOut Issue: 235.
o Added warnings on attempt to access non-existant props file Issue: 444.
o Enhanced JSON support in Lift based on the new JSON library Issue: 365.
o Added equals and hash methods for mapper based on primary key Issue: 408.
o support setObject without an explicit SQL type Issue: 233.
o Added a new ImageResizer utility class to lift-imaging to provide additional resizing options which preserve aspect ratio and orientation. Issue: 297.
o Make lift-mapper an OSGi bundle and fix broken OSGi configuration of other modules. Issue: 445.
o Updated lift-core_pl.properties for Lift 2.0 Issue: 409.
o German lift-core.properties Issue: 175.
o Added a trait with createdAt and updatedAt mapper mixins Issue: 390.
o Added an option to SiteMap to not flatten the sitemap when retrieving a group Issue: 424.
o Added a flag to preserver XML scope. Necessary when you're doing bind on top-level XML Issue: 432.
o Don't cache resource bundles in dev mode Issue: 391.
o Detect and disallow duplicate URIs in SiteMap Issue: 423.
o XML entities preserved Issue: 274.
o Dynamic reloading of sitemap during dev mode Issue: 385.
o Added helpful extractors (AsInt, AsLong, AsBoolean) Issue: 400.
o Adds .json method to Req Issue: 395.
o Added asValid and JSON helpers to Mapper Issue: 397.
o Unapply on MetaMapper Issue: 399.
o More flexible CometActor creation Issue: 392.
o Converting a null String to an empty String Issue: 414.
o Add core dutch language files Issue: 131.
o Add Ext Core support to Lift Issue: 132.
o Support for HTTP Reason Phrase Issue: 334.
o Support for snippets lookup in subpackages Issue: 396.
o Create a generic continuation mechanism Issue: 401.
o Stateless JSON code Issue: 420.
o Add support for call-once functions Issue: 435. Fixed Bugs:
o Fixed an initization order issue in LoggingStatementWrapper Issue: 442.
o MappedLongForeignKey apply() methods which take reference now prime the Obj Issue: 411.
o MappedDate and MappedDateTime setFromAny now handle Numbers (millis) Issue: 427.
o MappedString.crop gracefully handles null Issue: 426.
o Fix lift-osgi boot. Issue: 448.
o Synchronized a variable Issue: 433.
o More precise (and correct) shutdown process. This fixes a shutdown problem while CometActors are running. Issue: 436.
o fix two bugs with findClass not titlecasing correctly (helloWorld to HelloWorld) Issue: 429.
o SHtml.link and redirectTo properly deal with hash in URL Issue: 382.
o Eliminated a potential deadlock in MetaMapper Issue: 419.
o FactoryMaker request and session values no longer stomp on each other Issue: 418.
o Date/time parsing and formatting should be divided into Date, Time, and Date-time Issue: 257.
o MappedTime, MappedDate, and MappedDateTime should use different parsers and formatters Issue: 258.
o Cleanup lift-openid dependencies Issue: 338.
o OpenId attribute exchange support for well known providers Issue: 348.
o Deprecate createRecord and createRecordFromJSON preferring new MyRecord Issue: 355.
o Rename OpenId -> OpenID Issue: 361.
o Foreign Key rules moved to MapperRules Issue: 388.
o Add MapperRules.displayNameCalculator to allow easy localization of displayName Issue: 389.
o lift-couchdb: Field types using JSONEncodedStringMixin compile but give AbstractMethodError due to type erasure fumble Issue: 403.
o lift-couchdb: JSONField that encodes an enumeration by its name rather than ID Issue: 404.
o SetValueAndFocus should not be in JqJsCmds Issue: 405.
o Create/Init a LiftSession from outside a Lift-handled request Issue: 406.
o JsCmds/JqJsCmds API normalization Issue: 407.
o StackOverflowError in JSON Serializer with large Lists Issue: 410.
o lift:lazy-load doesn't work properly with ajaxSelect Issue: 412.
o Statefull snippets redirect is broken Issue: 425.
o XML is converted to invalid JSON when array has attributes Issue: 428.
o S.logQuery has wrong signature for use with DB.addLogFunc Issue: 431.
o Jetty 6 correction for comet Issue: 439.
o Ability to disable unique Loc check Issue: 455.
o Improve JSON extraction error message Issue: 456. Changes:
o added blob to the list of reserved sql-words Issue: 402.
o Made ParamFailure not a case class Issue: 398.
o Add logging to Lift's internal code Issue: 310.
o Request for convenience conversion on MappedLongForeignKey fields Issue: 394.
o Move common dependencies from lift-base, lift-persistence, etc. into lift-parent Issue: 421.
o Add logging functions to Schemifier Issue: 422.
o Update AMQP dependencies to use RabbitMQ 1.7.2 Issue: 450. Removed:
o Remove the deprecated meta module lift-core Issue: 451.
Milestone 5 should be finished in next month. Lift is distributed under the Apache 2.0 license.