You are on page 1of 31

<Insert Picture Here>

Oracle Coherence 3.6 - Overview


Christer Fahlgren David Leibs Oracle Coherence Engineering

Coherence 3.6 Release Overview


Agenda

! 3.6 Release Highlights ! 3.6 Feature Walk-Through


! Transaction Framework ! Quorum ! Session Provider for the Microsoft .NET Framework ! Coherence*Extend Security ! SSL Support ! User-Defined Indexes ! Coherence Query Language (CohQL) + DEMO

! QA

Oracle Coherence 3.6 Highlights

! Very Significant Product Release


! Over 18 months in the making ! Hundreds of RASP improvements

! Customer Focused
! Continue to help customers push the envelope: cluster size, data size, throughput ! Greater Flexibility and Usability: design, deployment, operations

<Insert Picture Here>

Oracle Coherence 3.6 Feature Walk-Through

Coherence 3.6
Transaction Framework

Overview:
! Provides ACID transaction guarantees across partitions and caches even in the event of failure. ! Multi-Version Concurrency Control (MVCC) ! Supports the use of NamedCache operations, queries, aggregation, and entry processors within the context of a transaction. ! Allows for consistent reads.

New Features:
! ! ! <transactional-scheme> Connection Based API XA Compliant Resource Adapter

Coherence 3.6
Transaction Framework

<transactional-scheme>
! Allows for single statement (autocommit) transactions while using the standard Coherence API.

Connection Based API


! This API provides for more control over transactions. ! Allows for transactions that span multiple statements. ! Also introduces the OptimisticNamedCache interface which introduces functionality useful for optimistic transactions.

XA Compliant Resource Adapter


! Allows Coherence to participate in a distributed transaction as a fully compliant XA resource.

Coherence 3.6
Transaction Framework important to know

Transactions across caches


! Caches must be running on the same Distributed Service

Cache size overhead for MVCC


! MVCC stores additional versions of Cache values ! Details and sizing directions in the documentation

Transactions from Coherence*Extend


! Only possible by using EntryProcessors that execute the Transaction.

Limitations
! No support for the CacheStore interface i.e. no read-through, writethrough or write-behind etc ! No support for BackingMap Listeners

