Contenu connexe Similaire à クラウド・アプリケーション・アーキテクチャ (20) Plus de Tomoharu ASAMI (20) クラウド・アプリケーション・アーキテクチャ2. • Java ( ) Lab edge2.cc
•
• XML SmartDoc (XML )
• Relaxer (XML/Java )
•
• SimpleModeler (Scala DSL )
• g3 ( )
•
• UML ( BP)
• ( )
• Scala (Softbank Creative)
2
2010 10 19
3. • Modegramming Style ( DSL )
• http://modegramming.blogspot.com/
• g3
• http://code.google.com/p/goldenport3/
3
2010 10 19
7. [ ] (1)
REST/Atom
OAuth
Smart Device GUI
6
2010 10 19
9. [ ] (2)
Smart Device
DropBox
Evernote
DropBox Evernote
7
2010 10 19
22. Java VM!
REST (Atom/JSON)
Web UI HTML5&JavaScript
11
2010 10 19
23. CQRS EDA
12
2010 10 19
36. Scala
DSL (Domain Specific Language)
JavaVM
17
2010 10 19
37. Scala
DSL (Domain Specific Language)
JavaVM
Option, List, flatMap,
Partial Function
17
2010 10 19
39. g3
REST
Atom/HTML/MIME
Record
RQRS (Command Query Resiponsibility Segregation)
18
2010 10 19
40. g3 (Scala DSL)
class AtomDb extends G3Application with UseRecord {
val kind = 'feed
val schema = Schema(AutoIdField,
'twitterid,
'title,
('date, XDate),
('content, XString))
val url = "http://twitter.com/statuses/public_timeline.atom"
datastore('db,
RecordClassSpace(
RecordClass(kind, schema)))
service('feed, url)
… …
19
2010 10 19
41. g3 ( )
… …
channel('viewlist) invoke("list") agent {
case rs: RecordSet => Html("Feed List",
<body>
<h1>Feed List</h1>
<g.list/>
<ul>
<li><a href="/">Return Menu</a></li>
</ul>
</body>
) schema schema += rs
}
… …
20
2010 10 19
42. g3 ( )
… …
channel('update) invoke("feed") agent {
case AtomFeed(feed) => {
Post(kind,
feed.toRecordSet(entry => {
Record('twitterid -> entry.id,
'title -> entry.title,
'date -> entry.updated,
'content -> entry.contentText)
}))
}
} invoke("db")
port("/") invoke("viewtop")
port("/init") invoke("viewinitrun")
port("/list") invoke("viewlist")
port("/update") invoke("viewupdaterun")
port("/service/init") invoke("init")
port("/service/list") invoke("list")
port("/service/update") invoke("update")
}
21
2010 10 19
43. g3 - Splitter/Aggregator
class Join extends G3Application { Enterprise Integration Patterns
agent('compute) { Splitter
case x: Int => x + 100 Aggregator
}
start(List(1, 2, 3, 4, 5)) split() publish("compute") join() aggregate()
}
22
2010 10 19
45. KVS+α( )
RDBMS NoSQL
Google AppEngine DataStore
RQRS (Command Query Resiponsibility Segregation)
Event Driver & View Driver
23
2010 10 19
56. •
•
•
•
• KVS+α
• CQRS (Command Query Responsibility Segregation)
•
•
•
•
• DSL (Domain Specific Language)
•
• Scala
26
2010 10 19