Your SlideShare is downloading. ×
0
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Building Concurrent WebObjects applications with Scala
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Building Concurrent WebObjects applications with Scala

995

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
995
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
19
Comments
0
Likes
1
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. WebObjects + ScalaBuilding Concurrent WebObjects applications with Scala Ravi Mendis
  • 2. Why Concurrent Programming?
  • 3. 2005The year of Dual Core
  • 4. 2010Today
  • 5. Entry-Level Cores ThreadsAMD Opteron 4 4IBM Power7 4 16 Intel Xeon 4 8
  • 6. High-End Cores ThreadsAMD Opteron 12 12IBM Power7 8 32 Intel Xeon 6 12
  • 7. 2011Tomorrow
  • 8. Roadmap Cores ThreadsAMD Opteron 16 16IBM Power7 ? ?? Intel Xeon 8 16
  • 9. “By 2015 we will likely have over 100 cores on a many- core processing chip in our notebook computers.” - Computerworld
  • 10. Welcome to the world of Multi-cores!
  • 11. Q: How do we take advantage of multi-core processors?
  • 12. A: Concurrent Programming
  • 13. #1 Threads & Locks
  • 14. “Concurrency is hard. It involves a lot of problems that are very difficult to think about and reason about and understand” - Tim Bray co-inventor of XML
  • 15. #1 Threads & Locks• HARD to program• HARD to scale• Contentious
  • 16. java.lang.IllegalArgumentException: Cannot determine primary key for entity ASCCarveout from row: {charge = 3027.00;claimID = 321839138; }! at com.webobjects.eoaccess.EODatabaseChannel._fetchObject(EODatabaseChannel.java:348)! at com.webobjects.eoaccess.EODatabaseContext._objectsWithFetchSpecificationEditingContext(EODatabaseContext.java:3071)! at com.webobjects.eoaccess.EODatabaseContext.objectsWithFetchSpecification(EODatabaseContext.java:3195)! at com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsWithFetchSpecification(EOObjectStoreCoordinator.java:488)! at com.webobjects.eocontrol.EOEditingContext.objectsWithFetchSpecification(EOEditingContext.java:4069) ...Deadlock!! at er.extensions.eof.ERXEC.objectsWithFetchSpecification(ERXEC.java:1211)! at com.webobjects.eoaccess.EODatabaseContext.objectsForSourceGlobalID(EODatabaseContext.java:4084)! at com.webobjects.eocontrol.EOObjectStoreCoordinator.objectsForSourceGlobalID(EOObjectStoreCoordinator.java:634)! at com.webobjects.eocontrol.EOEditingContext.objectsForSourceGlobalID(EOEditingContext.java:3923)! at er.extensions.eof.ERXEC.objectsForSourceGlobalID(ERXEC.java:1169)! at com.webobjects.eoaccess.EODatabaseContext._fireArrayFault(EODatabaseContext.java:4245)! at com.webobjects.eoaccess.EOAccessArrayFaultHandler.completeInitializationOfObject(EOAccessArrayFaultHandler.java:77)! at com.webobjects.eocontrol._EOCheapCopyMutableArray.willRead(_EOCheapCopyMutableArray.java:37)! at com.webobjects.eocontrol._EOCheapCopyMutableArray.count(_EOCheapCopyMutableArray.java:86)! at com.mpv.evaluation.ClaimEvaluator.validateClaim(ClaimEvaluator.java:398)! ...
  • 17. BBC2, Top Gear - Series 15, Episode 1 - June 27 ’10
  • 18. #2 Actor Model (A Share NOTHING Model)
  • 19. Slowmation
  • 20. Demo
  • 21. html5 <video><video poster="/slowmation/screenshots/0/2/4/425.jpg">! <source type="video/ogg" src="/slowmation/videos/6/d/8/423.ogg" />! <source type="video/mp4" src="/slowmation/videos/d/6/4/424.mp4" /></video>
  • 22. HTML5 Video Conversion Thumbnail (.jpg) Screenshot (.jpg) Video (.mp4) Video (.ogg)
  • 23. Slowmation Actor (Video Processor)• actor ! THUMBNAIL• actor ! GRAB• actor ! CONVERT2H264• actor ! CONVERT2OGG
  • 24. !
  • 25. Actor Messaging• Asynchronous • Non-blocking• Immutable Messages • NO shared data
  • 26. Scala
  • 27. Scala• Immutable/Mutable datatypes• Anonymous Functions (~Closures)• No Static variables and methods• Extensible
  • 28. Scalaval greeting: String = “Hello World”;
  • 29. Scalaval greeting = “Hello World”;
  • 30. Scalaval greeting = “Hello World”
  • 31. Scalaval greeting = “Hello World” // immutablevar response = new String() // mutableresponse = “Hey!”
  • 32. Java - Static Varspublic class _Talent extends EOGenericRecord { public static final String ENTITY_NAME = "Talent";}
  • 33. Scala - Companion Objectobject Talent extends EOGenericRecord { val ENTITY_NAME = "Talent"}
  • 34. Thread-Safe
  • 35. Scala - Pattern Matchingcase a => { ...}
  • 36. Scala - Pattern Matchingtry { var epi: EditPageInterface = D2W.factory.editPageForNewObjectWithEntityNamed(entityName, session)} catch { case e: IllegalArgumentException => { var epf: ErrorPageInterface = D2W.factory.errorPage(session) epf.setMessage(e.toString) }}
  • 37. Scala - Case Classescase class PINGcase class PONG
  • 38. Scala - Case Classesactor ! PINGactor ! PONG
  • 39. Scala - Case Classescase PING => { ...}case PONG => { ...}
  • 40. Scala - Anonymous Functionsx => x^2
  • 41. Scala - Anonymous Functionsx, y => x + y
  • 42. Scala - Anonymous Functionsx, y => {x + y}
  • 43. Scala - Anonymous Functionscase (PING => {...})case (PONG => {...})
  • 44. λ - Expressions
  • 45. Scala Actors - Examplecase class THUMBNAIL(filepath: String) // Actor msg case classval processor = actor { loop { react() { case THUMBNAIL(filepath: String) => { ... } } }}// asynchronousprocessor ! THUMBNAIL(“/Library/WebServer/Documents/slowmation/screenshots/0/2/4/422.jpg”)
  • 46. #2 Actor Model• EASY to program• Scalable• NO Deadlocks!
  • 47. Q: Why can Scala be used with WebObjects?
  • 48. A: Scala compiles to Java Byte-code
  • 49. WebObjects + Concurrency
  • 50. Why?
  • 51. Performance• Exploit multi-core processors
  • 52. Ajax• More responsive UI
  • 53. How?
  • 54. PropertiesWOAllowsConcurrentRequestHandling=true
  • 55. Java - Synchronize Static Variablesprivate static String greeting = “Hello”; // privatepublic void setGreeting(String aGreeting) { synchronized(greeting) { // synchronized block greeting = aGreeting; }}
  • 56. Free!
  • 57. WO - What is Shared?• Application• Session (concurrent WO)
  • 58. Use ERXEC• Project Wonder• Automatic lock/unlock handling
  • 59. Propertieser.extensions.ERXEC.safeLocking=true
  • 60. Debugging
  • 61. Demo
  • 62. Properties-Dcom.sun.management.jmxremote=true-Dcom.sun.management.jmxremote.authenticate=false-Dcom.sun.management.jmxremote.ssl=false// Specific port-Dcom.sun.management.jmxremote.port=20102
  • 63. Bottlenecks
  • 64. EOF - Bottleneck• Shared Object-cache • Antithesis to Share Nothing model • Uses single database connection • Single-Threaded
  • 65. #3 STM(Software Transactional Memory)
  • 66. EOF + Scala• DOESN’T work in Scala Actors!•
  • 67. Solutions• Use Raw SQL• Alternative database access • Squeryl • ...
  • 68. Squeryl
  • 69. Demo
  • 70. Squeryl• POSOs• Actor Compatible• Concurrent
  • 71. “Scala as a concurrent programming language is powerful, safe and easy-to-use”
  • 72. Benchmarks
  • 73. The Test• ERWOAdaptor (Mina) • WO Worker as Actor• Apache bench • c = 5...65 • n = 500
  • 74. Results
  • 75. Time per req. (mean)200 ms150 ms100 ms 50 ms 0 ms 5 10 15 20 25 30 35 40 45 50 55 60 65 WOAdaptor ERWOScalaAdaptor ERWOAdaptor
  • 76. Requests per second800600400200 0 5 10 15 20 25 30 35 40 45 50 55 60 65WOAdaptor ERWOScalaAdaptor ERWOAdaptor
  • 77. “Scala as a concurrent programming language is powerful, safe and easy-to-use”
  • 78. The R&D Imperative In life long love The key Is R&D The ladder of invention Has eternal slide extension Rung by rung You’ll climb to heaven above. Constant innovation Guarantees a satiation Of that ever changing want And deepening need Nourishment and care To think anew… Makes passions flair And lets a culture breed Between the sheets… - by Emma Ahmad
  • 79. Q&A
  • 80. References• What will YOU do with 100 cores? http://www.computerworld.com.au/article/354261/• WebObjects with Scala http://wiki.objectstyle.org/confluence/display/WO/WebObjects+with+Scala• Case Study: Slowmation http://slowmation.uow.edu.au• Source: ERWOScalaAdaptor http://services.wocommunity.org/wowodc/ERWOScalaAdaptor

×