Wiki source code of Building Concurrent Applications with WebObjects and Scala
Version 101.1 by Ravi Mendis on 2010/03/04 00:36
Show last authors
| author | version | line-number | content |
|---|---|---|---|
| 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 and Python 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. | ||
| 2 | |||
| 3 | If you use Scala for a concurrent programming application, the chances are that you're using Scala Actors to do that. | ||
| 4 | |||
| 5 | {{info title="Scala Actors"}} | ||
| 6 | |||
| 7 | Concurrent programming in Scala is based on *Actors* (with an inbox) - a common metaphor that is alternatively known as *Message Queues*. | ||
| 8 | |||
| 9 | {{/info}} | ||
| 10 | |||
| 11 | == Using Scala Actors with EOF == | ||
| 12 | |||
| 13 | EOF being notoriously single-threaded, is incredibly unsuitable for use by Scala Actors. | ||
| 14 | Instead you may still use EOF but only to execute SQL directly. | ||
| 15 | |||
| 16 | === Using EOAccess to execute SQL === | ||
| 17 | |||
| 18 | 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)]] | ||
| 19 | |||
| 20 | ==== Caveats ==== | ||
| 21 | |||
| 22 | If you're updating the state of EOs directly using SQL from Scala Actors, you will subsequently need to refresh/refetch these EOs from the WebObjects application. | ||
| 23 | |||
| 24 | == Alternatives == | ||
| 25 | |||
| 26 | You may also manipulate the database from outside the EOF stack. | ||
| 27 | |||
| 28 | === Squeryl === | ||
| 29 | |||
| 30 | [[Squeryl>>http://max-l.github.com/Squeryl/index.html]] is a Scala [[Domain-specific language>>http://en.wikipedia.org/wiki/Domain-specific_language]] for SQL. | ||
| 31 | 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 concurrent application. | ||
| 32 | |||
| 33 | 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. |