Apache Geode 部署jar包到成员

      你可以动态的部署你的应用jar文件到分布式系统中指定的成员或是所有的成员。Geode自动的追踪jar文件的版本;自动加载部署的jar文件到类路径;并且自动注册jar文件所包含的所有函数。

 

      为了在Apache Geode中部署或卸载jar文件,使用gfsh部署或卸载命令。你可以部署单个jar或是多个jar(通过指定jar文件名或指定一个包含jar文件的目录),你同样可以将部署的目标指定为一个成员组或多个成员组。例如,在连接到你想要部署jar文件的分布式系统之后,你可以在gfsh提示窗口中键入如下命令:

    

gfsh> deploy --jar=group1_functions.jar

     这个命令group1_functions.jar文件布署到了分布式系统中的所有成员中,为了部署jar文件到部份

 

成员,使用 --group参数,例如:

  

gfsh> deploy --jar=group1_functions.jar --group=MemberGroup1

 在这个例子中,假设你启动时已经定义了你想使用的成员组

。查看《配置并运行一个集群》来获得有关如何定义成员组并添加成员到一个组中的更多信息。 

 

部署位于指定目录下的所有jar文件到所有的成员:

 

gfsh> deploy --dir=libs/group1-libs
部署时你可以提供jar文件名或是jar文件的目录,但你不能一次指定两个。

 

 

卸载分布式系统中所有之前部署的jar文件:

 

gfsh> undeploy
卸载指定的的jar文件:

 

 

gfsh> undeploy --jar=group1_functions.jar
以指定的成员组为目标卸载所有jar文件:

 

 

gfsh> undeploy --group=MemberGroup1
只有在MemberGroup1这个成员组中之前部署的所有jar文件会被卸载。

 

查看在你的分布式系统中部署的所有jar文件:

 

gfsh> list deployed
查看在指定组中部署的所有所有jar文件:

 

 

gfsh> list deployed --group=MemberGroup1
示例输出:

 

 

 Member   |     Deployed JAR     |                JAR Location            
--------- | -------------------- | ---------------------------------------------------
datanode1 | group1_functions.jar | /usr/local/gemfire/deploy/vf.gf#group1_functions.jar#1
datanode2 | group1_functions.jar | /usr/local/gemfire/deploy/vf.gf#group1_functions.jar#1
 更多 gfsh使用信息,请查看 gfsh (Geode SHell).

 

JAR文件的部署位置

在每个成员上写入jar文件的系统位置取决于Geode为每个成员配置的deploy-working-dir属性。例如,你可以在你的成员中的gemfire.properties文件中使用如下配置:

 

#gemfire.properties
deploy-working-dir=/usr/local/gemfire/deploy
 这个部署位置可以是本地的也可以是为了节约磁盘空间而在多个成员中共享的网络资源(例如一个挂载的位置)。如果你使用一个共享的目录,你仍然需要在每个成员上部署你想要在应用中访问的jar文件,因为部署会更新类路径并自动注册函数。

 

有关jar文件部署和集群配置服务

       默认情况下,集群配置服务分部署的jar文件到分布式系统中所有的定位器。当你用gfsh启动一个新服务器,定位器提供配置文件并部署jar文件到成员并把它们写入到服务器的目录。查看《集群配置服务概述》

 

JAR 文件版本控制

       当你部署jar文件到分布式系统或是成员组,jar文件会被修改以实现文件名中显示版本信息。每个jar文件名以vf.gf#为前辍并且在文件名结尾包含一个版本号。例如,如果你部署 MyClasses.jar五次,当你列出所有部署的jar包时文件名显示为 vf.gf#MyClasses.jar#5。
      当你部署一个jar文件,接收到部署的成员检查jar文件是否重复,要么是因为已经在这个成员中部署过,要么就是因为这个jar文件已经在其它成员也使用的共享的部署目录。如果其它成员已经部署了这个jar文件到共享目录(用字节比对方法来与它目录中最新的版本作比较),接收最新部署的成员不会将文件写到磁盘。相反的,成员会更新类路径加载器来使用已经部署的jar文件。如果一个比较新的版本的jar文件在磁盘中被检测到并已经在使用中,部署会被取消。
      当一个成员开始使用jar文件,成员会在文件上获得一个共享锁。如果成员通过部署收到了一个更新版本的文件,成员释放共享所并试着删掉这个已经存在的jar文件并以这个新版本取代。如果没有其它成员在这个已经存在的jar文件上拥有共享锁,那么这个已存在的,老版本的jar文件会被删除。

自动的类路径加载

     当一个缓存启动,新的缓存在当前的工作目录下请求将每个jar文件的最新版本添加到类路径加载器上。如果一个jar文件己经部署到了类路径加载器上,如果新的版本被发现,类路径加载器会更新它已加载的版本;否则,不会有更改。如果检测出没有其它成员在老版本的jar文件上拥有共享锁,这些文件将被删除。

 

      卸载一个jar文件不会自动卸载在部署中已经加载的类。你需要重启你的成员来卸载这些类。

    

      当一个缓存关闭时它请求所有当前部署的jar文件从类路径加载器中删除。

 

      当你使用一个共享部署工作目录,所有共享这个目录的成员应属于同一个成员组。在启动之前,所有共享这个目录成员将部署并自动加载他们的类路径和所有在当前工作目录发现的jar包。这意味着一些成员可能加载这些jar包,即使它们不是这个成员组的接收过之前部署的一部份。

 

自动函数注册

 

       当你部署一个包含一个函数的jar包(换句话说,包括一个实现了函数接口的类)这个函数会自动的通过FunctionService.registerFunction方法注册。如果另外一个有相同函数的jar文件被部署(有相同的jar文件名或是别的文件名),这个新的函数的实现会被注册,覆盖掉旧的。如果一个jar文件被卸载,任何在部署时注册的函数将会被取消注册。每次当多次部署一个相同名字的jar文件会倒致正在卸载或是重复部署的的jar文件,

它们中的函数被取消注册并再次注册。如果一个有相同的ID函数从不同名称的jar包中被注册,那么重复部署的或是已卸载的jar包中的函数将被取消注册。

 

        在cache.xml加载期间,任何被声明的参数被保存。如果在jar文件中发现的函数也是被声明过的,并且与在加载cache.xml时声明的参数有相同的类名,那么函数实例将使用参数被创建并被注册。因此,如果相当的函数在cache.xml中用不同的参数集合被声明多次

当jar被部署时,一个函数会为每个参数集合被实例化。如果任何函数被注册时使用来自加载cache.xml时的参数,默认的,没有参数的函数不会被注册。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值