ice 服务java连接,“先进的互联互通技术”–使用ice联通php和java [part 1 server]

PHP没有中间件,导致了对很多麻烦。比如,对数据库的操作必须要链接数据库,然后做SQL操作。WEB程序直接操作数据库的方法,这样会带来很多人为因素的事故隐患,以及管理上的麻烦,尤其是对大型的网站应用来说。规范的模式应该是,WEB程序传递参数到一个服务程序上,由该服务程序进行判断并最终操作数据库或者其它数据文件,这样做到了明确权限控制,和业务类型集中管理。去年伴随着ICE的推出,PHP终于有了可以使用的中间件。在PHP的发展史上,应该是一个里程碑。

ICE入门

ICE(Internet Communications Engine 网络通讯引擎),是由Corba原核心成员开发的一个开源中间件,据称其各种性能完全优于Corba。除此之外,我们第一次见到了直接支持PHP的中间件。

ICE的安装,去 下载一个Ice针对PHP的安装包,按照说明安装上。

ICE的使用:使用Slice(ICE的一种简单语法脚本),编写一个xx.ice文件。可以使用slice2cpp或slice2java等生成一个cpp或java的ICE框架程序,然后在这个框架程序中进行代码编写。ICE在PHP的应用继承了PHP的一贯传统——简单,只需要在php.ini中加载该xx.ice,在PHP中就可以使用了。

ICE在PHP应用中的缺点,无法使用PHP编写Server端,其实这也是PHP的一个缺陷——没有完善的多进程和多线程管理机制。因此,Server端可以采用ICE所支持的其它语言进行编写,比如JAVA/C++/VB/PYTHON等。

开始传说中的“互联互通”

本例以 Ice 3.2.1为例 下载的位置和参考的文档都在下面

ICE其实是一个网络框架,入门说明中说了,PHP不能用来做服务端,在这里我们使用java来做服务端,用php来连java,达到传说中的“互联互通”。

我们的服务端用Linux,客户端也用Linux(纯废话)。JAVA环境的搭建不在表述了。

在下载可以看出来,服务器支持yum或者是rpm是多么幸福的一件事情,或者搞一份tar.gz的包下来configure make make install,大概也就是这样。好了这样子就表示安装结束了。。。

安装之后的Ice相关路径:

slice2cpp,slice2java在/usr/bin/下

Ice.jar 存储于 /usr/share/java/下

相关的Ice的库存储于/usr/lib下.

第1步,建立服务器端的demo.ice的文件(注意代码里的半全角,如果是全角自行转成半角):

module Demo{

interface test{

string   execute(string mth,string cmd);

};

};

第2步,执行: slice2java demo.ice 生成一堆文件。。。

第3步,动手干活

上一步执行完会在当前目录产生一个Demo目录,目录下自动生成:

-rw-r–r–  1 root root 2316  4月 15 17:01 _testDelD.java

-rw-r–r–  1 root root  560  4月 15 17:01 _testDel.java

-rw-r–r–  1 root root 1929  4月 15 17:01 _testDelM.java

-rw-r–r–  1 root root 4177  4月 15 17:01 _testDisp.java

-rw-r–r–  1 root root 1070  4月 15 17:01 testHolder.java

-rw-r–r–  1 root root  488  4月 15 17:01 test.java

-rw-r–r–  1 root root  481  4月 15 17:01 _testOperations.java

-rw-r–r–  1 root root  460  4月 15 17:01 _testOperationsNC.java

-rw-r–r–  1 root root 5418  4月 15 17:01 testPrxHelper.java

-rw-r–r–  1 root root  569  4月 15 17:01 testPrxHolder.java

-rw-r–r–  1 root root  567  4月 15 17:01 testPrx.java

到目前为止,demo.ice所以Ice接口部分的定义以及相关依赖都已经自动生成.

我们要实现自己的execute方法,覆盖testPrx.java的同名:

//TestImp.java

package Demo;

import Ice.Current;

public class TestImp extends _testDisp{

public String execute(String mth, String cmd, Current __current) {

// TODO Auto-generated method stub

return mth+cmd;

}

}

第4步,建立一个Server服务在10000进行侦听

//Server.java

package Demo;

