In Derek's defense, it's not how objects in classes work but how Lift
RequestVars work. Scala objects in classes aren't global singletons, just
per-class-instance singletons. But a Lift ReuqestVar object in a class is
pretty much a global singleton (unless you do some hacking like Derek did).

--j

On Tue, Jun 16, 2009 at 11:14 PM, Derek Chen-Becker
<dchenbec...@gmail.com>wrote:

> I agree that it's an issue. In my own defense, what I meant was not that I
> didn't think people would use more than one DB. I actually have several apps
> (not yet converted to Lift) that use 4 or more persistence units that
> represent various legacy databases. Rather, I failed to realize the problem
> that would arise from defining the EM factory as a singleton because when I
> wrote that code I didn't fully understand how member objects on classes
> worked. Other than that, I agree with your post :)
> Derek
>
> On Tue, Jun 16, 2009 at 5:38 PM, Meredith Gregory <
> lgreg.mered...@gmail.com> wrote:
>
>> Derek,
>>
>> <soapbox>
>> You have just demonstrated a process that i have been talking about for
>> the last 15 years. People have a blind spot when it comes to thinking
>> compositionally. They think -- almost to a person -- about "god's eye view"
>> solutions where there's only one of some key solution component. They don't
>> think about solutions that are composed of ... (wait for it)... solutions!
>> It takes some serious training to think compositionally. Compositional
>> solutions, however, are the only realistic way to scale. When solutions are
>> compositional, you can *de*compose. The db example is a case in point.
>> One of the most natural ways to scale data access is sharding and
>> partitioning -- which requires upfront machinery to support decomposition of
>> the store.
>>
>> Lest you feel bad, note that some of the best scientific minds of all time
>> have fallen prey to this blind spot. Newtonian physics as well as Einstein's
>> update to Newton's proposal is a non-compositional solution. Quantum
>> mechanics also exhibits compositional failures. This is why physics is
>> failing to find proposals that link theories of gravitation (essentially
>> large scale) to quantum mechanical theories of the other forces (essentially
>> very small scale) -- the physical theories are non-compositional -- they
>> don't scale!
>>
>> One of the real things functional programming has going for it is that the
>> basic model of computation underlying the means of structuring and
>> manipulating programs is compositional. That's why it is important to have a
>> technology like Scala resting atop the incumbent execution model (JVM) being
>> deployed on web-scale problems. Compositionality is the only way to tackle
>> applications at global scale.
>> </soapbox>
>>
>> Thanks for getting the fix to this problem in so quickly.
>>
>> Best wishes,
>>
>> --greg
>>
>>
>> On Tue, Jun 16, 2009 at 11:53 AM, Derek Chen-Becker <
>> dchenbec...@gmail.com> wrote:
>>
>>> Using multiple EMs was not something I had considered when I wrote this.
>>> I think that I can modify the code to provide a __nameSalt def to
>>> differentiate instances. Let me work on it and I'll have something soon.
>>>
>>> Derek
>>>
>>>
>>> On 6/16/09, Jean-Luc <jlcane...@gmail.com> wrote:
>>>>
>>>> For your information, here is an extract of source code of RequestVarEM
>>>> :
>>>>
>>>> Trait RequestVarEM extends ScalaEntityManager with ScalaEMFactory {
>>>>    object emVar extends RequestVar[EntityManager](openEM()) { ... }
>>>> }
>>>>
>>>> EntityManager is stored in the singleton emVar; so, all db access of
>>>> Model objects are made using the singleton emVar.
>>>> => trait RequestVarEM allow only one connection to a database within the
>>>> same HttpRequest context.
>>>>
>>>>
>>>> Jean-Luc
>>>>
>>>> 2009/6/15 Jean-Luc <jlcane...@gmail.com>
>>>>
>>>>>  Hello,
>>>>>
>>>>> I have two databases, db1 (a.k.a. Motorbike) and db2 (a.k.a. Motorway)
>>>>> defined with RequestVarEM :
>>>>> - object ModelDb1 extends LocalEMF("db1") with RequestVarEM  //
>>>>> Motorbike database
>>>>> - object ModelDb2 extends LocalEMF("db2") with RequestVarEM  //
>>>>> Motorway database
>>>>>
>>>>> I thought one could access to any databases independently from any
>>>>> snippet as long as the correct Model object were used (ModelDb1 or 
>>>>> ModelDb2
>>>>> for exemple) ; but when I access both databases from the same page, the
>>>>> second database access issues a "Named query not found" exception.
>>>>>
>>>>> I have two snippets, one to display a list of "motorbike", another to
>>>>> display a list of "motorway" :
>>>>> - page1 :
>>>>> ModelDb1.createNamedQuery[Motorbike]("Motorbike.findAll).getResultList() 
>>>>> =>
>>>>> ok
>>>>> - page2
>>>>> : ModelDb2.createNamedQuery[Motorway]("Motorway.findAll).getResultList() 
>>>>> =>
>>>>> ok
>>>>> - page3 : calling from page 3 motorbike & motorway snippets : Named
>>>>> query not found: Motorway.findAll
>>>>> - page4 : calling from page 4 motorway & motorbike snippets : Named
>>>>> query not found: Motorbike.findAll
>>>>> - page3 & changing the query of *Motorway* snippet :
>>>>>   - 
>>>>> ModelDb2.createNamedQuery[*Motorbike*]("*Motorbike*.findAll).getResultList()
>>>>> => it's ok and I do NOT have an exception !
>>>>>
>>>>> I joined a sample application, ...
>>>>>
>>>>> any idea about this issue ?
>>>>> (bad use of LocalEMF in the application code ? issue with LocalEMF or
>>>>> RequestVarEM ?)
>>>>>
>>>>> Jean-Luc
>>>>>
>>>>> PS :
>>>>> I don't know if it's related but I have this in the log :
>>>>> [INFO] Checking for multiple versions of scala
>>>>> [WARNING] Multiple versions of scala libraries detected!
>>>>>
>>>>>
>>>>> --
>>>>> Jean-Luc Canela
>>>>> jlcane...@gmail.com
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Jean-Luc Canela
>>>> jlcane...@gmail.com
>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>> --
>> L.G. Meredith
>> Managing Partner
>> Biosimilarity LLC
>> 1219 NW 83rd St
>> Seattle, WA 98117
>>
>> +1 206.650.3740
>>
>> http://biosimilarity.blogspot.com
>>
>>
>>
>>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
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