I know what you mean, I have the same feelings about it. Spring can be
a big mess (it's pretty certainly making a mess of your classpath with
all those deps). On the other hand, I just tried to find out how big a
mess it actually would be. It's substantial but not frightening IMO.
Adding the spring dependencies (only the relevant ones) is adding
almost the same as the hibernate.jar alone.
aopalliance-1.0.jar
commons-logging-1.1.1.jar
spring-beans-2.5.6.jar
spring-context-2.5.6.jar
spring-core-2.5.6.jar
spring-orm-2.5.6.jar
spring-tx-2.5.6.jar
~= 1.8M

hibernate-3.2.6.ga.jar
~= 2.2M

I didn't include annotations and EM on the hibernate side, they add
together something like 200k, and I might have missed something on the
spring side (the rest of the deps are optional, some might be needed
though).

Not really arguing here, just trying to not get into FUD.

Daniel

PS: I just did that with downloading from the maven repo directly, but
if you have a working project you want to inspect the jars from: get
the executed commandline somehow, split in vi with ":%s/:/^M/
g" (that's CTRL-V CTRL-M), save to cp.txt, then "cp `grep spring
cp.txt` ." or whatever you like ("du `grep spring cp.txt` | sort -
nr"). Nice way to check your classpath.


On Dec 16, 5:32 am, "Derek Chen-Becker" <[email protected]> wrote:
> That may be workable but I have to recoil a little when we talk about
> bringing Spring into the mix. It has its purpose but I would hate to make it
> an implicit requirement of using Record with JPA; it's just huge.
>
> Derek
>
> On Mon, Dec 15, 2008 at 12:46 PM, Daniel Mueller
> <[email protected]>wrote:
>
>
>
> > I never did it with JPA, that's why I mentioned that there might be
> > some problems to circumnavigate (my websearch turned up that it's not
> > possible, but I might have missed something). But on the actual
> > backend frameworks you can do things like that (or at least hibernate
> > can [1,2, also see 3 below]).
>
> > The best resource to describe what we want to do is Spring ORM [3].
> > They had the same problem and describe the caveats with it (see the
> > text box for loadtime weaving under the JPA section). If we would run
> > our generation through Spring ORM we should probably get away with a
> > Record-only setup, where Record boots Spring ORM with dynamic classes
> > (Maps) and configures the desired backend. The nice thing would be
> > that Spring is already aware of which backend you use and optimizes
> > accordingly.
>
> > I don't really like the fact that this adds a truckload of
> > dependencies to the stack (spring-{orm,beans,context,core,tx} are
> > required, couple more optional), but it's the easiest solution I can
> > think of in terms of integration and timerequirements, and it should
> > also be pretty stable and straightforward to use for the users (Spring
> > has nice documentation IMO). Oh, and just if you were wondering, this
> > is the supported frameworks list: Hibernate, JDO, Oracle TopLink,
> > iBATIS SQL Maps and JPA. The biggies are supported without even going
> > through JPA. Sweet.
>
> > Daniel
>
> > [1]http://forums.oracle.com/forums/message.jspa?messageID=2432779
> > [2]http://wiki.eclipse.org/Eclipselink/Examples/JPA/Dynamic
> > [3]http://static.springframework.org/spring/docs/2.5.x/reference/orm.html
>
> > On Dec 15, 9:41 pm, "Derek Chen-Becker" <[email protected]> wrote:
> > > I've been thinking a little about the XML path and there may be a
> > wrinkle.
> > > No matter how you define the XML mappings, JPA expects persistable fields
> > to
> > > either be real fields (var) on the instance or getter/setter pairs; using
> > an
> > > object for field a la Record still isn't either of these. I have a busy
> > few
> > > weeks ahead but I'm going to do some reading in the meantime and see if
> > we
> > > can come up with something transparent but easy to use.
>
> > > Derek
>
> > > On Mon, Dec 15, 2008 at 12:39 AM, Daniel Mueller
> > > <[email protected]>wrote:
>
> > > > (Reactivating discussion. I guess it's been discussed more on the
> > > > committer list, but here you have my 2 cents anyway)
>
> > > > For the sake of the Record-JPA discussion, people will fall into two
> > > > categories when they are using lift:
> > > > * The first group of people have an existing, working, tested JPA/OR
> > > > based data access library written in Java and are looking to integrate
> > > > that with a webapp written in lift. They will usually be coming from
> > > > an enterprise background, and will have some constraints on what they
> > > > can develop from scratch ("no - we will not rewrite all the db access
> > > > code to support the new web framework").
> > > > * The second group doesn't have an existing data access library in
> > > > Java and would like to write all their new stuff with lift in Scala.
> > > > But maybe they have mapping/usage requirements that precludes using
> > > > mapper because it's too simple, or they just know their way around one
> > > > of the other JPA enabled OR libs and want to bank on that knowledge
> > > > (without writing the entire layer in Java).
> > > > * The third group also doesn't have an existing data access library,
> > > > but for some reasons, they want their OR model not only be accessible
> > > > from lift, but actually also from Java code. This means that they not
> > > > only have to be able use JPA, but that the Scala code they write has
> > > > to be _JPA compatible_ (Java usable JPA entities etc.).
>
> > > > For the first group, some sort of delegation strategy from the Record
> > > > entity to the JPA entity is necessary (unless you can mixin the record
> > > > stuff on top of an actual JPA entity?). The JPA/OR configuration is
> > > > already in place on the existing lib (annotations/xml). The only thing
> > > > that record is doing is adding another layer on top of it for
> > > > validation, binding to UI, maybe querying. Something like what was
> > > > proposed earlier by Derek should be enough
>
> > > > > class MyEntry extends Record[MyEntry] {
> > > > >   var inner : RealEntry = _
>
> > > > >   object name extends StringField(this) with Delegation
> > > > >   name.delegate(inner.name, inner.name = _)
>
> > > > >   ...
> > > > > }
>
> > > > Now for the second group, they probably would like to have all the
> > > > power associated with a JPA/OR framework without resolving to writing
> > > > that layer in Java. Mind you that this is quite a different problem
> > > > from what the first group wants to solve.
> > > > * They just want to have Record entities, no separate JPA entity, no
> > > > delegation.
> > > > * They don't want to duplicate configuration from what they already
> > > > specify on Record entities.
> > > > * Have the integration as hassle free as possible, because in their
> > > > eyes, there is no actual delegation.
>
> > > > What the second group needs is a bit trickier, and most of the
> > > > discussion has revolved around how to make it as transparent as
> > > > possible (compiler plugins, byte code weaving, etc.).
>
> > > > Remember that for the second group of people Record is attempting to
> > > > solve the _exact same problem_ as JPA. It's a unifying frontend, that
> > > > abstracts away differences in persistence libraries. And as with JPA,
> > > > Record has the configuration present in code (instead of annotations
> > > > it just uses actual subclasses and parameters, but still).
>
> > > > But there's one thing that has only been mentioned on the off by
> > > > David.
>
> > > > > I believe there are ways to use Record's deep knowledge of class
> > layouts
> > > > to
> > > > > generate data structures and/or XML to send to JPA to "do the right
> > > > thing."
>
> > > > The key point here is XML. While those annotations are a nice feature
> > > > for the programmer to get rid of the XML configuration from pre EJB
> > > > 3.0, it's less than sexy for attaching a unified API (record) to an
> > > > implementation library (jpa, which incidentially is another unified
> > > > API for the actual OR libs :/ ). But that's a feature for the
> > > > developer who doesn't want to specify the configuration in an XML. But
> > > > the XML configuration capability is still there. Generating XML from
> > > > Record entities (maybe even in memory) to boot the JPA/OR lib should
> > > > be pretty easy and doesn't require more opaque techniques (compiler
> > > > plugin, byte code weaving).  And it can be overridden easily as well
> > > > even to integrate things that are not supported in Record.
> > > > I'm not well versed enough in JPA to make statements about whether the
> > > > XML configuration is feature complete compared to the annotations, and
> > > > how flexible the mapping can be (directly from the Record object
> > > > fields to the columns). I would assume that the mapping is not
> > > > flexible enough to work with the objects fields from Record, but maybe
> > > > we can start discussing strategies to solve that (using vars,
> > > > generating bytecode, using untyped maps as entities, generating OR lib
> > > > specific XML - And yes I know that with a couple of those you loose
> > > > some features provided by JPA).
>
> > > > For the third group of people, those that want to use reuse their
> > > > objects as Java compatible JPA entities: Do we really need that right
> > > > now? Are there enough real use cases to warrant the effort? Mind that
> > > > you can always write a Java compatible access layer for your entities
> > > > in Scala. In that layer you refrain from using stuff that Java doesn't
> > > > like and then just use that connector from your java code. IMO lift
> > > > shouldn't solve that problem. Although it's interesting, I don't
> > > > really see the benefit of having actual JPA object usable from Java.
> > > > As already discussed on the list, there's a whole bunch of
> > > > compatibility problems to make the Record entity be an actual JPA
> > > > entity. If we find out that solving the problem for the second group
> > > > is only possible if we solve this one, then fine, otherwise I
> > > > personally wouldn't bother to fix that thing now. You can code around
> > > > it and it shouldn't be that much of a problem to do so.
>
> > > > Pick your battles...
>
> > > > Daniel
>
> > > > On Dec 2, 1:22 am, "David Pollak" <[email protected]>
> > > > wrote:
> > > > > My 2 cents:
>
> > > > >    - I'm strongly opposed to any compiler plugins as they (1) mean
> > that
> > > > IDEs
> > > > >    will work less well and (2) they require some sort of installation
> > (if
> > > > they
> > > > >    can be rolled into the Maven building stuff, it makes this
> > objection
> > > > go
> > > > >    away)
> > > > >    - I'm strongly opposed to mixing annotations and the Record stuff.
> > > >  It'll
> > > > >    just make for wicked ugly looking code.
>
> > > > > I believe there are ways to use Record's deep knowledge of class
> > layouts
> > > > to
> > > > > generate data structures and/or XML to send to JPA to "do the right
> > > > thing."
>
> > > > > On Sun, Nov 30, 2008 at 7:45 AM, Derek Chen-Becker <
> > > > [email protected]>wrote:
>
> > > > > > The whole point of integrating (and I use the word integrating here
> > > > > > loosely) is so that there's a common form framework for people to
> > use.
> > > > > > Really, the point of Record as far as I can tell is to loosen
> > and/or
> > > > remove
> > > > > > the tight coupling with the datastore, and in that sense Record is
> > > > > > succeeding. As Tim points out, there are going to be people with
>
> ...
>
> read more »

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to