1<!DOCTYPE html> 2<!--[if IE 8]> <html class="ie ie8"> <![endif]--> 3<!--[if IE 9]> <html class="ie ie9"> <![endif]--> 4<!--[if gt IE 9]><!--> <html> <!--<![endif]--> 5 <head> 6 <meta charset="utf-8" /> 7 <title>Coherence Community</title> 8 <meta name="keywords" content="HTML5,CSS3,Template" /> 9 <meta name="description" content="Everything related to Oracle Coherence" /> 10 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 11 12 <!-- mobile settings --> 13 <meta name="viewport" content="width=device-width, maximum-scale=1, initial-scale=1, user-scalable=0" /> 14 15 <!-- Favicon --> 16 <link rel="shortcut icon" href="assets/images/favicon.ico" /> 17 18 <!-- WEB FONTS --> 19 <link href="https://fonts.googleapis.com/css?family=Open+Sans:300,400,700,800&subset=latin,latin-ext,cyrillic,cyrillic-ext" rel="stylesheet" type="text/css" /> 20 21 <!-- CORE CSS --> 22 <link href="assets/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet" type="text/css" /> 23 <link href="assets/css/font-awesome.css" rel="stylesheet" type="text/css" /> 24 <link href="assets/css/sky-forms.css" rel="stylesheet" type="text/css" /> 25 <link href="assets/css/weather-icons.min.css" rel="stylesheet" type="text/css" /> 26 <link href="assets/css/line-icons.css" rel="stylesheet" type="text/css" /> 27 <link href="assets/plugins/owl-carousel/owl.pack.css" rel="stylesheet" type="text/css" /> 28 <link href="assets/plugins/magnific-popup/magnific-popup.css" rel="stylesheet" type="text/css" /> 29 <link href="assets/css/animate.css" rel="stylesheet" type="text/css" /> 30 <link href="assets/css/flexslider.css" rel="stylesheet" type="text/css" /> 31 32 <!-- REVOLUTION SLIDER --> 33 <link href="assets/css/revolution-slider.css" rel="stylesheet" type="text/css" /> 34 <link href="assets/css/layerslider.css" rel="stylesheet" type="text/css" /> 35 36 <!-- THEME CSS --> 37 <link href="assets/css/essentials.css" rel="stylesheet" type="text/css" /> 38 <link href="assets/css/layout.css" rel="stylesheet" type="text/css" /> 39 <link href="assets/css/header-transparent.css" rel="stylesheet" type="text/css" /> 40 <link href="assets/css/footer-default.css" rel="stylesheet" type="text/css" /> 41 <link href="assets/css/color_scheme/red.css" rel="stylesheet" type="text/css" id="color_scheme" /> 42 43 <!-- Prism CSS (syntax hilighting) --> 44 <link href="assets/css/prism.css" rel="stylesheet" /> 45 46 <!-- Modernizr --> 47
47<script type="text/javascript" src="assets/plugins/modernizr.min.js"></script>
47 48 49 <!--[if lte IE 8]> 50
50<script src="assets/plugins/respond.js"></script>
50 51 <![endif]--> 52 </head> 53 54 <!-- 55 Available body classes: 56 smoothscroll = enable chrome browser smooth scroll 57 grey = grey content background 58 boxed = boxed style 59 pattern1 ... pattern10 = background pattern 60 61 Background Image - add to body: 62 data-background="assets/images/boxed_background/1.jpg" 63 64 Examples: 65 <body class="smoothscroll grey boxed pattern3"> 66 <body class="smoothscroll boxed" data-background="assets/images/boxed_background/1.jpg"> 67 --> 68 <body class="smoothscroll pattern6"> 69 70 <div id="wrapper"> 71 72 <header id="header"> 73 74 <!-- Top Nav --> 75 <header id="topNav"> 76 <div class="container"> 77 78 <!-- Logo --> 79 <a class="logo" href="index.html"> 80 <img src="assets/images/logo-red.png" height="50" alt="" /> 81 </a> 82 83 <!-- Mobile Menu Button --> 84 <button class="btn btn-mobile" data-toggle="collapse" data-target=".nav-main-collapse"> 85 <i class="fa fa-bars"></i> 86 </button> 87 88 <!-- Top Nav --> 89 <div class="navbar-collapse nav-main-collapse collapse"> 90 <nav class="nav-main"> 91 92 <!-- 93 NOTE 94 95 For a regular link, remove "dropdown" class from LI tag and "dropdown-toggle" class from the href. 96 Direct Link Example: 97 98 <li> 99 <a href="#">HOME</a> 100 </li> 101 --> 102 <ul id="topMain" class="nav nav-pills nav-main white"><!-- add "white" class if you want white menu text color--> 103 <li class="active"> 104 <a href="#overview">Overview</a> 105 </li> 106 <li> 107 <a href="#features">Features</a> 108 </li> 109 <li> 110 <a href="#quickstart">Quick Start</a> 111 </li> 112 <li> 113 <a href="examples.html">Examples</a> 114 </li> 115 <li> 116 <a href="projects.html">Projects</a> 117 </li> 118 <li class="dropdown"> 119 <a class="dropdown-toggle" href="#">Documentation</a> 120 <ul class="dropdown-menu"> 121 <li><a href="https://docs.oracle.com/en/middleware/fusion-middleware/coherence/14.1.2/index.html" target="_blank"><i class="fa fa-external-link"></i> Official Documentation (all editions)</a></li> 122 <li class="divider"></li> 123 <li><a href="https://docs.coherence.community/coherence/docs/latest" target="_blank"><i class="fa fa-external-link"></i> Coherence CE 25.03 (latest) Documentation</a></li> 124 <li><a href="https://docs.coherence.community/coherence/docs/14.1.2.0" target="_blank"><i class="fa fa-external-link"></i> Coherence CE 14.1.2 (LTS) Documentation</a></li> 125 <li><a href="https://docs.coherence.community/coherence/docs/22.06" target="_blank"><i class="fa fa-external-link"></i> Coherence CE 22.06 (LTS) Documentation</a></li> 126 <li><a href="https://docs.coherence.community/coherence/docs/14.1.1.0" target="_blank"><i class="fa fa-external-link"></i> Coherence CE 14.1.1 (LTS) Documentation</a></li> 127 </ul> 128 </li> 129 <li> 130 <a href="https://medium.com/oracle-coherence" target="_blank"><i class="fa fa-medium"></i> Blog</a> 131 </li> 132 <li> 133 <a href="https://github.com/oracle/coherence" target="_blank"><i class="fa fa-github"></i> Code</a> 134 </li> 135 </ul> 136 </nav> 137 </div> 138 <!-- /Top Nav --> 139 140 </div><!-- /.container --> 141 </header> 142 <!-- /Top Nav --> 143 144 </header> 145 146 147 <!-- REVOLUTION SLIDER --> 148 <div class="slider fullwidthbanner-container roundedcorners"> 149 <div class="fullwidthbanner" data-height="650"> 150 <ul class="hide"> 151 152 <!-- SLIDE --> 153 <li data-transition="fade" data-slotamount="14" data-masterspeed="300" data-delay="12000"> 154 155 <!-- COVER IMAGE --> 156 <img src="assets/images/1x1.png" data-lazyload="assets/images/wall.jpg" alt="" data-bgfit="cover" data-bgposition="left top" data-bgrepeat="no-repeat" /> 157 158 <div class="tp-caption modern_medium_fat_white lfl stl" 159 data-x="60" 160 data-y="300" 161 data-speed="300" 162 data-start="500" 163 data-easing="easeOutExpo">ARE YOU BUILDING 164 </div> 165 166 <div class="tp-caption large_bold_white sft stb" 167 data-x="60" 168 data-y="323" 169 data-speed="300" 170 data-start="1000" 171 data-easing="easeOutExpo">MICROSERVICES? 172 </div> 173 174 <div class="tp-caption lfl stl medium_light_white" 175 data-x="950" 176 data-y="80" 177 data-speed="3000" 178 data-start="2000" 179 data-easing="easeOutExpo"><img src="assets/images/sockshop-ui-1.png" width="270" alt="" /> 180 </div> 181 182 <div class="tp-caption sfb medium_light_white" 183 data-x="570" 184 data-y="220" 185 data-speed="2000" 186 data-start="2000" 187 data-easing="easeOutExpo"><img src="assets/images/sockshop-final.png" width="700" alt="" /> 188 </div> 189 190 <div class="tp-caption medium_light_white sft stb" 191 data-x="60" 192 data-y="400" 193 data-speed="500" 194 data-start="3000" 195 data-easing="easeOutExpo">You've come to the right place 196 </div> 197 198 </li> 199 200 <!-- SLIDE --> 201 <li data-transition="fade" data-slotamount="7" data-masterspeed="300" data-delay="12000"> 202 203 <!-- COVER IMAGE --> 204 <img src="assets/images/1x1.png" data-lazyload="assets/images/wall.jpg" alt="" data-bgfit="cover" data-bgposition="left top" data-bgrepeat="no-repeat" /> 205 206 <div class="tp-caption modern_medium_fat_white lfl stl" 207 data-x="60" 208 data-y="300" 209 data-speed="300" 210 data-start="500" 211 data-easing="easeOutExpo">DO YOU NEED TO 212 </div> 213 214 <div class="tp-caption large_bold_white sft stb" 215 data-x="60" 216 data-y="323" 217 data-speed="300" 218 data-start="1000" 219 data-easing="easeOutExpo">MONITOR THEM? 220 </div> 221 222 <div class="tp-caption lfl stl medium_light_white" 223 data-x="800" 224 data-y="80" 225 data-speed="3000" 226 data-start="2000" 227 data-easing="easeOutExpo"><img src="assets/images/monitoring.png" width="500" alt="" /> 228 </div> 229 230 <div class="tp-caption sfb medium_light_white" 231 data-x="620" 232 data-y="300" 233 data-speed="2000" 234 data-start="2000" 235 data-easing="easeOutExpo"><img src="assets/images/tracing.png" width="500" alt="" /> 236 </div> 237 238 <div class="tp-caption medium_light_white sft stb" 239 data-x="60" 240 data-y="400" 241 data-speed="500" 242 data-start="3000" 243 data-easing="easeOutExpo">Built-In Support for Metrics and Tracing 244 </div> 245 246 </li> 247 <!-- /SLIDE --> 248 249 </ul> 250 <div class="tp-bannertimer"></div>
251 </div> 252 </div> 253 <!-- /REVOLUTION SLIDER --> 254 255 256 <!-- CALLOUT --> 257 <div class="callout dark"><!-- add "styleBackgroundColor" class for colored background and white text OR "dark" for a dark callout --> 258 <div class="container"> 259 260 <div class="row"> 261 262 <div class="col-md-8"><!-- title + shortdesc --> 263 <h3> 264 The best way to build 265 <span class="word-rotator"><!-- word rotator --> 266 <span class="items bold"> 267 <span><strong>modern</strong></span> 268 <span><strong>stateful</strong></span> 269 <span><strong>scalable</strong></span> 270 <span><strong>cloud native</strong></span> 271 </span> 272 </span><!-- /word rotator --> 273 </h3> 274 <h3> 275 microservices 276 </h3> 277 </div> 278 279 <div class="col-md-4 hidden-sm hidden-xs"> 280 <img src="assets/images/microservices-platform.png" height="80" alt="" /> 281 </div> 282 283 </div> 284 285 </div> 286 </div> 287 <!-- /CALLOUT --> 288 289 <!-- WELCOME --> 290 <section> 291 <div class="container"> 292 <header> 293 <a name="overview"></a> 294 <h2> 295 Welcome to <span class="bold"><em>Coherence Community Edition</em></span> 296 </h2> 297 <p class="lead">Coherence CE (Community Edition) is a free and open source edition of Oracle 298 Coherence, first and market-leading in-memory data grid. Since its initial release in 2001, 299 it has been used by hundreds of customers across many industries to power some of the 300 mission critical systems you use every day. Often immitated, but never duplicated, it is now 301 available for everyone to use free of charge.</p> 302 </header> 303 304 305 <!-- FEATURED BOXES 3 --> 306 <div class="row featured-box-minimal"> 307 308 <div class="col-md-4 col-sm-6 col-xs-12"> 309 <h4><i class="fa fa-arrows"></i> Scalable</h4> 310 <p>Coherence clusters can easily scale to hundreds of members (JVMs), all of which can both store and process the data. This allows you to scale both the data storage and the processing capacity by simply adding more members to the cluster, which you can do at any time.</p> 311 </div> 312 313 <div class="col-md-4 col-sm-6 col-xs-12"> 314 <h4><i class="fa fa-cog"></i> Reliable</h4> 315 <p>Coherence stores each piece of data within multiple members (one primary and one or more backup copies), and doesn't consider any mutating operation complete until the backup(s) are successfully created. This ensures that your data grid can tolerate the failure at any level: from single JVM, to whole data center.</p> 316 </div> 317 318 <div class="col-md-4 col-sm-6 col-xs-12"> 319 <h4><i class="fa fa-rocket"></i> Fast</h4> 320 <p>Coherence is fast. Like, sub-millisecond fast. Each member of the cluster is aware of where each piece of data resides and can access it using a single network call. There are no connections to acquire or release, and no distributed transactions to commit or roll back.</p> 321 </div> 322 </div> 323 324 <div class="row featured-box-minimal"> 325 326 <div class="col-md-4 col-sm-6 col-xs-12"> 327 <h4><i class="fa fa-database"></i> Durable</h4> 328 <p>Coherence can optionally persist data to disk (either local or shared), which prevents data loss even in the case of complete cluster outage. Coherence Grid Edition (commercial) also supports data center replication and application failover.</p> 329 </div> 330 331 <div class="col-md-4 col-sm-6 col-xs-12"> 332 <h4><i class="fa fa-cloud"></i> Cloud Enabled</h4> 333 <p>Coherence comes with its own Kubernetes Operator, which allows you to provision Coherence-based application into any Kubernetes cluster using 5 lines of YAML. It also has built-in supp
333ort for OpenTracing, Prometheus and Grafana, and comes with a number of custom Grafana dashboards that allow you to monitor cluster of any size in any environment.</p> 334 </div> 335 336 <div class="col-md-4 col-sm-6 col-xs-12"> 337 <h4><i class="fa fa-code"></i> Joy to Use</h4> 338 <p>Coherence is just a library that you can embed into your application and start coding against. If you know how to use <code>java.util.Map</code>, you know how to get started with Coherence. From basic gets and puts, to Stream API, it's all there. Once you reach the limits of basic functionality, you can leverage some of the advanced features that will allow you to build better distributed applications.</p> 339 </div> 340 341 </div> 342 <!-- /FEATURED BOXES 3 --> 343 344 </div> 345 </section> 346 <!-- /WELCOME --> 347 348 <!-- FEATURES CALLOUT --> 349 <div class="callout dark"> 350 <div class="container"> 351 352 <a name="features"></a> 353 <div class="row"> 354 <div class="col-md-9"> 355 <h2>Coherence <strong>Features</strong></h2> 356 <h4>Coherence is designed to run 24/7, all year long. Nothing makes us more proud than when the users tell us they haven't touched their production cluster in years.</h4> 357 <h4>Although, we would like them to upgrade and use the new features from time to time...</h4> 358 </div> 359 </div> 360 361 </div> 362 </div> 363 <!-- /FEATURES CALLOUT --> 364 365 <!-- FEATURES --> 366 <section class="alternate"> 367 <div class="container"> 368 369 <div class="row"> 370 <div class="col-md-4"> 371 <h4>Clustering and <strong>Data Sharding</strong></h4> 372 <p>Coherence requires minimal configuration in order for the members to discover one another and form a cluster. This makes it just as easy to create a cluster of 500 members as it is to create a cluster of 5 members, both on the physical hardware and in virtualized environments.</p> 373 <p>Once the cluster is formed, Coherence will automatically shard the data across all the members and ensure that each piece of data has a backup copy as well. No cluster member is special, and any member can fail at any given time without significant impact on the cluster as a whole.</p> 374 <p>In other words, failure is expected and built into the architecture, not an exception.</p> 375 </div> 376 377 <div class="col-md-8 col-sm-4 text-center"> 378 <video controls class="shadow" src="assets/video/clustering.mp4" poster="assets/images/clustering.png" width="100%"/> 379 </div> 380 </div> 381 <hr/> 382 383 <div class="row"> 384 <div class="col-md-4"> 385 <h4>Scalability and <strong>High Avalability</strong></h4> 386 <p>Coherence can be easily scaled out to increase both the storage and the processing capacity, and can be scaled in just as easily to reduce resource usage when the additional capacity is not needed, to the limit of the in-memory data set size.</p> 387 <p>Whenever you add or remove cluster members, Coherence will automatically rebalance the data by moving some of the partitions to new members or be restoring partitions from backup for the departed members.</p> 388 <p>Coherence is aware of the network topology and always stores backups <strong>as far away as possible</strong> from the primary copy. In the common case of a cluster spanning multiple availability domains/zones in the cloud region, this allows you to lose a whole availability domain without any data loss.</p> 389 </div> 390 391 <div class="col-md-8 col-sm-4 text-center"> 392 <video controls class="shadow" src="assets/video/ha.mp4" poster="assets/images/ha.png" width="100%"/> 393 </div> 394 </div> 395 <hr/> 396 397 <div class="row"> 398 <div class="col-md-4"> 399 <h4>Disk-Based <strong>Persistence</strong></h4> 400 <p>You also have the option of persisting data to disk, either actively, as the changes happen, or on demand, by taking periodic snapshots of the cluster state. You can use either local or shared disk, but we strongly recommend that you use SSD in either case if you care about peformance. When running inside of Kubernetes, both regular volumes and PVCs are fully supported.</p> 401 <p>This allows you to quickly restore cluster state from disk in case of catastrophic failure, such as data center power loss, or to speed up whole-cluster upgrades if you can tolerate some downtime. If you can't, you can still use persistence to create backups, and rolling upgrades to perform cluster upgrades while keeping the system fully operational.</p> 402 </div> 403 404 <div class="col-md-8 col-sm-4 text-center"> 405 <video controls class="shadow" src="assets/video/persistence.mp4" poster="assets/images/persistence.png" width="100%"/> 406 </div> 407 </div> 408 <hr/> 409 410 <div class="row"> 411 <div class="col-md-4"> 412 <h4>Key-Value <strong>Data Store</strong></h4> 413 <p>Coherence <code>NamedCache</code> API is an extension of <code>java.util.Map</code> interface, so if you know how to use Java <code>Map</code>, you already know how to use Coherence for basic key-value operations. The difference is that now you have a fault tolerant <code>Map</code> that can be scaled across many cluster members and optionally persisted to disk</p> 414 <p>
414Key-based operations in Coherence are very efficient. Every cluster member is aware of the partition/shard distribution across the cluster, and the partition that a given key belongs to is determined using a consistent hashing algorithm. That means that any piece of data is only one direct network call away, regardless of the cluster size.</p> 415 <p>Unlike some of the competitors, Coherence lets you work with classes and objects like you normally would, and converts them to binary data for network transfer and storage purposes when necessary, using one of the several supported serialization formats.</p> 416 </div> 417 418 <div class="col-md-8 col-sm-4 text-center"> 419 <video controls class="shadow" src="assets/video/kv.mp4" poster="assets/images/kv.png" width="100%"/> 420 </div> 421 </div> 422 <hr/> 423 424 <div class="row"> 425 <div class="col-md-4"> 426 <h4>Parallel <strong>Queries</strong></h4> 427 <p>Being able to store and access data based on a key is great, but sometimes you need more than that. Coherence allows you to query on any data attribute present in your data model, and even allows you to define your own query <strong>filter</strong> if one of the built-in ones doesn't fit the bill. If you defined an index for a given query attribute, it will be used to optimize the query execution and avoid unnecessary deserialization.</p> 428 <p>Coherence executes queries in parallel, across the whole cluster, by default, allowing you to query across the whole data set at once without worrying about its physical distribution. However, it also allows you to execute a targeted query against a single cluster member in situations when you know that all possible results will be collocated based on data affinity configuration. This allows you to optimize queries even further, by limiting the amount of data that needs to be processed.</p> 429 </div> 430 431 <div class="col-md-8 col-sm-4 text-center"> 432 <video controls class="shadow" src="assets/video/query.mp4" poster="assets/images/query.png" width="100%"/> 433 </div> 434 </div> 435 <hr/> 436 437 <div class="row"> 438 <div class="col-md-4"> 439 <h4>Efficient <strong>Aggregation</strong></h4> 440 <p>Sometimes you don't need the actual data objects that are stored within the data grid, but the derived, calculated result based on them. This is where Coherence aggragation features come in handy.</p> 441 <p>Coherence <strong>aggregators</strong> are similar to Java <code>Collectors</code> -- they <em>accumulate</em> individual data objects into a partial result in parallel, across all cluster members, and then <em>combine</em> partial results from all the members into a final result that is ultimately returned to the caller.</p> 442 <p>Aggregations can be executed against the whole data set, or they can be limited to a subset of the data using a query or a key set. They also tend to scale linearly, so you can typically improve aggregation performance by simply spreading the data (and the processing load) across more cluster members.</p> 443 </div> 444 445 <div class="col-md-8 col-sm-4 text-center"> 446 <video controls class="shadow" src="assets/video/aggregation.mp4" poster="assets/images/aggregation.png" width="100%"/> 447 </div> 448 </div> 449 <hr/> 450 451 <div class="row"> 452 <div class="col-md-4"> 453 <h4>In-Place <strong>Processing</strong></h4> 454 <p>If there is one defining feature that makes Coherence stand out from many competing technologies, and allows you to write efficient distributed a
454pplications, this is it.</p> 455 <p>The problem with many applications that both hurts their performance and prevents them from scaling is that they simply move too much data over the network and require complicated distributed concurrency control. <em>Read-modify-write</em> is probably the most common data access pattern in vast majority of applications, even though it is very inefficient way of performing data modification.</p> 456 <p>Coherence addresses this problem by allowing you to send the data modification code into the grid and execute it where the data is, against one or more entries. This can not only significantly impact how much data needs to be moved over the wire, but it also takes care of cluster-wide concurrency control — each <strong>entry processor</strong> has the exclusive access to the entry it is processing for the duration of its execution.</p> 457 <p>Think of it as stored procedures, but using Java lambdas and rich server-side domain models.</p> 458 </div> 459 460 <div class="col-md-8 col-sm-4 text-center"> 461 <video controls class="shadow" src="assets/video/processor.mp4" poster="assets/images/processor.png" width="100%"/> 462 </div> 463 </div> 464 <hr/> 465 466 <div class="row"> 467 <div class="col-md-4"> 468 <h4>Sophisticated <strong>Event Model</strong></h4> 469 <p>Coherence allows you to react to almost any event that happens within the cluster: members joining or leaving, services starting or shutting down, data partitions being transferred or restored from disk — you name it, it is probably there.</p> 470 <p>Of course, you can also observe data modification events, both on the server-side and using any of the supported clients. Whether it's entry inserts, updates and removals, or entry processor executions, it's all observable (and in many cases, vetoable).</p> 471 <p>Coherence <strong>events</strong> and <strong>interceptors</strong> also allow you to leverage Coherence data grid as the central integration hub for multiple back end systems, and provide what appears to be a single unified data store for your front end applications. 472 </div> 473 474 <div class="col-md-8 col-sm-4 text-center"> 475 <video controls class="shadow" src="assets/video/events.mp4" poster="assets/images/events.png" width="100%"/> 476 </div> 477 </div> 478 </div> 479 </section> 480 <!-- /FEATURES --> 481 482 <!-- DARK CALLOUT --> 483 <div class="callout dark arrow-up"> 484 <div class="container text-center"> 485 486 <h2>And many more...</h2> 487 <p>Doesn't matter if you are a begginer or an advanced developer. Coherence is easy to use, distributed to its core, and has a number of features that will make development of modern cloud native applications a breeze.</p> 488 489 <div class="divider half-margins"><!-- divider --></div> 490 491 <div class="row text-left"> 492 <div class="col-md-4 col-sm-4"> 493 <ul class="list-icon spaced check-circle"> 494 <li>Synchronous and Asynchronous API</li> 495 <li>Extensive Security Features</li> 496 <li>Support for CDI</li> 497 <li>Support for Eclipse MicroProfile</li> 498 <li>Support for OpenTracing</li> 499 <li>Support for OpenMetrics</li> 500 501 </ul> 502 </div> 503 <div class="col-md-4 col-sm-4"> 504 <ul class="list-icon spaced check-circle"> 505 <li>Native Clients for Java, .NET and C++</li> 506 <li>REST API</li> 507 <li>JMX and REST-based Management</li> 508 <li>
508Data Affinity Support</li> 509 <li>Partition-Local Transactions</li> 510 <li>Built-In Durable Messaging</li> 511 </ul> 512 </div> 513 <div class="col-md-4 col-sm-4"> 514 <ul class="list-icon spaced check-circle"> 515 <li>Custom Kubernetes Operator</li> 516 <li>Integration with Prometheus</li> 517 <li>Integration with Jaeger</li> 518 <li>Awesome Grafana Dashboards</li> 519 <li>Extensive Documentation</li> 520 <li>Realistic Sample Applications</li> 521 </ul> 522 </div> 523 </div> 524 525 </div> 526 </div> 527 <!-- /DARK CALLOUT --> 528 529 <!-- QUICKSTART CALLOUT --> 530 <div class="callout styleBackgroundColor"><!-- add "styleBackgroundColor" class for colored background and white text OR "dark" for a dark callout --> 531 <div class="container"> 532 533 <div class="row"> 534 535 <a name="quickstart"></a> 536 <div class="col-md-9"><!-- title + shortdesc --> 537 <h2>Quick <strong>Start</strong></h2> 538 <h4>Did we convince you to <strong>give Coherence a try?</strong></h4> 539 <p> 540 The following sections will walk you through the implementation of a simple 541 To Do List application using Coherence and Helidon, show you how to package 542 it into a Docker image, run it, and prove that it works. 543 </p> 544 <p> 545 We could've done a simpler, "Hello World"-style app, but where is the fun in that? 546 </p> 547 </div> 548 549 </div> 550 </div> 551 </div> 552 <!-- /QUICKSTART CALLOUT --> 553 554 <!-- QUICKSTART --> 555 <section> 556 <div class="container"> 557 558 <div class="row featured-box-minimal"> 559 <div class="col-md-4"> 560 <h4><i class="fa fa-play-circle styleColor"></i> Create Maven Project</h4> 561 <p> 562 The <code>pom.xml</code> file is a good starting point for Helidon microservices 563 that use Coherence as a data store. 564 </p> 565 <p>Few things are worth pointing out:</p> 566 <ol> 567 <li> 568 The parent POM is set to <code>io.helidon.applications:helidon-mp</code> and 569 we add Helidon MicroProfile bundle and JSON Binding support as dependencies. 570 This ensures that all necessary Helidon dependencies are imported correctly. 571 </li> 572 <li> 573 We add Coherence CDI Server as a dependency, which ensures that Coherence server 574 is started within Helidon application via CDI extension. 575 </li> 576 <li> 577 We add Coherence MicroProfile Config as a dependency, which allows us to configure 578 Coherence using Helidon MP Configuration and changes Coherence logging defaults 579 to align Coherence log output with Helidon logging format. 580 </li> 581 <li> 582 We configure Jandex plugin to index any CDI beans we may have, in order to speed 583 up application startup. 584 </li> 585 <li> 586 We configure Jib plugin within a <code>docker</code> profile, which allows us to 587 create Docker image for our service within Maven build, without the need for a 588 separate <code>
588Dockerfile</code>. 589 </li> 590 </ol> 591 </div> 592 593 <div class="col-md-8"> 594 <pre class="line-numbers" data-src="quickstart/pom.xml"></pre> 595 </div> 596 </div> 597 <hr/> 598 599 <div class="row featured-box-minimal"> 600 <div class="col-md-4"> 601 <h4><i class="fa fa-play-circle styleColor"></i> Implement Data Model</h4> 602 <p> 603 The <code>Task</code> class on the right represents data model for our to-do 604 items that is used both within REST API (as a way to marshal JSON requests and 605 responses) and as a storage data model class in Coherence. It is a very simple, 606 serializable POJO. 607 </p> 608 <p> 609 Coherence provides more efficient serialization mechanisms as well, but 610 in this example we are using plain Java serialization for simplicity. 611 </p> 612 </div> 613 614 <div class="col-md-8"> 615 <pre class="line-numbers" data-src="quickstart/src/main/java/com/oracle/coherence/examples/todo/Task.java"></pre> 616 </div> 617 </div> 618 <hr/> 619 620 <div class="row featured-box-minimal"> 621 <div class="col-md-4"> 622 <h4><i class="fa fa-play-circle styleColor"></i> Implement REST API</h4> 623 <p> 624 The REST API is implemented as a JAX-RS resource that will be automatically 625 discovered and deployed by Helidon. 626 </p> 627 <p> 628 Coherence <code>NamedMap</code> instance is injected as a dependency by CDI, 629 and is used to implement data access logic in the various resource methods. 630 </p> 631 <p> 632 Some of the resource methods, such as <code>createTask</code> and 633 <code>deleteTask</code> are fairly simple and perform familiar <code>Map.put</code> 634 and <code>Map.remove</code> operations against Coherence <code>NamedMap</code>. 635 </p> 636 <p> 637 The remaining two methods are a bit more interesting and demonstrate some of 638 the additional features of <code>NamedMap</code>. The <code>getTasks</code> 639 method shows usage of Coherence Query API, and calls <code>NamedMap.values</code> 640 to retrieve filtered, sorted set of results. 641 </p> 642 <p> 643 The <code>updateTask</code> method on the other hand shows an example of 644 entry processor execution against a single entry by sending a lambda to a 645 storage member that owns the task with a given identifier, and updating 646 the task in-place. 647 </p> 648 </div> 649 650 <div class="col-md-8"> 651 <pre class="line-numbers" data-src="quickstart/src/main/java/com/oracle/coherence/examples/todo/ToDoResource.java"></pre> 652 </div> 653 </div> 654 <hr/> 655 656 <div class="row featured-box-minimal"> 657 <div class="col-md-4"> 658 <h4><i class="fa fa-play-circle styleColor"></i> Enable CDI</h4> 659 <p> 660 Our service is a CDI Bean Archive, so we need to make sure it is treated 661 that way by adding <code>beans.xml</code> file to the <code>resources/META-INF</code> 662 directory. 663 </p> 664 </div> 665 666 <div class="col-md-8"> 667 <pre class="line-numbers" data-src="quickstart/src/main/resources/META-INF/beans.xml"></pre> 668 </div> 669 </div> 670 <hr/> 671 672 <div class="row featured-box-minimal"> 673 <div class="col-md-4"> 674 <h4><i class="fa fa-play-circle styleColor"></i> Configure Logging</h4> 675 <p> 676 Both Coherence and Helidon are configured to use Java Logging, so we need 677 to provide necessary Java Logging configuration by adding <code>logging.properties</code> 678 file on the right to the <code>resources</code> directory. 679 </p> 680 </div> 681 682 <div class="col-md-8"> 683 <pre class="line-numbers" data-src="quickstart/src/main/resources/logging.properties"></pre> 684 </div> 685 </div> 686 <hr/> 687 688 <div class="row featured-box-minimal"> 689 <div class="col-md-4"> 690 <h4><i class="fa fa-play-circle styleColor"></i> Build the Service</h4> 691 <p> 692 With all the pieces in place, we are now ready to compile the service and 693 create a Docker image for it. 694 </p> 695 </div> 696 697 <div class="col-md-8"> 698 <pre class="command-line" data-user="user" data-host="localhost"> 699 <code class="language-bash"> 700 mvn clean install 701 mvn package -P docker 702 </code> 703 </pre> 704 </div> 705 </div> 706 <hr/> 707 708 <div class="row featured-box-minimal"> 709 <div class="col-md-4"> 710 <h4><i class="fa fa-play-circle styleColor"></i> Run the Service</h4> 711 <p> 712 Once the Docker image is created, you can run the service locally. 713 </p> 714 </div> 715 716 <div class="col-md-8"> 717 <pre class="command-line" data-user="user" data-host="localhost"> 718 <code class="language-bash"> 719 docker run -m 200MB -p 7001:7001 coherence/quickstart 720 </code> 721 </pre> 722 </div> 723 </div> 724 <hr/> 725 726 <div class="row featured-box-minimal"> 727 <div class="col-md-4"> 728 <h4><i class="fa fa-play-circle styleColor"></i> Test the Service</h4> 729 <p> 730 Now that the service is up and running, you can make HTTP request 731 to the API endpoints using HTTP client of your choice. We strongly 732 recommend <a href="https://www.postman.com" target="_blank">Postman</a> 733 but <code>curl</code> will do. 734 </p> 735 </div> 736 737 <div class="col-md-8"> 738 <pre class="command-line" data-user="user" data-host="localhost" data-filter-output="(out)"> 739 <code class="language-bash"> 740 curl -i -X POST -H "Content-Type: application/json" -d '{"description": "Learn Coherence"}' http://localhost:7001/tasks 741 (out)HTTP/1.1 204 No Content 742 (out)Date: Tue, 23 Jun 2020 10:40:57 GMT 743 (out)connection: keep-alive 744 (out) 745 curl -X GET -H "Accept: application/json" http://localhost:7001/tasks 746 (out)[{"completed":false,"description":"Learn Coherence","id":"155512ed-bf79-4515-a92a-734f65e721d0"}] 747 (out) 748 curl -X PUT -H "Content-Type: application/json" -d '{"completed": true}' http://localhost:7001/tasks/155512ed-bf79-4515-a92a-734f65e721d0 749 (out){"completed":true,"description":"Learn Coherence","id":"155512ed-bf79-4515-a92a-734f65e721d0"} 750 (out) 751 curl -i -X DELETE http://localhost:7001/tasks/155512ed-bf79-4515-a92a-734f65e721d0 752 (out)HTTP/1.1 204 No Content 753 (out)Date: Tue, 23 Jun 2020 10:50:05 GMT 754 (out)connection: keep-alive 755 </code> 756 </pre> 757 </div> 758 </div> 759 760 </div> 761 </section> 762 <!-- /QUICKSTART --> 763 <!-- QUICKSTART CALLOUT -->
764 <div class="callout styleBackgroundColor"><!-- add "styleBackgroundColor" class for colored background and white text OR "dark" for a dark callout --> 765 <div class="container"> 766 767 <div class="row"> 768 769 <div class="col-md-9"><!-- title + shortdesc --> 770 <h2><strong>Congratulations!</strong></h2> 771 <h4>You've just implemented your first stateful service using Coherence and Helidon</h4> 772 </div> 773 774 </div> 775 </div> 776 </div> 777 <!-- /QUICKSTART CALLOUT --> 778 779 <!-- TESTIMONIALS --> 780 <section> 781 <div class="container"> 782 783 784 <div class="row"> 785 <h2>What are our users saying?</h2> 786 <div class="col-md-8 col-sm-4 testimonial"> 787 <p> 788 Stateless systems are extremely data hungry, and state management (at scale) is one of the biggest 789 challenges we've faced. At our scale, no traditional data layer would've worked.<br/><br/> 790 Coherence allows us to manage 9 terabytes of data in memory, in a format easily consumable by our services. This 791 enables us to handle 1.3 billion calls, and produce 300 million events per day, across 5,600 microservices.</p> 792 <cite class="block"><strong>Arun Giri</strong>, Union Pacific Railroad</cite> 793 </div> 794 795 <div class="divider half-margins"></div> 796 797 </div> 798 799 <div class="row"> 800 <div class="col-md-12 col-sm-4"> 801 <video controls class="shadow" src="assets/video/arun-giri-interview.mp4" width="100%"/> 802 </div> 803 </div> 804 805 </div> 806 </section> 807 <!-- /TESTIMONIALS --> 808 809 810 <!-- FOOTER --> 811 <footer id="footer"> 812 <div class="container"> 813 814 <div class="row"> 815 816 <!-- col #1 --> 817 <div class="spaced col-md-4 col-sm-4"> 818 819 <h4>Stay <strong>Connected</strong></h4> 820 821 <p> 822 Connect with us on social networks. 823 </p> 824 825 <p class="block"><!-- social --> 826 <a href="https://twitter.com/OracleCoherence" target="_blank" class="social fa fa-twitter"></a> 827 <a href="https://www.linkedin.com/groups/1782166/" target="_blank" class="social fa fa-linkedin"></a> 828 <a href="http://www.facebook.com/oraclecoherencepm" target="_blank" class="social fa fa-facebook"></a> 829 </p><!-- /social --> 830 831 <h4><strong>Contribute</strong></h4> 832 833 <ul class="list-unstyled nobordered"> 834 <li><a class="block" href="https://github.com/oracle/coherence" target="_blank"><i class="fa fa-github"></i> Fork us on GitHub and start coding.</a></li> 835 </ul> 836 837 </div> 838 <!-- /col #1 --> 839 840 <!-- col #2 --> 841 <div class="spaced col-md-8 col-sm-8"> 842 843 <div class="row"> 844 845 <div class="col-md-4 col-sm-12 col-xs-12"> 846 <h4>Learn <strong>More</strong></h4> 847 <ul class="list-unstyled nobordered"> 848 <li><a class="block" href="https://www.youtube.com/user/OracleCoherence" target="_blank"><i class="fa fa-youtube"></i> Watch our Videos</a></li> 849 <li><a class="block" href="https://medium.com/oracle-coherence" target="_blank"><i class="fa fa-medium"></i> Read our Blog</a></li> 850 <li><a class="block" href="https://stackoverflow.com/tags/oracle-coherence" target="_blank"><i class="fa fa-stack-overflow"></i> Find Answers</a></li> 851 <li><a class="block" href="https://join.slack.com/t/oraclecoherence/shared_invite/zt-9ufv220y-Leudk0o5ntgNV0xraa8DNw" target="_blank"><i class="fa fa-slack"></i> Chat with Us</a></li> 852 </ul> 853 </div> 854 855 <div class="col-md-4 hidden-sm hidden-xs"> 856 <h4>Related <strong>Projects</strong></h4> 857 <ul class="list-unstyled nobordered"> 858 <li><a class="block" href="https://github.com/oracle/coherence-operator" target="_blank"><i class="fa fa-external-link"></i> Coherence Operator</a></li> 859 <li><a class="block" href="https://helidon.io" target="_blank"><i class="fa fa-external-link"></i> Helidon </a></li> 860 <li><a class="block" href="https://www.graalvm.org" target="_blank"><i class="fa fa-external-link"></i> GraalVM</a></li> 861 <li><a class="block" href="https://verrazzano.io" target="_blank"><i class="fa fa-external-link"></i> Verrazzano</a></li> 862 <li><a class="block" href="https://github.com/coherence-community/coherence-spring" target="_blank"><i class="fa fa-external-link"></i> Spring Integration</a></li> 863 <li><a class="block" href="https://github.com/coherence-community/coherence-hibernate" target="_blank"><i class="fa fa-external-link"></i> Hibernate Integration</a></li> 864 </ul> 865 </div> 866 867 <!-- 868 <div class="col-md-4 hidden-sm hidden-xs"> 869 <h4>About <strong>Us</strong></h4> 870 <ul class="list-unstyled nobordered"> 871 <li><a class="block" href="team.html"><i class="fa fa-angle-right"></i> Meet the Team</a></li> 872 <li><a class="block" href="events.html"><i class="fa fa-angle-right"></i> Upcoming Events</a></li> 873 <li><a class="block" href="presentations.html"><i class="fa fa-angle-right"></i> Past Presentations</a></li> 874 <li><a class="block" href="faq.html"><i class="fa fa-angle-right"></i> FAQ</a></li> 875 </ul> 876 </div> 877 --> 878 879 </div> 880 881 </div> 882 <!-- /col #2 --> 883 884 </div> 885 886 </div> 887 888 <hr /> 889 890 <div class="copyright"> 891 <div class="container text-center fsize12">
892 Copyright © 2020, 2025 Oracle and/or its affiliates. All rights reserved • Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners. 893 </div> 894 </div> 895 </footer> 896 <!-- /FOOTER --> 897 898 <a href="#" id="toTop"></a> 899 900 </div><!-- /#wrapper --> 901 902 <!-- JAVASCRIPT FILES --> 903
903<script type="text/javascript" src="assets/plugins/jquery-2.2.3.min.js"></script>
903 904
904<script type="text/javascript" src="assets/plugins/jquery.isotope.js"></script>
904 905
905<script type="text/javascript" src="assets/plugins/masonry.js"></script>
905 906 907
907<script type="text/javascript" src="assets/plugins/bootstrap/js/bootstrap.min.js"></script>
907 908
908<script type="text/javascript" src="assets/plugins/magnific-popup/jquery.magnific-popup.min.js"></script>
908 909
909<script type="text/javascript" src="assets/plugins/owl-carousel/owl.carousel.min.js"></script>
909 910
910<script type="text/javascript" src="assets/plugins/knob/js/jquery.knob.js"></script>
910 911
911<script type="text/javascript" src="assets/plugins/flexslider/jquery.flexslider-min.js"></script>
911 912 913 <!-- REVOLUTION SLIDER --> 914
914<script type="text/javascript" src="assets/plugins/revolution-slider/js/jquery.themepunch.tools.min.js"></script>
914 915
915<script type="text/javascript" src="assets/plugins/revolution-slider/js/jquery.themepunch.revolution.min.js"></script>
915 916
916<script type="text/javascript" src="assets/js/revolution_slider.js"></script>
916 917 918 <!-- PRISM --> 919
919<script type="text/javascript" src="assets/js/prism.js"></script>
919 920 921
921<script type="text/javascript" src="assets/js/scripts.js"></script>
921 922 </body> 923</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.