public class Server {

public static void main(String[] args) {

int status = 0;

Ice.Communicator ic = null;

try {

ic = Ice.Util.initialize(args);

Ice.ObjectAdapter adapter = ic.createObjectAdapterWithEndpoints(

“TestAdapter”, “default -p 10000″);

Ice.Object object = new TestImp();

adapter.add(object, ic.stringToIdentity(”TestAdapter”));

adapter.activate();

ic.waitForShutdown();

} catch (Ice.LocalException e) {

e.printStackTrace();

status = 1;

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

if (ic != null) {

// Clean up

//

try {

ic.destroy();

} catch (Exception e) {

System.err.println(e.getMessage());

status = 1;

}

}

System.exit(status);

}

}

以上大部分代码都是框架生成,你只需要在里面填写TODO。把这个代码拖回来用eclipse打成jar包,注意,需要依赖ice.jar这个包,这个包可以在网站下载到。

生成DemoServer.ajr后传到服务器,运行java -cp ./:Ice.jar:DemoServer.jar Demo.Server

运行成功的条件是Ice.jar和DemoServer.jar都在一个目录里。(Ice.jar从下载地址下载)

Server运行之后监听于10000端口,需要修改iptables,允许其他机器可以连接。

编辑 iptables

vi /etc/sysconfig/iptables

-A RH-Firewall-1-INPUT -m state –state NEW -m tcp -p tcp –dport10000-j ACCEPT

继续深入互联互通

这一节完成了Server,一个10000端口的Server在等待着我们用PHP来联通中。下一节,我们将讲述:IcePHP环境的搭建,PHP调用Ice如何与JAVA互联互通,以及一个完整的Demo,保存好本节的代码,后面还有用处。[未完待续]

转载自[]

本文链接:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/287298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HttpCookie

参考 : http://www.cnblogs.com/fish-li/archive/2011/07/03/2096903.html 上文结尾有提到一个说法 4. HttpRequest.Cookies 与 HttpResponse.Cookies 会有关系(很奇怪吧)。 微软官网也是这么说的 : https://msdn.microsoft.com/en-us/library/system.we…

Android之BaseQuickAdapter.setOnItemChildClickListener点击死人也没反应的原因

1 问题 用BaseQuickAdapter设置子view点击事件 unInstalledAdapter!!.setOnItemChildClickListener(object: BaseQuickAdapter.OnItemChildClickListener {override fun onItemChildClick(adapter: BaseQuickAdapter<*, *>?, view: View?, position: Int) {var info =…

【经典回放】多种语言系列数据结构算法:栈(C#版)

本文采用C#语言实现栈结构算法并举例应用。 一、C#的栈对象使用 对C#而言,要使用栈是极其简单的事情,因为C#已经有栈对象,所以根本不需要自用再用顺序表构造栈,只需要你会说明、会应用即可。 在C#中栈对象的类型名称是Stack,这是个泛型的对象,所以,你在使用这个对象的时…

美国银行将AI应用于企业应收账款处理

据外媒消息&#xff0c;美国银行&#xff08;Bank of America&#xff09;与Fintech创业公司High Radius达成合作&#xff0c;将人工智能应用于企业应收账款处理。该应用程序专为大型、复杂的公司管理大笔支付业务&#xff0c;因这些公司常常发生回款信息丢失或一方单独收到付款…

在 Kubernetes 上部署 Secret 加密系统 Vault

HashiCorp Vault 是一个基于身份的 Secret 和加密管理系统。Secret 是您想要严格控制访问的内容&#xff0c;例如 API 加密密钥、密码或证书。Vault 提供由身份验证和授权方法控制的加密服务。使用 Vault 的 UI、CLI 或 HTTP API&#xff0c;可以安全地存储和管理对机密和其他敏…

《看聊天记录都学不会C语言?太菜了吧》(15)你学了一节课的函数我5分钟搞定了,还很熟

若是大一学子或者是真心想学习刚入门的小伙伴可以私聊我&#xff0c;若你是真心学习可以送你书籍&#xff0c;指导你学习&#xff0c;给予你目标方向的学习路线&#xff0c;无套路&#xff0c;博客为证。 本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖…

【经典回放】多种语言系列数据结构算法:栈(JavaScript版)

本文采用JavaScript语言实现栈结构算法并举例应用。 JavaScript的栈是数组对象中自动提供的,这点如同C#,实际也不需要自己编写什么栈的程序,如果你用: var s=new Array(); 定义一个s的数组,则这个s上将有以下的方法可供使用: 其中:FF: Firefox, IE: Internet Explore…

设计模式(10)-----模板方法模式

模板方法模式(Template Method) 定义 定义了一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 UML类图 例子 AbstractClass package com.csdhsm.pattemdesign.template;/** * Title: …

Android之提示Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must sup

1 问题 : Caused by: java.lang.UnsupportedOperationException: Binary XML file line #67: You must supply a layout_width attribute. 05-08 16:42:59.322 23038 23038 E AndroidRuntime: at android.content.res.TypedArray.getLayoutDimension(TypedArray.java:7…

SLES修改本地FTP安装源

2019独角兽企业重金招聘Python工程师标准>>> SLES修改本地FTP安装源 一、配置本机FTP............................................................................................................. 1 1.1、安装.............................................…

.NET7 Preview4:重构的返回值TypedResults

为了更好的测试&#xff0c;更好的性能&#xff0c;Preview4带了一个新的请求返回值类型&#xff0c;这个新的类型中封装了所有的Http请求返回状态函数&#xff0c;还包括了返回成功后的几种数据类型&#xff0c;下面列举了几个常用的类型&#xff1a;app.MapGet("/test_o…

MATLAB软件禁用利好,Matlab被禁用?一款国产软件站了出来说:我就是中国的Matlab...

众所周知&#xff0c;前段时间Matlab被禁用&#xff0c;引发了网友们对于国产工业软件落后的诸多思考&#xff0c;比如为什么落后&#xff0c;落后到什么程度&#xff0c;有没有替代品等等。并且从Matlab到EDA&#xff0c;再到CAD等等&#xff0c;甚至工业操作系统等等&#xf…

CMDB资产采集

Paramikoimport paramiko private_key paramiko.RSAKey.from_private_key_file(/home/auto/.ssh/id_rsa) # 创建SSH对象ssh paramiko.SSHClient()# 允许连接不在know_hosts文件中的主机ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())# 连接服务器ssh.connect(ho…

《看聊天记录都学不会Python到游戏实战?太菜了吧》(3)都说123是字符不是数字

本系列文章将会以通俗易懂的对话方式进行教学&#xff0c;对话中将涵盖了新手在学习中的一般问题。此系列将会持续更新&#xff0c;包括别的语言以及实战都将使用对话的方式进行教学&#xff0c;基础编程语言教学适用于零基础小白&#xff0c;之后实战课程也将会逐步更新。 若…

ArcGIS实验教程:ArcGIS 10.2手把手图文安装教程(经典版)

ArcGIS实验视频教程合集&#xff1a;《ArcGIS实验教程从入门到精通》&#xff08;附配套实验数据&#xff09; ArcGIS许可服务无法启动解决办法&#xff1a;Win10操作系统ArcGIS许可License无法启动的解决方法汇总&#xff08;绝对成功&#xff01;&#xff09; 目录 一、系统…

html中radio,checkbox值的获取、赋值、注册事件

1&#xff0c;radio分组 只要name一样&#xff0c;就是一组的&#xff0c;即一组中只能选择一个&#xff0c;如下&#xff1a; 代码如下:<span>group1:</span> <input type"radio" id"radio1" checked"checked" name"grou…

ObjectAnimator属性动画应用demo

感谢慕课网--eclipse_xu 布局文件&#xff1a;activity_main.xml 1 <FrameLayout xmlns:android"http://schemas.android.com/apk/res/android"2 xmlns:tools"http://schemas.android.com/tools"3 android:layout_width"match_parent"…

java数据库防火墙,数据库centos7防火墙导致java程序访问mongodb3.0.1时报错的问题分析...

环境描述&#xff1a;数据库&#xff1a;mongodb3.0.1数据库系统&#xff1a;centos7,(虚拟机&#xff0c;最小安装)数据库驱动&#xff1a;mongo-Java-driver-3.0.0.jar问题描述&#xff1a;shell环境下用mongo客户端程序能正常连接mongod&#xff0c;但java程序始终报错。查看…

Android之提示androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerV

1 问题 我有2个recycleView,但是用的同一个线性布局导致错误如下 LayoutManager androidx.recyclerview.widget.LinearLayoutManager@51ddcd is already attached to a RecyclerView: androidx.recyclerview.widget.RecyclerView{dfe1682 VFED..... ......I. 0,0-0,0 #7f090…

今晚在线解读|2021-2022 .NET 中国开发者生态调查报告

点击蓝字关注我们作为一名 .NETer&#xff0c;你就职于怎样规模的公司&#xff1f;所属什么行业领域&#xff1f;平时使用哪些快速开发框架&#xff1f;产品方向及收费模式又是怎样的&#xff1f; 作为一名开发者&#xff0c;你从业已有几年&#xff1f;平时加班多吗&#xff1…