发表于: 2017-07-19 19:29:44

1 1133


今天:


1.昨天在Git上下载了一个Spring RMI的HelloWorld项目,在本地可以跑,在服务器上不能跑,后来发现是阿里云服务器没有把1099端口打开,但是今天打开了这个端口还是不行。


2.上午还是在做各种尝试,觉得可能是Web服务器的问题,就又重新建了普通项目,打包成jar,在服务器上用java -jar 运行,并且通过lsof -i:1099测试端口,确认有一个java程序在监听这个端口,但是还是不行,异常是没有安全管理措施,之前的异常是找不到制定的服务。所以暂时还是放弃了。掌握了如何用maven打包一个可运行的jar的插件命令,输入mvn assembly:assembly打包,会生成两个jar包,一个是带有所有依赖的,可以直接运行,在插件中要指定有main方法的类。


<plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <configuration>
        <archive>
            <manifest>
                <mainClass>tech.zengtian.rmi_server_jar.ServerApp</mainClass>
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>

</plugin>


3.所以任务8暂时在本地做,服务器端放在tomcat的8081端口,客户端直接在IDEA中用jetty:run运行(不能用jetty:run同时运行两个实例)


4.开始着手对项目进行拆分,两个项目都使用Web工程。


两个项目中共有的类是:model类;服务接口;工具类;


客户端的类是:控制器;拦截器;标签处理器;


服务端的类是:服务实现类;DAO接口和实现;


5.拆分结束后,开始写两个项目的Spring配置文件,其中客户端使用Spring MVC配置,服务端使用Spring配置,配置中,客户端和服务端都要完全重写所有的服务类的Bean,其他的配置则可以根据需求复制粘贴。


客户端需要写的Service的Bean的写法:


class写的是一个叫,RmiProxyFactoryBean的工厂,生成的应该是服务端Service的代理对象。
在Bean中,需要制定目标对象的URL,URL的后缀对应的是服务端Service的Bean的Name。

在Bean中,还需要指定服务类的接口。


<bean id="userService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
    <property name="serviceUrl" value="rmi://localhost:1099/UserService"/>
    <property name="serviceInterface" value="tech.zengtian.springrmi.service.UserService"/>

</bean>


服务端Service的Bean的写法:


class是一个叫RmiServiceExporter的东西;
在其中必须要指定的属性有:
Service的名字Name,由于映射实际的服务类;
Service的实现类对应的Bean。
Service的接口。

registry端口号(存放名字和Service对象的映射关系的地方),一个端口可以有多个Service。


<bean id="userServiceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter">
    <property name="serviceName" value="UserService"/>
    <property name="service" ref="userServiceImpl"/>
    <property name="serviceInterface" value="tech.zengtian.springrmi.service.UserService"/>
    <property name="registryPort" value="1099"/>

</bean>


6.对服务端接口的测试


在拆分之后,对前几个任务中Service层接口(数据库读取,注册,登陆,短信,邮件,上传文件)进行测试。


首先是第三方类不能序列化的问题。之前在写Service层时,把HttpServletRequest作为入参了,但是分离之后,RMI之间传输对象必须是可序列化的对象,而HttpServletRequest是一个第三方类,不能序列化。先想到的是,自定义一个SerializbleRequest继承HttpServletRequest,再序列化,但是HttpServletRequest是一个接口,所以不行,就把服务层改了一遍,所有的返回值和入参都是POJO对象和基本对象。


第二个是重写了用配置文件设置第三方SDK服务类参数的方法,之前是在配置文件中配置用户名密码之类的东西,现在用注解的方式注入properties文件中的值,缩短了Spring配置文件的长度。


之后接口可以正常使用。


@Value("#{properties['huyi.url']}")
private String Url;
@Value("#{properties['huyi.account']}")
private String account;


问题:配置到服务器的问题还是没有解决;拆分后,网页和数据库的速度明显慢了,一个get等好几秒钟;


明天:继续任务8中的内容


总结:无


点成任务9了,点错!



返回列表 返回列表
评论

    分享到