Wiki source code of WebObjects with Scala

Version 222.1 by Ravi Mendis on 2009/09/16 18:51

Hide last authors
Ravi Mendis 21.1 1 === What is Scala? ===
Ravi Mendis 195.1 2
3 Scala is a modern language not unlike Groovy.
Ravi Mendis 209.1 4 It is said to be more powerful (and faster) than Groovy or Rails which has been the reason for its adoption at sites like Twitter.
Ravi Mendis 195.1 5
Ravi Mendis 211.1 6 Many of its features and paradigms favor multi-threaded and concurrent development which may not be unfamiliar to Objective-C and WebObjects developers. Here's a summary:
Ravi Mendis 195.1 7
8 |= |= Objective-C |= Java |= Scala
9 |= Mutable/Immuable Datatypes | Collections //e.g: NSArray/NSMutableArray// | No | //All datatypes//
10 |= Closures | Blocks (//Extension//) | No | //Built-in//
11 |= Static variables | Yes | Yes | No
12 |= Static methods/functions | Yes | Yes | No
13 |= Concurrency | [[Grand Central Dispatch>>http://en.wikipedia.org/wiki/Grand_Central_Dispatch]] (//Extension//)| //Threads// |[[Actors>>http://en.wikipedia.org/wiki/Actor_model]]
14 |= |= Weakly Typed |=--Strongly Typed--|= Strongly Typed
15
16 Other notable features include:
17
18 |= |= Objective-C |= Java |= Scala
19 |= Parametered methods | Yes //e.g: addObject: to~:// | No | Yes //e.g: add(object= ,to=)//
20 |= Class composition | Categories | Interfaces | Traits
21
22 A fuller description of Scala can be found [[here>>http://en.wikipedia.org/wiki/Scala_(programming_language)]].
23
24 === Why Use Scala? ===
25
26 With Web 2.0, building concurrent WebObjects applications is a must.
27 Developing and maintaining a concurrent or multi-threaded WebObjects application can be challenging.
28
29 Scala offers concurrency that is (effectively) built-in to the language and is inherently thread-safe.
30 So it may offer new solutions for concurrency in WebObjects.
31
32 === Can WebObjects be Programmed In Scala? ===
33
34 Yes. It is very simple.
35 Scala compiles to java bytecode. Hence using it with WebObjects is fairly straightforward.
36
37 = WebObjects In Scala =
38
Ravi Mendis 207.1 39 The following is an in-depth explanation of differences between Java and Scala in WebObjects:
Ravi Mendis 195.1 40
41 == EOs in Scala ==
42
Ravi Mendis 219.1 43 === Thread-Safe Shared Constants and Vars ===
44
45 Scala doesn't have static variables or methods. However, every class does have a //Companion Object// that will allow you to achieve something equivalent to static variables.
46 One of the advantages of this approach is that it is **thread-safe**, so you don't have to worry about synchronizing access to these fields in a concurrent application.
47
48 In Java:
49
50 {{code}}
51
52 public class _Talent extends EOGenericRecord {
53 public static final String ENTITY_NAME = "Talent";
54
55 {{/code}}
56
57 In Scala:
58
59 {{code}}
60
61 object _Talent extends EOGenericRecord {
62 val ENTITY_NAME = "Talent"
63
64 {{/code}}
65
Ravi Mendis 221.1 66 === Accessors ===
67
68 In Scala:
69
70 {{code}}
71
72 def setFirstName(value: String) {
73 logger.debug( "updating firstName from " + firstName + " to " + value)
74 takeStoredValueForKey(value, _Talent.Keys.FIRST_NAME)
75 }
76
77 {{/code}}
78
Ravi Mendis 211.1 79 === Compacted imports ===
Ravi Mendis 195.1 80
Ravi Mendis 219.1 81 Two lines in Java is compacted into one in Scala.
Ravi Mendis 195.1 82
Ravi Mendis 219.1 83 In Java:
84
Ravi Mendis 195.1 85 {{code}}
86
87 import com.webobjects.eocontrol.EOGenericRecord;
88 import com.webobjects.eocontrol.EORelationshipManipulation;
89
90 {{/code}}
91
Ravi Mendis 219.1 92 In Scala:
Ravi Mendis 195.1 93
94 {{code}}
95
96 import com.webobjects.eocontrol.{EOGenericRecord, EORelationshipManipulation}
97
98 {{/code}}
99
Ravi Mendis 211.1 100 == How to Program WebObjects In Scala ==
Ravi Mendis 203.1 101
Ravi Mendis 195.1 102 {{include value="WOL:Adding Scala Support to a WOLips Project"}}{{/include}}
103
104 {{note title="Note"}}
105
106 This is for Eclipse/WOLips IDE
107
108 {{/note}}
109
110 == WO Scala Example ==
111
Ravi Mendis 205.1 112 The following is a mixed Java/Scala version of the WO Movies D2W app.
Ravi Mendis 195.1 113 All the EO logic and WO components are in Scala.
114 Only the Application class is Java.
115
116 {{attachments patterns=".*zip"}}{{/attachments}}
117
118 === Setup ===
119
120 1. Install and run the OpenBase OBMovies database.
121 1. Right-click on Application.java and run as a WOApplication (as usual).
122
123 ==== EO Templates ====
124
125 See: [[Scala templates>>http://wiki.objectstyle.org/confluence/display/WOL/EOGenerator+Templates+and+Additions]]
126
127 When you create your ##.eogen## file, be sure to make the following changes in the EOGenerator Editor:
128
129 1. Change the File Names Extension to "scala"
130 1. Uncheck Java under Options