Coherence Step by Step 第一篇 入门(四) 建立第一个Coherence应用(翻译)
这个章节提供了一步一步的指导,建立和运行一个基本的Coherence 例子,演示许多基础的Coherence 概念。这个应用例子是一个简单的hello world应用,实现了独立的java应用的jsp应用。最后,JDeveloper章节包含了提供基本的设置JDeveloper的指导,当开发Coherence时。
NOTE:这个章节的例子是基本的,只是为了教一般的概念。更多的高级的例子,下载包含了文档库的Coherence自立。
1.Task1:定义缓存
缓存定义在缓存配置部署描述符中,应用程序通过名字来引用。这允许在不改变应用程序代码的情况下改变缓存的配置。下面的缓存配置定义了一个基本的分布式缓存,它被映射到了一个名为hello-example的缓存。
定义一个cahce:
- 新建一个xml文件,没能够为example-config.xml。
- 复制下面的分布式缓存定义到文件中:
<?xml version="1.0"?> <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd"> <caching-scheme-mapping> <cache-mapping> <cache-name>hello-example</cache-name> <scheme-name>distributed</scheme-name> </cache-mapping> </caching-scheme-mapping> <caching-schemes> <distributed-scheme> <scheme-name>distributed</scheme-name> <service-name>DistributedCache</service-name> <backing-map-scheme> <local-scheme/> </backing-map-scheme> <autostart>true</autostart> </distributed-scheme> </caching-schemes> </cache-config>
- 保存并关闭文件。
2.Tack2:配置和启动Cluster
缓存被宿主到一个coherence集群上。在运行时,任何自动的运行Coherence的jvm进程,加入集群和能够访问缓存和通过集群提供其他的服务。当一个jvm加入集群,被成为集群节点,或者叫做集群成员。本章的例子应用,两个集群中单独的java进程:一个一个缓存服务器进程和hello world应用进程。为了简单起见,两个进程混合在一太计算机上。缓存服务器,默认的,配置额缓存存储缓存数据。
例子的cluster使用了一个operational override file来修改即用的默认的集群配置文件。尤其要指出的是,默认的配置文件被修改来创建一个私有的集群,它确保额两个进程不会尝试加入一个网络上已经存在的Coherence集群。默认的配置文件也被修后用来加载example-config.xml缓存配置文件来代替默认的缓存配置文件。
配置和启动集群例子:
- 创建名为tangosol-cohernce-override.xml文件。
- 添加下面的override configuration,并且替换里面的cluster_name和port,用一个这个集群中唯一的值。例如,使用你的名字作为集群名,用你电话号码的后四位作为端口号。
<?xml version='1.0'?> <coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd"> <cluster-config> <member-identity> <cluster-name>cluster_name</cluster-name> </member-identity> <multicast-listener> <address>224.3.6.0</address> <port>port</port> <time-to-live>0</time-to-live> </multicast-listener> </cluster-config> <configurable-cache-factory-config> <init-params> <init-param> <param-type>java.lang.String</param-type> <param-value system-property="tangosol.coherence.cacheconfig"> example-config.xml</param-value> </init-param> </init-params> </configurable-cache-factory-config> </coherence>
- 保存文件到example-config.xml文件相同的目录。
- 从命令提示符启动一个缓存服务器实例,使用DefaultCacheServer类,包含了coherence.jar库和配置文件,用一个java –cp选项。例如:java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar com.tangosol.net.DefaultCacheServer
3.Task3:创建和运行基本的Coherence单独应用
第三步是一个多个部分的步骤,包含了一个Hello world的应用,指导运行,并且验证例子。应用从命令行运行,启动一个缓存节点加入一个缓存服务器。应用程序存一个键为k1 值为hello world的缓存,然后在推出前获取和打印这个键的值。最后,另外一个集群节点启动来验证缓存中的键。
3.1 创建一个独立的应用
应用程序使用Coherence API来与缓存访问和交互。CahceFactory类用来获取一个缓存实例,NamedCache接口迎来检索和存储对象进缓存。Helloworld应用是最基本的,但是它演示时用了CacheFactory类和NamedCache接口。
package com.examples; import com.tangosol.net.CacheFactory; import com.tangosol.net.NamedCache; public class HelloWorld { public static void main(String[] args) { String key = "k1"; String value = "Hello World!"; CacheFactory.ensureCluster(); NamedCache cache = CacheFactory.getCache("hello-example"); cache.put(key, value); System.out.println((String)cache.get(key)); CacheFactory.shutdown(); } }
3.2 运行独立的应用
运行独立应用的例子:
1.从命令提示符,编译hello world 应用,如:
javac -cp COHERENCE_HOME\lib\coherence.jar com\examples\HelloWorld.java
2.运行Hello world应用,包含了coherence.jar库和配置文件,如用java –cp的选项。另外,限制客户端本地存储分布式数据,如:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.example.HelloWorld
这个hello world应用启动。缓存工厂实例被创建,成为一个集群成员。k1键,值为hello world,从hello-example缓存中加载。键从缓存中被检索,值被作为输出的一部分。最后,缓存工厂关闭,在hello world应用推出之前离开集群。
3.3 验证缓存
本例中的缓存服务器被配置了,默认的,存储缓存数据。数据对所有的集群成员是有效的,而是成员离开集群,数据也是存在的。例如,hellp world应用在加载和显示缓存的键后退出。然而,缓存和键仍然对其他的集群成员有效。
这一步使用了缓存工程的命令行工具链连接hello-example缓存,列出了缓存中的所有的条目。这演示了持久化和分布式的特性。
验证缓存:
-
从命令提示符,开启一个单独的缓存工厂实例,使用CacheFactory类,包含了coherence.jar库的配置文件,使用java -cp的选项。例如:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.tangosol.net.CacheFactory
缓存工厂实例开启,成为集群的成员,返回了命令行工具的名利提示符。
-
在命令行工具的命令提示符,或去hello-example缓存,使用cache 命令:
cache hello-example
-
在命令行工具的命令提示符,检索缓存的内容,使用list命令
list
命令返回iuhe显示
k1=Hello world!
4.Task4:创建和运行一个基本的Coherence JavaEE Web 应用
步骤4是多个部分的步骤,包含了Hello World 应用作为jsp page的重新实现。指导包含了打包web app的例子部署在javaee的服务器上。应用运行在应用程序服务器上,开启了一个缓存节点加入一个缓存服务器。应用放一个名为k2的键,值为hello world到缓存hello-exa,ple缓存中,在推出之前获取和打印这个键的值。最后,启动另一个节点来验证缓存中的值。
4.1 创建web app
1. 创建基本的web app的目录结构如下:
/
/WEB-INF
/WEB-INF/classes
/WEB-INF/lib
2.复制下面的jsp到一个文本文件。另存为hello.jsp 在web app的根目录下。
<html> <head> <title>My First Coherence Cache</title> </head> <body> <h1> <%@ page language="java" import="com.tangosol.net.CacheFactory, com.tangosol.net.NamedCache" %> <% String key = "k2"; String value = "Hello World!"; CacheFactory.ensureCluster(); NamedCache cache = CacheFactory.getCache("hello-example"); cache.put(key, value); out.println((String)cache.get(key)); CacheFactory.shutdown(); %> </h1> </body> </html>
3.复制下面空的web app的部署描述符到文本文件。另存为web.xml到/web-info目录。
<?xml version = '1.0' ?>
<web-app/>
4.复制coherence.jar文件到web-info/lib目录。
5.复制example-config.xml文件和tangosol-cohernce-overrie.xml文件到web-info/classes目录。
6.创建web ARchive文件(WAR),使用jar工具,保存文件为htllo.war。例如,从命令提示符中用下面的命令,在web app的根目录下使用:
jar -cvf hello.war *
归档后,应该包含下面文件
/hello.jsp
/WEB-INF/web.xml
/WEB-INF/classes/example-config.xml
/WEB-INF/classes/tangosol-coherence-override.xml
/WEB-INF/lib/coherence.jar
4.2 部署和运行web app的例子
部署和运行web app:
1.部署hello.war文件到javaee 服务器。
2.从一个浏览器,运行hello world 应用,通过访问hello.jsp文件,url是如下。替换host和port,用指定的部署的值。
http://host:port/hello/hello.jsp
hello world应用开启。缓存工厂实例被创建,成为一个集群成员。值为hello world 的k2键被加载到hello-example缓存中。然后从缓存中检索这个键,值会显示在浏览器中。最后,缓存工厂关闭,离开集群。
4.3 验证缓存
缓存服务器在本例中默认的被配置了存储缓存数据。数据对所有的集群成员有效,即使成员离开集群,数据也存在。例如,在加载和显示了键之后,hello world 应用推出。然后,缓存和键仍然对其他所有集群成员有效。
这个步骤使用了缓存工厂命令行工具来连接hello-example缓存。列出了韩村中所有的项。这个展示了Coherence缓存的持久和分布式的特性。
验证缓存:
1.从命令提示符,启动单独的一个缓存工厂实例,使用CacheFactory类,包含了coherence.jar库和配置文件,使用java -cp的选项,例如:
java -cp COHERENCE_HOME\config;COHERENCE_HOME\lib\coherence.jar -Dtangosol.coherence.distributed.localstorage=false com.tangosol.net.CacheFactory
缓存工程启动,成为集群的成员,返回命令行工具的命令提示符。
2.在命令行工具的命令提示符,获取hello-example缓存,使用cache命令:
cache hello-exampe
3.在命令行工具的命令提示符,检索缓存内容,使用list命令
list
命令返回和显示
k2=hello world!
5.使用JDeveploper开发Coherence
这个章节提供了基本的介绍,如果建立一个JDeveloper开发环境。指导的是用IDE运行Coherence,这是一个开发时常用的方法。虽然指导是针对JDeveloper,但是对其他的IDE也是同样的方法。
5.1 在JDeveloper中运行Coherence
JDeveloper能够运行缓存服务器(DefaultCacheServer)和缓存(CacheFactory)实例。每个实例作为一个单独的java进程来启动,发出标准的输出到进程日志。输入(如缓存命令)能够在进程中被直接输入,如果它是从命令行启动的。这个配置促进了开发和测试Coherence解决方案。
在JDeveloper中运行Coherence:
1.在JDeveloper中,创建一个新的Generic Application,它包含了一个单独的项目。
2.在应用程序导航上,双击新建项目。弹出了项目属性对话框。
3.选择Libraries and Classpath节点。Libraries和Classpath也显示。
4.在这也上,双击Add JAR/Directory。Add Archive或者目录对象框显示。
5.从目录树中选择COHERENCE_HOME\lib\coherence.jar,点击Select。coherence.jar库显示在Classpath条目列表中,显示如下:
6.从项目属性对象框中,选择Run/Debug/Profile节点。Run/Debug/Profile页显示。
7.此页中,点击New。Create Run Configuration 对话框显示。在名字文本框中,输入一个名字作为新的运行配置。在下拉框的Copy Setting中选择default。点击ok。心得运行配置在RUN Configuration 列表中显示。
8.从Run Configuration 列表中,选择性的Run Configuration ,点击edit。编辑Run Configuration对话框显示,Launch Settting节点被选中。
9.在Launch Setting页中,点击浏览,选择一个默认的Run Target。选择默认的Run Target对话框显示。
10.在目录树里,选择COHERENCE_HOME
\lib\coherence.jar\com\tangosol\net\DefaultCacheServer.class并点击open。DefaultCacheServer类被输入。作为默认的run target,如下显示:
tip:使用java 选项文本框来设置Coherence 系统属性。
11.选择Tool Setting 节点。Tool setting页显示。
12.在Additional Runner Options部分,点击Allow Program Input选择框。盒子中选中的标记表示这个选项被选择了。
13.点击ok。
14.重复步骤6到步骤14,选择COHERENCE_HOME
\lib\coherence.jar\com\tangosol\net\CacheFactory.class 作为默认的run target,如下所示:
15.点击ok,关闭系统属性对话框。
16.使用Run 按钮的下拉列表,选择为缓存服务器设置启动运行配的配置。缓存服务器实例启动后,输出信息显示在进程日志标签页里,如下所示:
17.使用运行按钮的下拉菜单,选择和启动缓存的配置。缓存实例启动后,输出信息显示在进程日志标签页里,如下所示:
18.在缓存工厂的运行日志标签页里,使用输入框,位于标签页的下面,用来和缓存实例交互。例如,输入help,按回车,看见可用的命令列表。。
5.2 在Jdeveloper中查看Thread Dumps
java能够dump一个线程列表和他们所持有的所有的锁来标准输出。在linux环境中使用kill命令,在windows环境中使用ctrl+break命令。Thread dumps是非常有帮助的,在开发时用来排错(例如,找出死锁)。
当开发Coherence 解决方案是,你能查看线程dumps,直接在线程日志的标签页。也可以通过发送上面的信息给java进程来获得。
查看线程dumps:
1.从shell或者命令提示符,使用jdk_home/bin/jps 获取进程id(PID),这个java进程是你想要看线程dump的进程。
2.在linux上,使用kill –3 PID 发送一个QUIT的信号给进程。在windows上,你必须使用第三方的工具(如SENDSIGNAL),发送一个ctrl+bread信号给远程的java进程。
线程dump在进程日志中是可见的。
5.3 创建配置文件
JDeveloper中创建Coherence的配置文件。JDeveloper加载适当的XSD文件,列出了所有的组件面板的元素。此外,JDeveloper验证配置文件,根据XSD和提供哦你高了XML节点的完整性。下面的过程创建了缓存配置文件和oerational override file。同样的过程可以用于任何Coherence配置文件。
创建缓存配置文件和operational override 文件:
1.提取coherence-cache-config.xsd
, coherence-cache-config-base.xsd
, coherence-operational-config.xsd
, coherence-operational-config-base.xsd
, and coherence-config-base.xsd
,从COHERENCE_HOME
\lib\coherence.jar库中,到计算机上的一个目录里。
2.在JDeveloper应用程序导航中,双击coherence的项目,项目属性对话框显示了。
3.展开Project Source Paths节点,点击Resources。Resources页显示。
4.在Resource里面,点击Add来查找和选择一个你提取的XSD文件的目录
5.在包含的标签页中,单机Add,选择XSD文件。可选择的是,你能够允许Developer包含所有的文件,而不用明确指定添加一个文件。
6.点击ok。XSD文件被Inclueded标签页列出来 显示如下:
7.点击OK来关闭项目书香对话框。XSD在应用程序导航的Resources 文件夹里列出来。
8.在File menu中,点击New,New Gallery 对话框显示。
9.在目录里面,展开General节点,点击xml。
10.选择xml文档,点击ok。创建xml文件的对话框显示。
11.输入coherence-cache-config.xml 作为文件名,保存它到xsd所在的目录。在运行时,这个文件必须在classpath中被找到,必须在coherence.jar文件加载之前被加载。
12.点击ok。缓存配置文件被创建,打开,编辑,在应用程序导航的Resources文件夹下列出来了。
13.天下下面的方案应用,在文件的开始出:
<?xml version="1.0" ?> <cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config coherence-cache-config.xsd">
组件面泛刷新,并列出了所有额可用的coherence-cache-config.xsd文件。
14. 保存coherencep-cache-config.xml文件。
15. 重复步骤8到12,创建operational override fie,成为tangosol-coherence-override.xml。运行时,这个文件必须在classpath中找到。
16.添加下面的方案应用在文件的开始出:
<?xml version="1.0" ?>
<coherence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.oracle.com/coherence/coherence-operational-config" xsi:schemaLocation="http://xmlns.oracle.com/coherence/ coherence-operational-config coherence-operational-config.xsd">
组件面板刷新,并列出了所有的可用的元素,从coherence-operational-config.xsd。
17.保存并关闭tangosol-coherence-override.xml文件。