1. 系统集成的基础设施
RPC (Remote Procedure Call)
RPC是现代C/S和分布式程序的基础概念之一,通常由具体的技术来实现。以下是远程通信通常遵循的模式:
客户程序 <-> 桩(残根)函数接口 <-> Channel(协议栈通信通路) <-> 桩(残根)函数接口 <-> 服务程序
优点: 隐藏传输细节; 简化; 透明
桩函数接口的作用: 程序参数和通信栈上数据之间的转化、组织和传递。
CORBA (COmmon Request Broker Architecture)
CORBA曾经非常流行的一种RPC模式。其基本概念包括:
物件Object -- 可接受客户请求可位于远端的实体;
服务Servant -- 物件的功能实现;
IDL(Interface Definition Language) -- 接口定义语言,一种协议,类似COM的IDL,WSDL等的作用;用于保证CORBA语言无关。
ORB(Object Request Broker) -- 直接位于通信栈上用于处理请求的机构
通信模式:
客户程序(使用) <-> 物件对象(引用) | 桩函数接口(根据IDL生成) <-> ORB
|
通信链路
|
服务程序(创建和维护) <-> 物件对象(实现) | Skeleton函数接口 <-> ORB
RMI (Remote Method Invocation)
是Java程序之间RPC通信的方式。如果JAVA要和其他语言程序通信,则采用CORBA;因此rmic工具为特定桩对象生成Java方法以支持通信。
在两个Java虚拟机之间则用JRMP(Java Remote Method Protocol)通信。
Server侧接口需继承:java.rmi.Remote,异常:java.rmi.RemoteException。
首先System.get/setSecurityManager()设置安全管理对象,java.rmi.registry.*设置Registry;对象创建,然后绑定到Java的命名系统中:Naming.bind("路径", obj); 客户端查询则通过Naming.lookup("路径");
.NET Remoting(已被WCF取代)
仅仅是上课提到,非上课重点,且为更新技术取代,不再赘述。
2. JEE (J2EE) 系统集成技术发展
1.2 (初始版): Servelets, JSP, EJB, JMS, Mail, JDBC, Transactions, JNDI
1.3:Connector Architecture, JAAS, XML for Web Services, JSP Tag Libraries
1.4:Management (JMX), 安全扩展(Security Extensions)
1.5:(主发布版本) 原部署标记(XML)可以用Annotation取代,Dependency Injection,JPA
1.6:(最近版本) Profile概念(功能子集),REST的Web Service(JAS-RS),Managed Beans,Bean Validation, EJB Lite, Servlet(支持Annotations, 异步asynchronous,可插卸性pluggability),Faces(Annotations, facelets, AJAX, implicit navigation)
3. JDBC
JDBC
目的:使Java接入关系数据库系统Relational Dababase Management System (RDMS);
驱动Driver:适应特定数据库的JDBC API;
注册:v4以后的驱动不需要
结构: Java应用 | JDBC API | JDBC SPI | JDBC驱动(数据库提供商提供) <-> 数据库
步骤:
1. 驱动注册: Class.forName("驱动名称").newInstance(); // need to catch Exception e
2. 建立连接: Connecton conn = DriverManager.getConnection(url); // need to catch SQLException
2'. 含参连接: Properties props = new Propertis(); props.setProperty("user", "Peter"); props... conn = DriverManager.getConnection(url, props); 或: conn = DriverManager.getConnection(url, name, passwd);
2''. DS连接:Context ctx = new InitialContext(); /*JNDI*/ DataSource ds = (DataSource)ctx.Lookup("路径"); conn = ds.getConnection([user, passwd]); (DataSource是一个Factory产生普通/Pooled/Distributed Transaction的连接)
3. 使用后关闭连接: conn.close();
JDBC中使用SQL语句
Statement:执行SQL查询和更新:
Statement stmt = conn.createStatement(); int res = stmt.executeUpdate("SQL更新语句");ResultSet rs = stmt.executeQuery("SQL查询语句" [, resultSetType concurency, holdability]); ... stmt.close();
PreparedStatement:允许java变量作为参数:安全性(防止SQL代码注入);效率(驱动可优化执行代码)
Prepared