RED5 中使用Spring RMI
来源:互联网 发布:在u盘里安装ubuntu 编辑:程序博客网 时间:2024/05/20 18:48
由于RED5本身就基于spring的,所以在其上结合spring使用rmi是很简单的!
由于red5中已经存在spring的以下一些包,此文章是基本red5版本 : 1.0.0-rc
, 要使用rmi需要加入以下两个包:
加包时请根据red5版本选择正确的包(不要问我哪个版本对应哪些包,自己试吧)
ok ,准备工作完成
先写客户端和服务都需要的接口吧:
package org.freechat.chatserver.rmi;public interface TestRMI {public void test();}
接口实现:
package org.freechat.chatserver.rmi;public class TestRMIImple implements TestRMI {@Overridepublic void test() {System.out.println("rmi调用成功");}}
添加以下spring配置:
spring-rmi-exporter.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="testBean" class="org.freechat.chatserver.TestBean"></bean><bean id="testRMI" class="org.freechat.chatserver.rmi.TestRMIImple"></bean><bean id="balanceChessGameServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter"><property name="service"><ref bean="testRMI" /></property><property name="serviceName"><value>testRMI</value></property><property name="serviceInterface"><value>org.freechat.chatserver.rmi.TestRMI</value></property><property name="registryPort"><value>1199</value></property><property name="servicePort"><value>2899</value></property></bean></beans>
以上配置将org.freechat.chatserver.rmi.TestRMI接口暴露为名为testRMI的远程服务, 服务端实现类为org.freechat.chatserver.rmi.TestRMIImple
在red5配置文件red5-web.xml中引入以上配置,即red5-web.xml中添加
<import resource="classpath:/spring-bean.xml" />
将应用部署到red5下,启动red5将看到以下信息:
接下来写客户端测试下:
首先配置远程rmi:
rmi.xml :
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"><beans><bean id="testRed5RMI" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"><property name="serviceUrl"><value>rmi://192.168.1.16:1199/testRMI</value></property><property name="serviceInterface"><value>org.freechat.chatserver.rmi.TestRMI</value></property></bean></beans>
测试类:
import org.freechat.chatserver.rmi.TestRMI;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Test {/** * @param args */public static void main(String[] args) {ApplicationContext context = new ClassPathXmlApplicationContext("rmi.xml");TestRMI testRMI = (TestRMI) context.getBean("testRed5RMI");testRMI.test();}}
运行, red5控制台下看到:
rmi调用成功
注意 事项:
rmi注册时默认注册到hostname : 0.0.0.0上, 本机调用肯定没问题, 要是客户端在不同机器上,或服务端多ip时,客户端调用可能会有以下错误
java.rmi.ConnectException: Connection refused to host: 0.0.0.0;
这时应该在rmi注册前设置 系统变量:
System.setProperty("java.rmi.server.hostname", "192.168.1.212");指明注册的hostname
在red5中, 可在application启动时设置 ,即 start方法中加入以上语句;
网上也有说 在org.springframework.remoting.rmi.RmiServiceExporter暴露服务时,指定registryHost,即设置属性:
<bean id="balanceChessGameServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter"><property name="service"><ref bean="testRMI" /></property><property name="serviceName"><value>testRMI</value></property><property name="serviceInterface"><value>org.freechat.chatserver.rmi.TestRMI</value></property><property name="registryPort"><value>1199</value></property><property name="servicePort"><value>2899</value></property><property name="registerHost"><value>192.168.1.212</value></property></bean>但是我试了n次, 连注册时都报错了,希望高手指点,错误如下:
er' defined in class path resource [spring-bean.xml]: Invocation of init methodfailed; nested exception is java.rmi.ConnectException: Connection refused to host: 192.168.1.212; nested exception is: java.net.ConnectException: Connection refused: connect at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1420) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580) at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425) at org.red5.server.tomcat.TomcatLoader$2.run(TomcatLoader.java:774)Caused by: java.rmi.ConnectException: Connection refused to host: 192.168.1.212; nested exception is: java.net.ConnectException: Connection refused: connect at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:601) at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:198) at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:184) at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:322) at sun.rmi.registry.RegistryImpl_Stub.list(Unknown Source) at org.springframework.remoting.rmi.RmiServiceExporter.testRegistry(RmiServiceExporter.java:420) at org.springframework.remoting.rmi.RmiServiceExporter.getRegistry(RmiServiceExporter.java:331) at org.springframework.remoting.rmi.RmiServiceExporter.prepare(RmiServiceExporter.java:268) at org.springframework.remoting.rmi.RmiServiceExporter.afterPropertiesSet(RmiServiceExporter.java:229) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1477) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1417) ... 10 moreCaused by: java.net.ConnectException: Connection refused: connect at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333) at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) at java.net.Socket.connect(Socket.java:519) at java.net.Socket.connect(Socket.java:469) at java.net.Socket.<init>(Socket.java:366) at java.net.Socket.<init>(Socket.java:180) at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22) at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128) at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:595) ... 20 more
好了 完了 注你成功!
- RED5 中使用Spring RMI
- 在Red5中使用Spring-JDBC配置MySql连接池
- spring rmi 的使用
- Spring RMI使用心得
- spring rmi 简单使用
- 使用spring配置RMI
- spring rmi使用心得
- Spring RMI使用学习
- 如何在Spring框架中使用RMI技术
- RMI使用中
- Spring中RMI的调用
- Spring使用POJO发布RMI
- spring与rmi结合使用
- Java RMI(2):项目中使用RMI
- RMI中使用工厂模式
- java中RMI的使用
- 使用Red5创建 red5项目
- Spring中合理的配置RMI
- JavaScript:按字母排序列表的元素
- RPM commands
- 遍历HashMap
- mysql学习笔记-字段类型(一)
- Linux上批量删除.svn目录
- RED5 中使用Spring RMI
- MSSQL学习之存储过程--批量删除
- UIControl 与 UIView 在事件处理上的区别
- 计算机中的原码、反码和补码
- 在ubuntu 10.04上编译android 2.2需要安装的相关工具
- Flex从后台读取数据前台显示为层次的树形结构
- release 与 retainCount
- 取当前时间的并显示的js
- 关于使用struts2-jquery-mobile-showcase插件报错的问题!!!