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

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend