>> THOMAS: Okay. Hi, my name is Grant Thomas. And I work at Oracle and I feel I'm like taking
you into the dark side; Windows, Oracle, PowerPoint. So, if anybody cares about those things, I
probably would apologize for it but anyway. I--so, one of the things we've been looking
at Wave for inter-network and a group that looks at innovations, basically innovations
group within Oracle and we look at technology that Oracle acquires and technology that appears
outside of Oracle, and see specifically how that can be turned to advantage of our applications
groups. And one of the things that we--more or less when--the day Wave came out, we were
interested in Wave and we built some integrations between Wave and some of our CRM Apps and
we demoed those at those of Google I/O were all very excited and, you know, then the bubble
was burst. But we have kept track with that, and one of the things that we did on the original
FedOne was build a persistence layer around a product called Oracle Coherence. And I'm
going to do probably, like, you know, four slides in about one a minute on that, and
then look at some code. For people that don't know Coherence, they may know a product called
Tangosol which is what it was called before Oracle bought it. But it's basically a big
map. It's a distributed map. So, you send it abstraction of the map cost; it can run
on one node, it can run on a thousand nodes. And it's distributed petitions. You've got
a ton of ways of deploying it. It's got querying, it's got asset properties. We use it internally
and also productize it for numbers of different purposes. We use it as a read-through and
a write-behind cache for JPA. We use it for session-balancing and a sessions layer across
some WebLogic clusters. Also, some things, there's even a SQL-like query language for
the maps. So, just to give you a quick sort of sense of that, so one of the ways you can
do is basically--essentially, every JVM and, potentially, your application runs a piece
of the map and then it's petitioned to cross and the Map technology takes care of all the
replication. It uses a proprietary sort of broadcast protocol for doing that and that's
one way of doing it. Essentially, you can do that way. Typically, what happens then
is if an application updates some entry in the map, the map knows where all the other
bits of that versions of that thing is and then broadcasts it and it gets sort of sent
around the different JVMs. And so, if you lose a JVM, you haven't lost your data. So,
it's a pretty fairly sophisticated way of doing it. The technology is used a lot by
people who've got very high throughput transaction rates, so retailers, financial services, exchanges,
where they're running hundreds of millions of transactions a day. And they essentially
run them through these things and then offload them at the end of the day into more persistence
storage. Just to give you a sort of an idea, typically, it's a couple of sort of network
operations to do accesses and updates because you have to find out where the data might
be, move it from a distributed node to a local node, that type of thing. This is a sort of
model I'm actually using for this which is--so you can think of this essentially as the Wave
server essentially running with no local storage for the map, and then there's a cluster that
you can either set up as, you know, cluster one node or a cluster of many nodes that actually
runs a map, and so, when the app starts update, it sort of pulls the data including the map,
the nodes that are out there. You can do--there are all sorts of sophisticated deployment
topologies with sort of near caching, right-through caching, right behind caching; all sorts of
things. You can persist it to the database. The databases can be Oracle RAC, it can be
Berkeley DB. There can be all sorts of, you know, different database top technology that
sort of sits there and you can also run that stuff over WAN. There's a protocol called
TCMP which I think originally stands for Tangosol, but it is actually the sort of broadcast protocol
that's used. So that was basically that. So you just basically think of the storage as
being a big map. It's out there. So, let me just see. They're juggling things up. So this
is just--I'm sorry I'm running on a Amazon server with Openfire XMPP and doing federation
with Wave in a Box and using Coherence as storage up here. So stop--to basically stop
the node outside is pretty straightforward. You basically just have to essentially have
the Coherence.jar and run the .jar and you end up with--let me see if I can find the
thing. Here. So, you know, it's basically just the JVM process, so this is how you can
start one, you can start many. If you want something more sophisticated, you can actually
run these under WebLogic, and so you have full management of the sort of distributed
cluster node on that or you can, as I say, run it in the process or run it just as a
straightforward process on here. I'm trying to run through this fairly quickly. I'm sure
people are hungry. So, from--I believe Putty was mentioned the other day, so this is Putty
picking up a file off of Amazon. So to just give you a sort of sense, pretty much all
you have to do this is tell Wave, essentially, what your sort of cluster address is, what
port you are using, the cluster names you want. The other starts to just log-in, that's
on there. And as I said, I'm using local storage equals false. Then there are a couple of conflict
files and the conflict files do two things. One of them tells you--tells Coherence what
the caches are that you want to use and I just sat four up; one for search, one for
accounts, one for Waves and I think one for files--though I'm not into using the one for
files at the moment--that's on there. And then, you know, you run--you run your Wave
server and basically, it works and I can go to--let's see if I can find the right file
here. So there's a bunch of command line tools or other tools to do this but I have a map
called rehab accounts on here. So, you know, to use that map, you just say--or to be able
to look at it, you can do that and obviously, I've been--just got one account but—yes...
I'm not sure why that is. It must have gone away. Anyway, we won't worry about that for
now. And I'm looking at the wrong thing. From a persistence point of view, there are interfaces
and basically, I've just modeled on stuff that was in here. So just to quickly show
some code here. There's a thing called persistence module which gets caught from the--from the
start up and it passes in these types. So you end up with a type in there and then you
bind the type to whatever you want and I've heard of some new ones for, you know, Coherence.
Coherence set store and Coherence account store and when there was the Delta store,
well, we'll have one of those as well. But a quick look at that. I'll do the simplest
one which is account store. So this is about as quick and short and as dirty as it gets
to use something like Coherence. So there's an account store interface. Simple because
it's going to be a single turn, there's a little static initializer that says "Cache
back to get cache. Could we have accounts," that's basically it. Sets it's, you know,
static account cache. And then in the implementation at the methods down here, there's a--you get
a--let me put it down here. So you get past in this account data object and then when
I--one of the things that Coherence can do, if you got something that seems currently
serializable, you can just put it and it will just use job serialization and write the stuff
out. Problem with that is job serialization is generally crap. So one of the things that
Coherence did is they built this thing they called PUFF which I can never remember what
it actually stands for. But it's an optimized serialization format. And so I actually translate
an account data object in this thing called a stored account. And there's a couple of
different ways you can do it but the simplest one is just to implement this interface called
quotable object. And so here's where my account data gets passed in and there's a read external
version of it and there's a write external version of it. And as you could imagine, basically
what it's doing is it just essentially serializes using its serialization routines. And it's
got serializations for a whole bunch of different sort of standard types but you can also write
your own serialization--serializers if you actually want--let say if you got some very,
very specific serialization that you need to do and you, you know, you basically just
write that stuff out. And then when you need it to come back from the map basically, the
map infrastructure causes things behind the scenes, cause these serialization routines
and you get your account data that way. Search store is pretty much the same. Delta records,
which is the sort of beginnings of the persistent store, is basically the same patent but now
you're persisting a wavelet delta record. And one of the things that's quite nice about
Wave is that there's already serializers to put them into sort of standard types all over,
you know, the protobuf stuff is all over Wave. So basically, you can get to a byte array
of pretty much everything and then you just going to read and write the byte arrays out
into--out in the--out into the content to get those things back. And in theory, that
means that--let me go here. That's pretty much--coming from a code point of view, that's
pretty much it. It's pretty straightforward. From a storage point of view, this really
has nothing to do with how you store it. So, if you want a simple dirty [INDISTINCT] store,
you just download Coherence off of OTN, Oracle Technology Network. All of Oracle's technology
is free for use for sort of evaluation stroke developer playing around. It's not free for
use for production and neither is this, so it doesn't help you there. But if anybody's
got a view to saying, "I actually want to build something that's got an enterprise quality
store standing behind it with--that can be operated using tools that people are familiar
with," then Coherence is a potential for that. There is an Apache project called Cassandra
that is somewhat similar. I know nothing about it, but it is a distributed multidimensional
map that was built by Facebook and contributed to Apache. So, that might be an alternative
to Coherence as an approach that gives you all the same sort of benefits of basically
just using the map obstruction as your store that's out there. And this is all working.
So here's my--this is my Amazon on a thing called Oracle CRM Wave is the domain that's
up there. So, in theory, 22--I can add--I have a Wave Sandbox log-in as well, so if
I can spell it right...and if that's all still working. Then, yeah, now I have my, you know,
persisted Wave and that's actually using, as I said, the--let me see if I can just find
that store element I was looking for. Let me just try it for the--so to make it up.
Yeah, so there's--so it's basically the sets stored in there. It's got--I don't know what
that is. Some hash name that was--that's used to--as the identification key. And then that's
the object that's stored in there. And as I said, unless--let me just try this one more
time. I have no idea why that--maybe it's account. No. I don't know. Disappeared for
some reason but it should show you the account object that's in there. But basically, that's
it. So, hopefully that gives you some flavor of relatively simple to do. The--it shouldn't
be--you shouldn't really feel afraid of the persistent interfaces to date. They're pretty
simple. I'm keeping track more or less with the data track--check-ins that [INDISTINCT]
is doing for the file assistance mechanism, and then just re-factoring it into its Coherence
mechanism that's up there. That's it. Lunch time. Any questions? If anybody--if there's
any reason to put this somewhere, then I'm happy to put it somewhere at some point.
>> Can we--would you[INDISTINCT]the map into the, you know.
>> THOMAS: It just needs two. There's two Java files in the Oracle Coherence.jar and
then there's a JE which is actually a language file but other than that...
>> So to give you [INDISTINCT] that site? >> THOMAS: Yeah. You could say, yeah.
>> Cool. >> THOMAS: Yeah?
>> [INDISTINCT] strategy in the government, you were saying [INDISTINCT] there's a lot
of issues that--with the [INDISTINCT]. >> THOMAS: Right.
>> [INDISTINCT]. >> THOMAS: Okay. Yes, I mean Coherence is--it's,
you know, it's a live top tier Oracle product that goes through full security government
reviews. >> [INDISTINCT].
>> THOMAS: And everything else that we do. Okay. All right. And if there's any other
questions--no? Come see me afterwards if you have any.
. >> Cool.
>> THOMAS: Yeah? >> [INDISTINCT] strategy in the government,
you were saying [INDISTINCT] there's a lot of issues that--with the [INDISTINCT].
>> THOMAS: Right. >> [INDISTINCT].
>> THOMAS: Okay. Yes, I mean Coherence is--it's, you know, it's a live top tier Oracle product
that goes through full security government reviews.
>> [INDISTINCT]. >>