发表于: 2017-08-14 20:21:02

1 1165


今天完成的事情:

在spring项目中写了个测试类

如何在不使用控制器和spring mvc的情况下,检验mysql是否已经连接成功,以前任务一的时候对单元测试的理解有一些偏差,写了几个加减乘除就过了,然后今天抛去控制器和spring mvc的时候就尝到了苦头..我居然不知道怎么写测试类了
还好有志勇师兄指点迷津.
在spring-mybatis中添加配置,即可成功

写完发现并没有自己想象中那么难.


新建的每个model项目都相当于一个独立的项目,如果在主项目的pom.xml文件中添加依赖的话(相当于父类,而单独的model项目相当于一个继承了父类pom文件依赖的子类)该项目下所有的model里的pom文件都不用添加相应的依赖,可以直接拿来使用

.

甘乐师弟有个关于log4j的疑问来问我,大致意思是为什么log4j配置中写上

什么它就会知道要去项目根目录找这个文件夹并把日志输出在这个文件中.我对这个东西了解不够深刻,只是知道会这么做.我觉得有一种解决方法是写classpath路径,退格回到项目根目录,然后再指向到那个文件夹,效果是一样的,但是就是看上去麻烦了一点
这估计也就是相对路径和绝对路径的区别,不过它相对路径为什么在根目录我还是不清楚原理,或许人家配置文件直接就封装好了呢.直接用就行,小问题不用纠结太深
还有一个问题是是否可以按不同的日志的级别来分别输出到不同的日志文件上,我觉得是可以的,但是感觉目前而言没什么用处,就没学.具体地址如下,有兴趣可以看看


还有一个是jdbc有几种实现方式.这个回答不上来,实在惭愧,我只知道mybatis一种,让他请教玉琛和志勇师兄吧


然后玉琛给我讲了一波关于依赖冲突的解决办法:

在pom.xml文件中右键,点击

第一个

在有爆红的地方右键

选择Exclude,就会自动处理jar包冲突的问题
这是修改后的,之前有很多的冲突,但是项目跑起来居然没问题,这个有点意思啊
这个操作能简单的解决依赖冲突的问题,不过原理是怎么做到的就不知道啦



明天计划的事情:

完善这个例子,做第三步



遇到的问题:

如何不调用控制器和springmvc来测试mysql是否连接成功(已解决)



收获:

1:RMI原理

要了解RMI原理,需要理解Stub和Skeleton
打个比方,你是A,你想借D的工具,但是不认识D的管家C,所以你找来B帮你,B认识C,B就是一个代理,代理你的请求.C负责去D家收回和借出,但是要有D的批准,D批准后,C再把东西给B,B再转给A.stub和skeleton在RMI中就是角色B和C,他们都是代理角色.

stub为客户端编码远程命令并把他们发送到服务器.而skeleton则把远程命令解码,调用服务器的远程对象方法,把结果在编码发给stub,然后stub再解码返回结果给客户端

stub为远程对象在客户端的一个代理,当客户端调用远程对象的方法时.实际是委托stub这个代理去调用远程的对象.调用过程如下:
(1)初始化一个与远程JVM的连接
(2)写入并传输参数给远程JVM
(3)执行远程对象的方法调用,并等待调用结果的返回(return)
(4)读取调用的返回值(也可能是一个异常)
(5)返回调用的结果给调用者
这些操作(序列号参数, 建立Socket连接等等),都由这个Stub来透明化。

在远程的JVM中,每一个对象(需要被远程调用的对象)都有一个相应的skeleton(在Java2环境中,这个skeleton不是必须的,这个先不说),skeleton的作用是分发客户端的调用到具体的实现类,skeleton接受 一个客户端过来的调用过程如下:
(1)读取客户端传递过来的参数
(2)调用实现类的方法
(3)写入并传输返回结果给调用者,同样的,这个结果也是函数调用结果或异常

Stub和Skeleton在什么位置产生?

Stub存在于客户端,作为客户端的代理,让我们总是认为客户端产生了stub,接口没有作用。实际上stub类是通过Java动态类下载 机制下载的,它是由服 务端产生,然后根据需要动态的加载到客户端,如果下次再运行这个客户端该存根类存在于classpath中,它就不需要再下载了,而是直接加载。总的来说,stub是在服务端产生的,如果服务端的stub内容改变,那么客户端的也是需要同步更新。


2:UnicastRemoteObject类

首先,远程对象和调用传递的参数都必须实现Serializable接口(即序列化)
然后再看看继承UnicastRemoteObject的作用与好处
UnicastRemoteObject结构:

通常,远程对象都继承UnicastRemoteObject类,UnicastRemoteObject 类提供远程对象所需的基本行为。在这个类中提供了支持创建和导出远程对象的一系列方法,一个对象继承UnicastRemoteObject它将获得以下特性:

A、对这种对象的引用至多仅在创建该远程对象的进程生命期内有效

B、使得远程对象既有使用TCP协议通信的能力(Socket)
C、对于客户端与服务器的调用、传参、返回值等操作使用流的方式来处理
其他的,java.rmi.registry.LocateRegistry类提供了一系列的方法用于创建、获取Registry实例的方法;在Registry接口中,定义了一系列的方法,用于操作远程对象包括:绑定对象(bind)、获取对象(lookup)、重写绑定(rebind)、解除绑定(unbind)和返回注册表绑定列表(list)方法(也可以使用java.rmi.Naming来操作)。



返回列表 返回列表
评论

    分享到