发表于: 2018-03-17 10:57:46

1 702


任 务 九 总 结

今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

tuscany这玩意和原生的rmi有点像,一下子就弄完了

先说一下硬件设施:

JDK 1.8   ,tuscany全是2.01的.

首先是需要的jar包:

<!--https://mvnrepository.com/artifact/org.apache.tuscany.sca/tuscany-base-runtime-->

<dependency>

   <groupId>org.apache.tuscany.sca</groupId>

   <artifactId>tuscany-base-runtime</artifactId>

   <version>2.0.1</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tuscany.sca.aggregation/tuscany-binding-rmi-runtime-aggregation -->

<dependency>

   <groupId>org.apache.tuscany.sca.aggregation</groupId>

   <artifactId>tuscany-binding-rmi-runtime-aggregation</artifactId>

   <version>2.0.1</version>

</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tuscany.sca.aggregation/tuscany-binding-ws-runtime-axis2-aggregation -->

<dependency>

   <groupId>org.apache.tuscany.sca.aggregation</groupId>

   <artifactId>tuscany-binding-ws-runtime-axis2-aggregation</artifactId>

   <version>2.0.1</version>

</dependency>

这3个jar包就足够了,加大包的话有一堆冲突,参考过往师兄的例子,我这里就加了需要的3个jar包即可.

然后是一个简单的demo:

package com.service;

import org.oasisopen.sca.annotation.Remotable;

@Remotable

public interface Demo{

String doIt();

}

我这里打的这个@Remotable注解要注意一下.如果没有这个会有个大坑存在.

接下来是实现类:

package com.service;

public class DemoImpl  implements Demo {

@Override

   public String doIt() {

return "233333";

   }

}

仅仅为了测试功能是否完善,我直接返回一个字符串.

然后是对应的配置文件:

注意SCA分布式的配置文件的后缀是composite.

<?xml version="1.0" encoding="UTF-8"?>

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"

          xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"

          targetNamespace="http://sample"

          xmlns:sample="http://sample"

          xmlns:scallop="http://scallop/xmlns/sca/1.1"

          name="Demo">

   <component name="DemoImpl">

       <implementation.java class="com.service.DemoImpl"/>

   </component>

</composite>

和Spring的Xml配置文件类似,都是相应的shcme约束头,再加上一些标签并且配上子元素.

然后写一个主方法,运行一下.

package com.run;

import com.service.Demo;

import org.apache.tuscany.sca.node.Node;

import org.apache.tuscany.sca.node.NodeFactory;

public class test {

public static void main(String[] args) {

Node node = NodeFactory.newInstance().createNode("sca.composite");

       node.start();

       System.out.println("server is ready");

       Sca s = node.getService(Demo.class, "DemoImpl");

       System.out.println(s.doIt());

   }

}

可以看到服务已经运行,并且拿到了字符串.

然后是进行分离,在另外单独的客户端上去调用Server.

其他的东西都一样,就是在配置文件上多了一个东西.

<?xml version="1.0" encoding="UTF-8"?>

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"

          xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"

          targetNamespace="http://sample"

          xmlns:sample="http://sample"

          xmlns:scallop="http://scallop/xmlns/sca/1.1"

          name="Sca1">

   <component name="Sca1">

       <implementation.java class="com.service.DemoImpl"/>

       <service name="Demo">

           <!--这里有2个要求

           1.如果接口没有加上@Remotable标签,service name就只能为实现类名.

           2.接口加了@Remotable标签,service name 就只能为接口名.

           3.所以这里只能为 接口名 or 类名.

           -->

           <interface.java interface="com.service.Demo"/>

           <tuscany:binding.rmi uri="rmi://127.0.0.1:8888/Sca1"/>

       </service>

   </component>

</composite>

需要特别注意的是绿字部分,和我之前在接口上打的@Remotable标签联合使用.

这是个特别大的坑,service name绝对不能随便乱取.

然后当配置了RMI服务端之后,我们的主方法就仅仅作为一个服务启动来使用.

package com.run;

import org.apache.tuscany.sca.node.Node;

import org.apache.tuscany.sca.node.NodeFactory;

public class test1 {

public static void main(String[] args) {

Node node = NodeFactory.newInstance().createNode("sca1.composite");

       node.start();

       System.out.println("server is ready");     

   }

}

可以看到和我们任务8的时候使用java  RMI的时候基本一致的效果,Server运行之后处于一个一致运行等待状态,等待client的调用.

然后我们在客户端进行调用.

客户端也要遵循RMI那一套,就是接口的全限定名要完全相同.

package com.run;

import com.service.Demo;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

public class test {

public static void main(String[] args) throws RemoteException, NotBoundException, MalformedURLException {

Demo demo = (Demo) Naming.lookup("rmi://127.0.0.1:8888/Sca1");

       System.out.println(demo.doIt());

   }

}

可以看到我们在client的调用方式和使用java 原生RMI的方式一致,也是通过Naming类的lookup来使用rmi一个约束url进行服务的定位.

可以看到在客户端是调用成功了的.


明天计划的事情:准备复盘


遇到的问题:学习tuscany的资料有点少


收获:进一步学习了RMI



返回列表 返回列表
评论

    分享到