Version 88.1 by Ravi Mendis on 2010/03/04 21:00

Hide last authors
Ravi Mendis 83.1 1 Given that todays processors ship with dual or quad cores and server processors ship with between 8 to 32 cores, languages like Java, Ruby, Groovy, Python and Perl are struggling to keep up. Scala, as its name suggests is built from the ground-up for concurrent programming - a methodology that can take advantage of these modern multi-core processors.
Ravi Mendis 50.1 2
Ravi Mendis 85.1 3 If you use Scala for a concurrent programming application, the chances are that you're using Scala [[Actors>>http://en.wikipedia.org/wiki/Actor_model]] to do that.
Ravi Mendis 50.1 4
5 {{info title="Scala Actors"}}
6
Ravi Mendis 83.1 7 Concurrent programming in Scala is based on *Actors* (with an inbox) - a common metaphor that is analogous to *Message Queues*.
Ravi Mendis 50.1 8
9 {{/info}}
10
11 == Using Scala Actors with EOF ==
12
13 EOF being notoriously single-threaded, is incredibly unsuitable for use with Scala Actors:
14
Ravi Mendis 79.1 15 * EOs being mutable objects cannot be passed into Actors
Ravi Mendis 87.1 16 * Fetching and updating EOs from within Scala Actors can cause [[deadlocks>>http://en.wikipedia.org/wiki/Deadlock]] with the WebObjects application
Ravi Mendis 50.1 17
18 Instead you can still use EOF but in a limited fashion - only to execute SQL.
19
Ravi Mendis 73.1 20 === Using EOAccess to execute SQL ===
Ravi Mendis 50.1 21
22 Use Wonder API: [[ERXEOAccessUtilities.evaluateSQLWithEntityNamed()>>http://webobjects.mdimension.com/hudson/job/Wonder53/javadoc/er/extensions/eof/ERXEOAccessUtilities.html#evaluateSQLWithEntity(com.webobjects.eocontrol.EOEditingContext,%20com.webobjects.eoaccess.EOEntity,%20java.lang.String)]]
23
Ravi Mendis 73.1 24 ==== Caveats ====
Ravi Mendis 50.1 25
26 If you're updating the state of EOs directly in the database using SQL from Scala Actors, you will subsequently need to refresh/refetch these EOs for the WebObjects application to see those changes.
27
Ravi Mendis 73.1 28 == EOF Alternatives ==
Ravi Mendis 50.1 29
30 You may also manipulate the database from outside the EOF stack.
31
Ravi Mendis 73.1 32 === Squeryl ===
Ravi Mendis 50.1 33
Ravi Mendis 73.1 34 [[Squeryl>>http://max-l.github.com/Squeryl/index.html]] is a Scala internal [[Domain-specific language>>http://en.wikipedia.org/wiki/Domain-specific_language]] for database access (via SQL).
35 You may update the database from Scala Actors using Squeryl instead of using EOF. The advantage here is that you may access the database concurrently avoiding the single-threaded EOF bottleneck in your application.
Ravi Mendis 50.1 36
Ravi Mendis 73.1 37 However the same caveat applies - you will need to refresh EOs in the EOF stack for the WebObjects application to reflect the changes made by Squeryl.