Coherence 3.6
Transactions example Connection oriented
Connection con = new DefaultConnectionFactory(). createConnection("TransactionalCache"); ! con.setAutoCommit(false); ! try { ! !OptimisticNamedCache cache = con.getNamedCache("MyTxCache"); ! !cache.insert(key, value); ! !cache.insert(key2, value2); ! !con.commit(); ! catch (Exception e) { ! !con.rollback(); ! !throw e; ! } ! finally { ! !con.close(); ! } !

Quorum

Overview: ! Resource planning (e.g. # servers, RAM, etc.) ! Configure Coherence behavior (per-service) in the absence of significant resources New Features: ! Out-Of-The-Box membership-based policies ! Pluggable interface for custom policies

Quorum Policies

Out Of The Box: ! Allows users to specify (in cache-config) minimum membership thresholds for various service behaviors. For Example: ! Number of members to perform distribution ! Number of members to allow cache reads/writes ! Number of members to allow Extend proxy connections
(See <*-quorum-policy-scheme> documentation for details)

Quorum Policies

Pluggable Interface:
! Allows for users to implement custom policies to control the "availability" of Coherence features/behaviors ! Policies could incorporate arbitrary external state to provide finegrained resource-driven control of the service

Example Use Cases:


! Size-based quorum that is also a function of time (e.g. weekly maintenance window during which cache requests are disallowed) ! Resource-driven policies (e.g. no writes allowed unless database is available) ! Externally-triggered policies (e.g. Start a cluster, and immediately preload data into the cache. Until this process completes, do not allow cache requests)

Cluster-Level Quorum

Split-brain results from portions of a cluster becoming disconnected Split-brain semantics can be application-specific In many cases, operating in a split-brain mode is not desired Cluster-level quorum allows for control (via configuration or custom policy) over cluster member timeouts ! For example if half of the cluster has exceeded a network timeout, should the members be removed (forming a split-brain), or should the cluster be suspended? ! ! ! !

Coherence 3.6
Session Provider for the Microsoft .NET Framework

Overview:
The Coherence Session Provider for the Microsoft .NET Framework allows you to manage ASP.NET session state in a Coherence cluster in the same way Coherence*Web provides session management in JEE containers.

New Features:
! Supports all Coherence*Web Session Models (Traditional, Monolithic and Split) ! Pluggable Serializer Support ! .NET and POF Serialization Support ! Lockless exclusive session access via EntryProcessors ! Optimized Session_OnEnd Support

Coherence 3.6
Coherence*Extend Security

Overview:
Coherence*Extend Security now supports the ability to restrict client access to the cluster through the use of an identity token.

New Features:
! Pluggable Identity Handling - Separate serialization/ deserialization from handling of identity. ! Associate Identity with NamedCache and Service References ! Ability to Add Authorization to Remote Invocation Service ! Ability to Add Authorization to RemoteCacheService ! Always Run as an Identity - The proxy code will always run as the Subject returned by the IdentityAsserter (even if null).

Coherence 3.6
Security SSL Support

Overview:
Introduced native SSL support

New Features:
!! !! !! !!
!! !!

SSL support for Extend (TCP) and Cluster (TCMP) 1-way or 2-way (client authentication) Can benefit from SSL offload engine Configurable Trust Manager
SunX509 PeerX509 (default)

Coherence 3.6
User-Defined Indexes

Overview:
Used to control which entries are added to an index. User-defined indexes are typically used to reduce the memory and processing overhead required to maintain an index.

New Feature:
! IndexAwareExtractor
! Supports the creation and destruction of a user-defined index ! Intended to be used with the QueryMap API to support the creation of user-defined indexes.

Coherence 3.6
Coherence Query Language (CohQL)

Overview:
Coherence Query Language is a new light-weight syntax (in the tradition of SQL) that is used to perform cache operations on a Coherence cluster. The language can be used either programmatically or from a command-line tool.

Coherence 3.6
Coherence Query Language (CohQL)

New Features:
! QueryHelper API - Programmatic Construction of Filters and ValueExtracters. ! New command line tool with SQL like syntax (SELECT, CREATE CACHE, UPDATE, INSERT, DELETE, BACKUP, RESTORE) ! Ability to source files containing Coherence Query Language commands ! Flexible insert and update statements that allows java constructors and static invocations ! Extended insert and update statements that allow literal Lists, Maps, and Sets

Background: Porting Filters


Java
new AndFilter(! "" " " " " " " "new GreaterFilter(IdentityExtractor.INSTANCE, 1),! "" " " " " " " "new LessFilter(IdentityExtractor.INSTANCE, 4));!

C++
IdentityExtractor::View hExtract = IdentityExtractor::create();! "" " " " " "AndFilter::Handle hFilter = AndFilter::create(! "" " " " " " " "GreaterEqualsFilter::create(hExtract, Float32::create(5.0F)),! "" " " " " " Gizmology " "LessEqualsFilter::create(hExtract,Float32::create(10.0F)));!

setResults = cache.entrySet(new AndFilter(! "" " " " " " " "new LikeFilter(new KeyExtractor("getLastName"), "S%",! "" " " " " " " " " " " "(char) 0, false),! "" " " " " " " "new EqualsFilter("getHomeAddress.getState", "MA")));!

The Vision

Could Gizmology like:


InvocableMap.EntryAggrigator[] agg = InvocableMap.EntryAggrigator[] {! !new DoubleSum(getAmount), new DoubleAverage(getPrice)! };! Filter filter = new OrFilter(new EqualsFilter(getColor, red), new EqualsFilter(getColor, green));! CacheFactory.getCache("orders").aggregate(filter, new CompositeAggrigator(agg));!

be said as:
SELECT sum(amount), avg(price) FROM orders WHERE color is 'red' or color is 'green'!

What is CohQL?

! Command Line Tool with SQL like Language ! Programmatic Filter and ValueExtractor building API that is similar to the SQL WHERE clause

Command Line CohQL - Syntax

(ENSURE | CREATE) CACHE 'cache-name! (ENSURE | CREATE) INDEX [ON] 'cache-name' value-extractor-list! DROP CACHE 'cache-name! DROP INDEX [ON] 'cache-name' value-extractor-list! BACKUP CACHE 'cache-name' [TO] [FILE] 'filename! RESTORE CACHE 'cache-name' [FROM] [FILE] 'filename! INSERT INTO 'cache-name' [KEY (literal | new java-constructor | static method) ] VALUE (literal | new java-constructor | static method)! DELETE FROM 'cache-name' [[AS] alias] [WHERE conditional-expression]! UPDATE 'cache-name' [[AS] alias] SET update-statement {, update-statement}* [ WHERE conditional-expression ] ! SELECT (properties* aggregators* | * | alias) FROM 'cache-name' [[AS] alias] [WHERE conditional-expression] [GROUP [BY] properties+]! SOURCE FROM [FILE] 'filename!

Command Line CohQL - sample

CohQL> select min(zipCodes.size()), min(zipCodes.size()) from cityinfo! Results:! 0 , 0! CohQL> delete from cityinfo where zipCodes.size() is 0 or areaCodes.size() is 0! COHQL select areaCodes from cityinfo where name is Dallas ! Results:! {214,972}! CohQL> update cityinfo set areaCodes = {214, 469, 972} where name is Dallas and state is TX!

Programmatic API Example


Creating Filters and ValueExtractors
cache.addIndex(QueryHelper.createExtractor("age"), true, null); !

cache.addIndex(QueryHelper.createExtractor("key().lastName"), true, null);! cache.addIndex(QueryHelper.createExtractor("homeAddress.city"), true, null);! cache.addIndex(QueryHelper.createExtractor("homeAddress.state"), true, null);! cache.addIndex(QueryHelper.createExtractor("workAddress.state"), true, null); // Find all contacts who live in Massachusetts printResults("MA Residents", setResults); ! ! ! !

Set setResults = cache.entrySet(QueryHelper.createFilter("homeAddress.state = 'MA'")); // Find all contacts who live in Massachusetts and work elsewhere! setResults = cache.entrySet(QueryHelper.createFilter("homeAddress.state is 'MA' and workAddress is not 'MA'")); ! printResults("MA Residents, Work Elsewhere", setResults);!

Coherence Query Language

DEMO

Future Possibilities

! Extend programmatic API to richer query language ! Allow users of the Coherence Query Language the ability to add their own commands ! GUI interface as a complement to the Command line tool ! Explore and extend CohQL based on new APIs (Transactions)

Summary

! Very Significant Product Release


! Over 18 months in the making ! Hundreds of RASP improvements

! Customer Focused
! Continue to help push the envelope: cluster size, data size, throughput ! Greater Flexibility: design, deployment, operations

Q&A

Oracle Coherence 3.6 Overview


Christer Fahlgren David Leibs Oracle Coherence Engineering

For More Information

search.oracle.com
Coherence

or www.oracle.com/goto/coherence

You might also like