webobjects scala
play

WebObjects + Scala Building Concurrent WebObjects applications with - PowerPoint PPT Presentation

WebObjects + Scala Building Concurrent WebObjects applications with Scala Ravi Mendis Why Concurrent Programming? 2005 The year of Dual Core 2010 Today Entry-Level Cores Threads AMD Opteron 4 4 IBM Power7 4 16 Intel Xeon 4 8


  1. WebObjects + Scala Building Concurrent WebObjects applications with Scala Ravi Mendis

  2. Why Concurrent Programming?

  3. 2005 The year of Dual Core

  4. 2010 Today

  5. Entry-Level Cores Threads AMD Opteron 4 4 IBM Power7 4 16 Intel Xeon 4 8

  6. High-End Cores Threads AMD Opteron 12 12 IBM Power7 8 32 Intel Xeon 6 12

  7. 2011 Tomorrow

  8. Roadmap Cores Threads AMD Opteron 16 16 IBM 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. Scala val greeting: String = “Hello World”;

  29. Scala val greeting = “Hello World”;

  30. Scala val greeting = “Hello World”

  31. Scala val greeting = “Hello World” // immutable var response = new String() // mutable response = “Hey!”

  32. Java - Static Vars public class _Talent extends EOGenericRecord { public static final String ENTITY_NAME = "Talent"; }

  33. Scala - Companion Object object Talent extends EOGenericRecord { val ENTITY_NAME = "Talent" }

  34. Thread-Safe

  35. Scala - Pattern Matching case a => { ... }

  36. Scala - Pattern Matching try { 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 Classes case class PING case class PONG

  38. Scala - Case Classes actor ! PING actor ! PONG

  39. Scala - Case Classes case PING => { ... } case PONG => { ... }

  40. Scala - Anonymous Functions x => x^2

  41. Scala - Anonymous Functions x, y => x + y

  42. Scala - Anonymous Functions x, y => {x + y}

  43. Scala - Anonymous Functions case (PING => {...}) case (PONG => {...})

  44. λ - Expressions

  45. Scala Actors - Example case class THUMBNAIL(filepath: String) // Actor msg case class val processor = actor { loop { react() { case THUMBNAIL(filepath: String) => { ... } } } } // asynchronous processor ! 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. Properties WOAllowsConcurrentRequestHandling=true

  55. Java - Synchronize Static Variables private static String greeting = “Hello”; // private public 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. Properties er.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 ms 150 ms 100 ms 50 ms 0 ms 5 10 15 20 25 30 35 40 45 50 55 60 65 WOAdaptor ERWOScalaAdaptor ERWOAdaptor

  76. Requests per second 800 600 400 200 0 5 10 15 20 25 30 35 40 45 50 55 60 65 WOAdaptor 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

Recommend


More recommend