This discussion has gotten beyond a simple solution for Lift plugins.
Most Lift apps now don't use OSGi, and
modularization means something different in a non-OSGi environment.
For one thing, it's not dynamic. You still
have to code to use the new module. A well-mannered Lift/OSGi marriage
is a good thing, where modularization
is the rule, not the exception, but that doesn't take the place of
statically dropping in code/jars during development.

That is what needs to be addressed foremost, I think.

Glenn...


On Jul 29, 4:55 am, Heiko Seeberger <heiko.seeber...@googlemail.com>
wrote:
> Just a quick and dirty reply: In order to get OSGi support LiftRules should
> delegate *everything* to a Collection of LiftModules.  LiftModules can be
> added to and removed from this collection anytime.
>
> Heiko
>
> 2009/7/29 Timothy Perrett <timo...@getintheloop.eu>
>
>
>
>
>
> > Ryan,
>
> > I agree with you for the most part - certainly making it explicit would be
> > my preference also.
>
> > Im not 100% sure that we would need to replicate all the LiftRules
> > functionality as a trait for plugins, as that's just one aspect of how a
> > plugin could change the environment.
>
> > Your point about making the developer aware what the plugin actually did is
> > a good one though - no one likes black boxes. Perhaps the plugin developer
> > would need to implement some kind of descriptor trait... Meaning that their
> > actual code just uses the normal LiftRules infrastructure, but during the
> > loading process perhaps just Log.debug it to death showing exactly how the
> > environment has been modified or something?
>
> > Just spitballing...
>
> > Cheers, Tim
>
> > On 29/07/2009 12:31, "Ryan Donahue" <donahu...@gmail.com> wrote:
>
> > > -1 for adding modules by "dropping in" a jar
>
> > > Suppose the jar supplies multiple Lift modules and I only want to use
> > > one, or suppose I want to use some other class in the jar and don't
> > > want to use any of its Lift modules.
>
> > > Adding a module to a Lift app really should be an explicit action by
> > > the developer, closer to what Tim does by putting MyModule.init in
> > > Boot.  However, this does have a couple shortcomings: (1) Does not
> > > provide a mechanism for supplying templates in the module and (2)
> > > Hides the LiftRules additions from the developer which could result in
> > > confusion when troubleshooting (did this module prepend or append to
> > > dispatch? which module's dispatchers are executing first? etc.)
>
> > > So what about putting something like this in Boot:
> > > LiftRules.modules.append(MyModule) or LiftRules.modules.prepend(new
> > > MyModule) where MyModule extends LiftModule and LiftModule is a trait
> > > like:
>
> > > trait LiftModule {
>
> > >   /*
> > >    * Specify where to search for snippets, views, etc
> > >    */
> > >   def lookupPackage : String
>
> > >   /*
> > >    * Specify where to search for templates
> > >    */
> > >   def templates : Box[String] // or maybe this has a nice default
> > > value
>
> > >   /*
> > >    * Override this to provide LoanWrappers that will be added by
> > > S.addAround
> > >    */
> > >   def SWrappers : List[LoanWrapper] = List()
>
> > >   /*
> > >    * Override this to provide dispatchers that will be added by
> > >    * LiftRules.dispatch.append
> > >    */
> > >   def dispatchers : List[LiftRules.DispatchPF] = List()
>
> > >   /*
> > >    * Override this to provide dispatchers that will be added by
> > >    * LiftRules.statelessDispatchTable.append
> > >    */
> > >   def statelessDispatchers : List[LiftRules.DispatchPF] = List()
>
> > >   // Etc.  Basically there would be an overrideable method for each
> > > type of
> > >   // thing you can add to LiftRules with nice defaults where
> > > possible.  A module
> > >   // developer only overrides the methods needed for their module.
>
> > > }
>
> > > On Jul 28, 4:18 pm, Naftoli Gugenheim <naftoli...@gmail.com> wrote:
> > >> The first suggestion was reflection...
> > >> I'm not pushing the idea, just throwing in an alternative.
> > >> But the xml route doesn't have to be xml--it could be a plain text file
> > like
> > >> /META-INF/.liftboot etc.
> > >> Or you could search all jars for net.liftweb.BootXX or net.liftweb.XX
> > that
> > >> implements a trait OnBoot...
> > >> The point is, there's no shortage of ways (if there's a will :) ) but
> > they
> > >> all have a certain cost of course. Dynamic loading _means_ searching for
> > >> Something. That takes time, and it puts some requirement on the library
> > >> author--but it takes the requirement off the user.
>
> > >> -------------------------------------
>
> > >> Timothy Perrett<timo...@getintheloop.eu> wrote:
>
> > >> Hey Naftoli,
>
> > >> Lift has a general aversion to xml configs... Is there another route?
>
> > >> Cheers, Tim
>
> > >> On 28/07/2009 20:47, "Naftoli Gugenheim" <naftoli...@gmail.com> wrote:
>
> > >>> What I was suggesting is that instead of having to write Lib.init in
> > Boot,
> > >>> Lift should look in Lib.jar for say /boot.xml which would tell Lift to
> > >>> execute
> > >>> Lib.init for you on startup. I think that would accomplish what you
> > want, at
> > >>> the cost of lift searching through the jars.
>
> --
>
> My blog: heikoseeberger.name
> Follow me: twitter.com/hseeberger
> OSGi on Scala:www.scalamodules.org
> Lift, the simply functional web framework: liftweb.net
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to 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
-~----------~----~----~----~------~----~------~--~---

Reply via email to