山东大学-中间件实验报告

合集下载

第二章 中间件Corba_初步

第二章 中间件Corba_初步
道当时目标对象是否处于活动状态(即是否处于正在运行的 进程中)。此时,如果目标对象不是活动的,在把请求传给 它之际,ORB会透明地将它激活。
山东大学计算机科学与技术学院
透明性
– 对象通信机制:客户不必知道ORB所用的下层通信机 制,如,TCP/IP、管道、共享内存、本地方法调用 等。
– 数据表示:客户不必知道本地主机和远程主机对数据 表示方式,如高位字节在前还是在后等,是否有所不 同。
山东大学计算机科学与技术学院
OMA(对象管理体系结构)
山东大学计算机科学与技术学院基础技术教学部
记住Corba
C-ORB-A: “Common” + “ORB” + “Architecture”
通用“orb”体系结构
Orb: Object request broker 对象请求代理:通过
ORB是OMA参考模型的核心, 提供了最基本的通信枢纽设施(分布式对象之间透
明的地发送请求或接收响应的基本机制),独立于
实现对象的特定平台与技术。
是基于分布式对象构建应用程序的基础设施,保证
了在异构平台上对象的互操作性与可移植性
山东大学计算机科学与技术学院
ORB
ORB(Object Request Broker)是对象总线。 1 通过ORB,一个client可以透明的调用同一台机器上或 网络上的一个server对象的方法。 2 ORB解释该调用并负责查找一个实现该请求的对象,
接口定义添加到接口库服务中
接口库服务将对象接口定义中的内容表达为不同类型对象的
层次结构,为应用程序运行时动态访问对象接口定义提供服 务
IDL定义与接口库表达相同信息,只是两者组织方式不同 客户程序只能通过对象的接口定义了解对象的逻辑结构

山东大学中间件复习题及答案资料

山东大学中间件复习题及答案资料

中间件复习题1.你认为什么是中间件?中间件的主要作用是什么?●定义:中间件是介于应用系统和系统软件之间的一类软件,是位于操作系统和应用软件之间的一个软件层,向各种应用软件提供服务,使不同的应用进程能在屏蔽掉平台差异的情况下,通过网络互通信息。

●作用:使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。

2.比较B/S结构与C/S结构的优缺点。

●B/S结构的优点:1.具有分布性特点,可以随时随地进行查询、浏览等业务处理。

2.业务扩展简单方便,通过增加页面即可增加服务器功能。

3.维护简单方便,只需要改变网面,即可实现所有用户的同步更新。

4.共享性强●B/S 结构的缺点:1.响应速度不及C/S,随着AJAX技术的发展,相比传统B/S结构软件提升一倍速度。

2.用户体验效果不是很理想,B/S需要单独界面设计,厂商之间的界面也是千差万别,由于浏览器刷新机制,使用时有刷屏现象,好在AJAX技术解决这一难题●C/S 结构的优点:1.由于客户端实现与服务器的直接相连,没有中间环节,因此响应速度较快。

2.C/S结构的管理信息系统具有较强的事务处理能力。

●C/S 结构的缺点:1.只适用于局域网(现在很多CRM软件也可适用于外网)。

而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。

这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。

2.客户端需要安装专用的客户端软件。

首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。

特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。

还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。

3.对客户端的操作系统一般也会有限制。

不适用于微软新的操作系统等等,Linux、Unix等。

3.ORB、对象适配器的作用分别是什么?●ORB:是OMA参考模型的核心,提供了最基本的通信枢纽设施(分布式对象之间透明的地发送请求或接收响应的基本机制),独立于实现对象的特定平台与技术,是基于分布式对象构建应用程序的基础设施,保证了在异构平台上对象的互操作性与可移植性。

山东大学操作系统实验报告3进程调度算法实验

山东大学操作系统实验报告3进程调度算法实验

计算机科学与技术学院实验报告
3) 输入make命令编译连接生成可执行的
psched程序$gmake
gcc -g -c experime nt3.c
gcc psched.o -o psched
4)
执行psched程序
分析:
根据以上示例程序和独立实验程序中观察和记录的信息,说明它们反映出操作系统教材中讲解的哪些进程调度调度策略和功能?在真实的操作系统中它是怎样实现教材中讲解的进程调度效果的。

先进先出算法
算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便一直执行下去,直到该进程完成或阻塞时,才释放处理机。

最高优先权(FPF)优先调度算法
该算法总是把处理机分配给就绪队列中具有最高优先权的进程。

常用以下两种方法来确定进程的优先权:
轮转法
前几种算法主要用于批处理系统中,不能作为分时系统中的主调度算法,在分时系统中,都采用时间片轮转法。

体会:
1. 实验中定义的函数一定要考虑好函数的参数问题,这样才不会出现一些不必要的错误;
2. 对于一些要忽略的信号要忽略掉,免得影响后面的响应过程。

山东大学单片机实验报告 2018

山东大学单片机实验报告 2018

此文档免费建议下载后再复制代码,百度文库直接复制格式会出错。

学弟学妹们,这是山东大学单片机keil和proteus实验的实验报告(2018年),包含代码,程序框图和proteus原理图硬件实验中报告中代码全部能用,想省事直接复制黏贴即可。

1.如果c语言报错,看下是不是{ } ;// 这三种符号漏掉了{} 在for语句中有些可能复制的时候把这个符号漏掉了如果报错可以试试加上一个这个;在语句结尾处报错时使用// 某些注释或者分割的*********** 可能//复制时会掉需要在前面加上//才能不报错2.proteus在win10系统中必须用proteus8 ,proteus7全不能用。

使用proteus8时必须右键管理员身份运行,否则会提示运行库缺失。

3.此外我这里有已经做好的文件打包分享在网盘里,需要自取。

链接: https:///s/1vTIwya0-kFXyWV9quf8Hfw 密码: 2au6其中Uv2是keil的程序,已生成hex文件可直接使用。

Pdsprj是原理图,在proteus中打开即可(先用2的方法打开proteus,然后再用proteus打开)Ps:传承,分享是中华美德,如果觉得很实用用请传给下一届。

2.2汇编程序实验2(1)实验内容将片内RAM 30H开始的32个单元中分布着随机的有符号8位二进制数,请按从小到大的顺序进行排序,排序后的数据仍然保存到30H开始的32个单元中(低地址存放小数据)。

编程思路:首先,在程序存储器中构建一个表格,该表格具有32个随机产生的8位二进制数,如:TABLE: DB 1,3,9,2,17,4,11,6DB 5,20,100,64,21,14,79,35DB 92,7,91,23,65,16,13,18DB 18,73,65,101,27,19,62,69然后利用查表指令“MOVC A,@A+DPTR”将它们读取到30H-4FH单元中,然后再利用“冒泡法排序法”将它们排序即可。

山东大学数据结构实验报告二

山东大学数据结构实验报告二
2、提供操作:选择排序、冒泡排序、插入排序、基数排序、快速排序、归并排序。(快速排序、归并排序讲到之后再做)
3、*能够显示各种排序算法的中间过程。
软件环境:
Win7操作系统
开发工具:visual C++ 6.0
实验代码:
#include<windows.h>
#include <iostream>
using namespace std;
int t=0,p=0,k=0;
template<class T>
int indexofmax(T a[], int n)
{
int indexofmax=0;
for(int i=1;i<n;i++)
if (a[indexofmax]<a[i])
indexofmax=i;
return indexofmax;
int a6[9]={40,91,43,1,66,75,12,108,97}; */
switch(ch){
case '1':
selectionsort(a1+1,8);break;
case '2':
bubblesort(a1+1,8);break;
case '3':
insertionSort(a1+1,8);break;
cout<<"1,选择排序"<<endl;
cout<<"2,冒泡排序"<<endl;
cout<<"3,插入排序"<<endl;

山东大学嵌入式实验报告

山东大学嵌入式实验报告

嵌入式实验报告班级:电信工X班姓名:XXX 学号:20120012XXXX实验一、ARM汇编指令实验-简单数据搬移实验实验目的:熟悉实验开发环境,掌握简单ARM汇编的使用方法实验内容熟悉开发环境并使用LDR/STR,MOV等指令访问寄存器或存储单元;使用ADS/SUB/LSL/LSR/AND/ORR等指令完成基本数学/逻辑运算。

实验要求(1)按照前面叙述介绍的方法,在ADS下创建一个工程asmlabl,定义两个变量x,y和堆栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单元。

通过AXD查看寄存器和memory和寄存器中数据的变化。

(2)在指令后面加上适当注释,说明指令功能。

(3)指出程序执行后各相关寄存器及存储器单元的具体内容。

程序代码截图如下:程序运行结果截图:由实验结果可知堆栈的第二个单元中存放了x+y的值6D练习题编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max变量之中,最小值存在于min变量之中。

提示:数据的定义采用伪指令:DCD来实现。

基本思路:利用R0做基地址,将R1,R2分别放入第一单元的内容,利用R3做循环计数,利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的R4数据则将R4的内容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2,。

遍历完成之后,R1将存放最大数据,R2将存放最小数据。

程序代码截图如下:程序运行结果截图:实验二ARM汇编指令实验2-字符串拷贝实验实验目的通过实验掌握使用LDB/STB,b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。

实验内容熟悉开发环境的使用并完成一块存储区的拷贝。

完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。

实验要求(1)按照 2.3节介绍的方法,在ADS下创建一个工程asmab2,定义两个数据存储区Sr c和Dst,Src用于存放原字符串,Dst用于存放目的字符串。

山东大学计算机学院操作系统实验报告

山东大学计算机学院操作系统实验报告

操作系统课程设计报告学院:计算机科学与技术学院专业:计算机科学与技术班级:20**级*班姓名:***学号:20**********目录一实验平台 (2)二Project1建立线程系统 (2)Task1.1实现KThread.join() (2)1.要求 (2)2.分析 (2)3.方案 (3)4.实现代码 (3)Task1.2利用中断提供原子性,直接实现条件变量 (4)1.要求 (4)2.分析 (5)3.方案 (5)4.实现代码 (5)Task1.3实现waitUntil (7)1.要求 (7)2.分析 (7)3.方案 (7)4.实现代码 (8)Task1.4用条件变量,不使用信号量,实现同步发送接收消息,speak,listen (10)1.要求 (10)2.分析 (10)3.方案 (11)4.实现代码 (11)Task1.5完成PriorityScheduler实现优先级调度 (13)1.要求 (13)2.分析 (13)3.方案 (14)4.实现代码 (14)Task1.6 (17)1.要求 (17)2.分析 (18)3.方案 (19)4.实现代码 (19)三Project2多道程序设计 (27)Task2.1 (27)1.要求 (27)2.分析 (28)3.方案 (28)4.实现代码 (31)Task2.2 (36)1.要求 (36)2.分析 (36)3.方案 (36)4.实现代码 (38)Task2.3 (43)1.要求 (43)2.分析 (43)3.方案 (44)4.实现代码 (45)Task2.4 (47)1.要求 (47)2.分析 (48)3.方案 (48)4.实现代码 (48)一实验平台开发语言:Java开发工具:Eclipse Luna操作系统:Ubuntu14.04二P roject1建立线程系统Task1.1实现KThread.join()1.要求实现Implement KThread.join()函数。

山东大学操作系统实验报告4进程同步实验

山东大学操作系统实验报告4进程同步实验

山东大学操作系统实验报告4进程同步实验计算机科学与技术学院实验报告实验题目:实验四、进程同步实验学号:日期:20120409 班级:计基地12 姓名:实验目的加深对并发协作进程同步与互斥概念的理解,观察和体验并发进程同步与互操作的效果,分析与研究经典进程同步与互斥问题的实际解决方案了 Linux 系统 IPC进程同步工具的用法,练习并发协作进程的同步与互斥操作的编与调试技术实验内容抽烟者问题假设一个系统中有三个抽烟者进程每个抽烟者不断地卷烟并抽烟抽烟者卷起并抽掉一颗烟需要有三种材料烟草纸和胶水一个抽烟者有烟草一个有纸,另一个有胶水。

系统中还有两个供应者进程,它们无限地供应所有种材料但每次仅轮流提供三种材料中的两种。

得到缺失的两种材料的抽烟者卷起并抽掉一颗烟后会发信号通知供应者让它继续提供另外的两种材料。

这过程重复进行请用以上介绍 IPC同步机制编程实现该问题要求的功能硬件环境@CPUi3-2350MIntel?Cor42.30GHz MobileIntel?Sandybridgex86/MMX/SSE24G内存3操作系统:20.1 GB磁盘:软件环境:ubuntu13.04实验步骤:(1)新建定义了producer和consumer 共用的文件。

ipc.h函数原型和变量的IPC.(2)新建ipc.c文件,编写producer和consumer共用的IPC的具体相应函数。

(3)新建Producer文件,首先定义producer的一些行为,利用系统调用建立共享内存区域,设定其长度并获取共享内存的首地址。

然后设定生产者互斥与同步的信号灯,并为他们设置相应的初值。

当有生产者进程在运行而其他生产者请求时,相应的信号灯就会阻止他,当共享内存区域已满时,信号等也会提示生产者不能再往共享内存中放入内容。

(4)新建Consumer文件,定义consumer的一些行为,利用系统调用来创建共享内存区域,并设定他的长度并获取共享内存的首地址。

山东大学计算机网络实验报告(实验二)

山东大学计算机网络实验报告(实验二)

山东大学计算机网络实验报告(实验二)实验2 IEEE802标准和以太网2013xxxxxxxx xx一、实验项目名称IEEE802标准和以太网二、实验目的及要求1、掌握以太网的报文格式2、掌握MAC地址的作用3、掌握MAC广播地址的作用4、掌握LLC帧报文格式5、掌握协议编辑器和协议分析器的使用方法三、实验位置机房四、实验内容及步骤练习1:领略真实的MAC帧各主机打开工具区的“拓扑验证工具”,选择相应的网络结构,配置网卡后,进行拓扑验证,如果通过拓扑验证,关闭工具继续进行实验,如果没有通过,请检查网络连接。

本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。

现仅以主机A、B所在组为例,其它组的操作参考主机A、B所在组的操作1、主机B启动协议分析器,新建捕获窗口进行数据捕获并设置过滤条件(提取ICMP协议)。

2、主机A ping 主机B,察看主机B协议分析器捕获的数据包,分析MAC 帧格式。

3、将主机B的过滤器恢复为默认状态。

练习2:理解MAC地址的作用本练习将主机A和B作为一组,主机C和D作为一组,主机E和F作为一组。

现仅以主机A、B为例,其它组的操作参考主机A、B的1. 主机B启动协议分析器,打开捕获窗口进行数据捕获并设置过滤条件(源MAC地址为主机A的MAC地址)。

2. 主机A ping 主机B。

3. 主机B停止捕获数据,在捕获的数据中查找主机A所发送的ICMP数据帧,并分析该帧内容。

● 记录实验结果表1-3实验结果思考问题:1、为什么有的主机会收到ICMP数据包而有的主机收不到ICMP 数据包?答:ping命令是端对端的通信,只有目的主机和在同一共享模块中的主机才能收到ICMP数据包。

AC、BD之间有共享设备,而EF之间没有。

2、根据实验理解集线器(共享设备)和交换机(交换设备)的区别?答:集线器将收到的数据包向所有已连接的端口转发,交换机只将数据包向目的主机连接的端口转发。

山东大学操作系统实验报告完整版

山东大学操作系统实验报告完整版

山东大学操作系统实验报告HEN system office room 【HEN16H-HENS2AHENS8Q8-HENH1688】操作系统实验报告计算机科学与技术学院目录一、进程控制实验实验目的加深对于进程并发执行概念的理解。

实践并发进程的创建和控制方法。

观察和体验进程的动态特性。

进一步理解进程生命期期间创建、变换、撤销状态变换的过程。

掌握进程控制的方法,了解父子进程间的控制和协作关系。

练习 Linux 系统中进程创建与控制有关的系统调用的编程和调试技术。

示例实验实验内容以下实验示例程序应实现一个类似shell 子命令的功能,它可以从执行程序中启动另一个新的子进程并执行一个新的命令和其并发执行。

实验演示结果独立实验实验内容参考以上示例程序中建立并发进程的方法,编写一个父子协作进程,父进程创建一个子进程并控制它每隔 3 秒显示一次当前目录中的文件名列表。

实验步骤算法设计通过进程间的通讯,先创建一个父进程一个子进程,父进程沉睡3秒,子进程作为当前父进程再次创建一个他的子进程,当前子进程执行显示当前目录文件列表功能,执行execve()方法后死亡。

While(1)在死循环里无限进行当前操作。

即达到父进程创建一个子进程并控制它每隔3秒显示一次当前目录中的文件名列表的要求。

开发调试过程打开一终端命令行窗体,新建一个文件夹,在该文件夹中建立名为的C 语言程序;再建立以下名为的 C 语言头文件;建立项目管理文件 Makefile;输入 make 命令编译连接生成可执行的 pctl 程序;执行 pctl 程序;再次执行带有子进程指定执行命令的 pctl 程序。

思考与分析1.反映的进程的特征和功能,在真实的操作系统中是怎样实现和反映出教材中讲解的进程的生命期、进程的实体和进程状态控制的。

对于进程概念和并发概念有哪些新的理解和认识子进程是如何创建和执行新程序的答:进程是一个可并发执行的程序在某数据集上的一次运行,是程序的一次运行过程。

山东大学操作系统实验一

山东大学操作系统实验一

软件学院操作系统实验报告实验题目:实验一、进程控制实验学号:201100300124日期:2013年04月12日班级:5班姓名:韩俊晓Email:hanjunxiao188@实验目的:加深对于进程并发执行概念的理解。

实践并发进程的创建和控制方法。

观察和体验进程的动态特性。

进一步理解进程生命期期间创建、变换、撤销状态变换的过程。

掌握进程控制的方法,了解父子进程间的控制和协作关系。

练习Linux系统中进程创建与控制有关的系统调用的编程和调试技术。

实验要求:编写一个多进程并发执行程序。

父进程首先创建一个执行ls命令的子进程然后再创建一个执行ps命令的子进程,并控制ps命令总在ls 命令之前执行。

硬件环境:实验室计算机软件环境:Ubuntu08.4-Linux操作系统BASH_VERSION='3.2.33(1)-releasegcc version 4.1.2gedit 2.18.2OpenOffice 2.3实验步骤:1.实验说明:1)与进程创建、执行有关的系统调用说明进程可以通过系统调用fork()创建子进程并和其子进程并发执行.子进程初始的执行映像是父进程的一个复本.子进程可以通过exec()系统调用族装入一个新的执行程序。

父进程可以使用wait()或waitpid()系统调用等待子进程的结束并负责收集和清理子进程的退出状态。

fork()系统调用语法:#include <unistd.h>pid_t fork(void);fork成功创建子进程后将返回子进程的进程号,不成功会返回-1. exec 系统调用有一组6个函数,其中示例实验中引用了execve系统调用语法:#include <unistd.h>intexecve(const char *path, const char *argv[], const char * envp[]); path 要装入的新的执行文件的绝对路径名字符串.argv[] 要传递给新执行程序的完整的命令参数列表(可以为空). envp[] 要传递给新执行程序的完整的环境变量参数列表(可以为空). Exec执行成功后将用一个新的程序代替原进程,但进程号不变,它绝不会再返回到调用进程了。

中间件_1综述

中间件_1综述

山东大学计算机科学与技术学院
消息中间件
(Message-Oriented Middleware,
MOM)
山东大学计算机科学与技术学院
动机:RPC调用的缺点 (1)客户端与服务器端需要同时在线; (2)客户端需要知道服务器端的调用接口,若调用接口发生改
变,客户端需要做相应变化,如通过ODBC连接访问数据库,客户 端需要知道远程数据库的类型,若类型发生改变,还需要重新装 载相应的驱动程序。
( Coordiantor), 其 他 节 点 称 为 事 务 参 与 者 (Participants)。协调者掌握提交或撤消事务的决定 权,而其它参与者则各自负责本地数据的更新,并向协 调者提出撤消或提交子事务的意向。一般一个结点对应
一个子事务。
山东大学计算机科学与技术学院
常见的TPM产品有
BEA的Tuxedo Microsoft的MTS SUN的JTS OMG的OTS 东方通的TongLINK/TongEasy
结点或结点间通信的失效都可能导致分布式事务的失败。 因此,为了保证事务的完整性,分布式事务通常采用两 阶段提交协议(Two Phase Commitment Protocol,简称 2PC)来提交。 两阶段提交协议的思路是 TM向所有RM发出正式提交请 求之前,先询问所有RM是否已准备好提交,仅当所有的 RM都给出肯定的回答时,TM才发出提交的请求;如果其 中有一个RM给出否定地回答,TM就指示所有的RM进行回 卷。
山东大学计算机科学与技术学院
远程过程调用中间件
山东大学计算机科学与技术学院
本地过程调用的扩展,可透明地调用远地提供的服务 数据表示、可靠传递、服务定位等 分布式计算环境,DCE
山东大学计算机科学与技术学院

【2018最新】山东大学嵌入式实验报告 (8000字)-word范文 (13页)

【2018最新】山东大学嵌入式实验报告 (8000字)-word范文 (13页)

本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!== 本文为word格式,下载后可方便编辑和修改! ==山东大学嵌入式实验报告 (8000字)嵌入式实验报告班级:电信工X班姓名:XXX 学号:201X0012XXXX实验一、ARM汇编指令实验-简单数据搬移实验实验目的:熟悉实验开发环境,掌握简单ARM汇编的使用方法实验内容熟悉开发环境并使用LDR/STR,MOV等指令访问寄存器或存储单元;使用ADS/SUB/LSL/LSR/AND/ORR等指令完成基本数学/逻辑运算。

实验要求(1)按照前面叙述介绍的方法,在ADS下创建一个工程asmlabl,定义两个变量x,y和堆栈地址0x1000,将变量x的内容存到堆栈顶,然后计算x+y,并将和存到堆栈的下一个单元。

通过AXD查看寄存器和memory和寄存器中数据的变化。

(2)在指令后面加上适当注释,说明指令功能。

(3)指出程序执行后各相关寄存器及存储器单元的具体内容。

程序代码截图如下:程序运行结果截图:由实验结果可知堆栈的第二个单元中存放了x+y的值6D练习题编写程序实现对一段数据的最大值和最小值搜索,最大值存在于max变量之中,最小值存在于min变量之中。

提示:数据的定义采用伪指令:DCD来实现。

基本思路:利用R0做基地址,将R1,R2分别放入第一单元的内容,利用R3做循环计数,利用R4遍历读取第2至最后一个数据,如果R1的数据小于新读入的R4数据则将R4的内容存入R1,如果R2的内容大于R4的内容则将R4的内容存入R2,。

遍历完成之后,R1将存放最大数据,R2将存放最小数据。

程序代码截图如下:程序运行结果截图:实验二 ARM汇编指令实验2-字符串拷贝实验实验目的通过实验掌握使用LDB/STB,b等指令完成较为复杂的存储区访问和程序分支,学会使用条件码。

实验内容熟悉开发环境的使用并完成一块存储区的拷贝。

完成分支程序设计,要求判断参数,根据不同参数,调用不同的子程序。

中间件实验报告

中间件实验报告

武汉理工大学学生实验报告书实验课程名称软件构件与中间件技术开课学院计算机科学与技术学院指导老师姓名祁明龙学生姓名彭新辉学生专业班级软件0902 2011 — 2012学年第二学期实验课程名称:软件构件与中间件技术实验课程名称:软件构件与中间件技术实验课程名称:软件构件与中间件技术附录一Book1.xls附录二实验代码:实验一ROInter.javaimport java.rmi.Remote;import java.rmi.RemoteException;import java.util.*;/**** @author Administrator*/public interface ROInterextends Remote{public ArrayList getStudents() throws RemoteException; }ROImpl.javaimport javax.rmi.PortableRemoteObject;import java.rmi.RemoteException;import java.sql.*;import java.util.*;/**** @author Administrator*/public class ROImplextends PortableRemoteObjectpublic ROImpl()throws RemoteException{super();}public ArrayList getStudents() throws RemoteException{ArrayList al = new ArrayList();try{String driver = "sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:rmiiiop_ds";String user="";String password="";String sql="SELECT * FROM STUDENT";Class.forName(driver);Connection con =DriverManager.getConnection(url,user,password);if(con!=null)System.out.println("Connection to DB is established!");elseSystem.out.println("Connection to DB is failled!");Statement st = con.createStatement();ResultSet rs = st.executeQuery(sql);while(rs.next()){al.add(new STUDENT(rs.getString("ID"),rs.getString("Name"), rs.getString("Major"),rs.getString("Class")));}}catch(Exception ex){ex.printStackTrace();}return al;}}STUDENT.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/import java.io.Serializable;/***public class STUDENTimplements Serializable{private String ID,Name,Major,Class;public STUDENT(String ID, String Name, String Major, String Class) { this.ID = ID; = Name;this.Major = Major;this.Class = Class;}public void print(){System.out.println(ID+"\t\t"+Name+"\t\t"+Major+"\t\t"+Class);}}Server.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/import javax.naming.Context;import javax.naming.InitialContext;/**** @author Administrator*/public class Server {public static void main(String[] args){try{ROImpl remoteObject = new ROImpl();Context naming = new InitialContext();naming.rebind("Students", remoteObject);System.out.println("The Server is ready.....");}catch(Exception ex){ex.printStackTrace();}}}/** To change this template, choose Tools | Templates * and open the template in the editor.*/import javax.rmi.PortableRemoteObject;import javax.naming.Context;import javax.naming.InitialContext;import java.util.*;/**** @author Administrator*/public class Client {public static void main(String[] args){try{Context ct = new InitialContext();Object objRef = ct.lookup("Students");ROInter ro =(ROInter)PortableRemoteObject.narrow(objRef,ROInter.class);ArrayList rs = ro.getStudents();Iterator it = rs.iterator();while(it.hasNext()){STUDENT stu =(STUDENT)it.next();stu.print();}}catch(Exception ex){ex.printStackTrace();}}}试验二dbapp.idlmodule IDLDBApp{typedef struct _STUDENT{string id;string name;string major;typedef sequence<STUDENT> AllStudents;interface DisplayDBTable{AllStudents getStudents();};};ROImpl.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package IDLDBApp;import org.omg.CORBA.*;import org.omg.CosNaming.*;import org.omg.CosNaming.NamingContextPackage.*;import org.omg.PortableServer.*;import java.util.Properties;import java.sql.*;import java.util.*;/**** @author Administrator*/public class ROImplextends DisplayDBTablePOA{private ORB orb;private _STUDENT[] stus;private ArrayList al = new ArrayList();public void impl01(){stus = new _STUDENT[3];stus[0]=new _STUDENT("001","Wang","Software","09001");stus[1]=new _STUDENT("002","Zang","Software","09001"); stus[2]=new _STUDENT("003","Zhang","Software","09001"); }public void impl02(){al.add(new _STUDENT("001","Wang","Software","09001"));al.add(new _STUDENT("001","Wang","Software","09001"));al.add(new _STUDENT("001","Wang","Software","09001"));public void impl03(){al.add(new _STUDENT("001","Wang","Software","09001")); al.add(new _STUDENT("001","Wang","Software","09001")); al.add(new _STUDENT("001","Wang","Software","09001")); stus = new _STUDENT[al.size()];Iterator it = al.iterator();int i=0;while(it.hasNext()){stus[i]= (_STUDENT)it.next();i++;}}public void impl04(){this.fillArrayList();stus = new _STUDENT[al.size()];Iterator it = al.iterator();int i=0;while(it.hasNext()){stus[i]= (_STUDENT)it.next();i++;}}public void impl05(){String id,name,major,cls;this.fillArrayList();stus = new _STUDENT[al.size()];Iterator it = al.iterator();int i=0;while(it.hasNext()){_STUDENT stu = (_STUDENT)it.next();id = stu.id;name = ;major = stu.major;cls = stu.calss;stus[i]= new _STUDENT(id,name,major,cls);i++;}public void setORB(ORB orb){this.orb = orb;}public void fillArrayList(){try{String driver = "sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:rmiiiop_ds";String user="";String password="";String sql="SELECT * FROM STUDENT";Class.forName(driver);Connection con =DriverManager.getConnection(url,user,password);if(con!=null)System.out.println("Connection to DB is established!"); elseSystem.out.println("Connection to DB is failled!"); Statement st = con.createStatement();ResultSet rs = st.executeQuery(sql);while(rs.next()){al.add(new _STUDENT(rs.getString("ID"),rs.getString("Name"), rs.getString("Major"),rs.getString("Class")));}rs.close();st.close();con.close();}catch(Exception ex){ex.printStackTrace();}}public void display(){this.fillArrayList();Iterator it = al.iterator();while(it.hasNext()){_STUDENT stu= (_STUDENT)it.next();stu.print();}}public void displayStudents()int i;for(i=0;i<stus.length;i++)stus[i].print();}public void getStudents (IDLDBApp.AllStudentsHolder all){this.impl04();all.value = this.stus;}public void fromExel2MySql(){try{String driver = "com.mysql.jdbc.Driver";String url= "jdbc:mysql://localhost:3306/mysql";String user = "root";String passwd = "miaham";String sqlCreate = "CREATE TABLE STUDENT(ID varchar(30) not null"+ " primary key,NAME varchar(30) not null,"+" MAJOR varchar(30) not null,"+"CLASS varchar(30) not null)";Class.forName(driver);Connection con =DriverManager.getConnection(url,user,passwd);if(con!=null)System.out.println("Connection to DB is established!");elseSystem.out.println("Connection to DB is failled!");Statement st = con.createStatement();st.execute(sqlCreate);st.close();con.close();}catch(Exception ex ){ex.printStackTrace();}}public static void main(String[] args){ROImpl ro = new ROImpl();ro.fromExel2MySql();//ro.impl05();//ro.displayStudents();}}Server.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package IDLDBApp;import org.omg.CosNaming.*;import org.omg.CosNaming.NamingContextPackage.*;import org.omg.CORBA.*;import org.omg.PortableServer.*;import org.omg.PortableServer.POA;import java.util.Properties;/**** @author Administrator*/public class Server {public static void main(String args[]) {try{Properties p = new java.util.Properties();p.setProperty("com.sun.CORBA.codeset.charsets", "0x05010001, 0x00010109"); // UTF-8, UTF-16p.setProperty("com.sun.CORBA.codeset.wcharsets", "0x00010109, 0x05010001"); // UTF-16, UTF-8// create and initialize the ORBORB orb = ORB.init(args, p);// get reference to rootpoa & activate the POAManagerorg.omg.CORBA.Object corbaObj= orb.resolve_initial_references("RootPOA");POA rootpoa = POAHelper.narrow(corbaObj);rootpoa.the_POAManager().activate();// create servant and register it with the ORBROImpl roImpl = new ROImpl();roImpl.setORB(orb);// get object reference from the servantorg.omg.CORBA.Object ref =rootpoa.servant_to_reference(roImpl);DisplayDBTable href = DisplayDBTableHelper.narrow(ref);// get the root naming context// NameService invokes the name serviceorg.omg.CORBA.Object objRef =orb.resolve_initial_references("NameService");// Use NamingContextExt which is part of the Interoperable// Naming Service (INS) specification.NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);// bind the Object Reference in NamingString name = "STUDENTS";NameComponent[] path = ncRef.to_name( name );ncRef.rebind(path, href);System.out.println("RootServer ready and waiting ...");// wait for invocations from clientsorb.run();}catch (Exception e) {System.err.println("ERROR: " + e);e.printStackTrace(System.out);}System.out.println("HelloServer Exiting ...");}}Client.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package IDLDBApp;import org.omg.CosNaming.*;import org.omg.CosNaming.NamingContextPackage.*;import org.omg.CORBA.*;import java.util.*;/**** @author Administrator*/public class Client {static DisplayDBTable roImpl;public static void main(String args[]){try{Properties p = new java.util.Properties();p.setProperty("com.sun.CORBA.codeset.charsets", "0x05010001, 0x00010109"); // UTF-8, UTF-16p.setProperty("com.sun.CORBA.codeset.wcharsets", "0x00010109, 0x05010001"); // UTF-16, UTF-8// create and initialize the ORBORB orb = ORB.init(args, p);// get the root naming contextorg.omg.CORBA.Object objRef =orb.resolve_initial_references("NameService");// Use NamingContextExt instead of NamingContext. This is// part of the Interoperable naming Service.NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);// resolve the Object Reference in NamingString name = "STUDENTS";roImpl = DisplayDBTableHelper.narrow(ncRef.resolve_str(name)); AllStudentsHolder students = new AllStudentsHolder();roImpl.getStudents(students);_STUDENT[] all = students.value;for(int i=0;i<all.length;i++){System.out.println(all[i].id+"\t\t"+all[i].name+"\t\t"+all[i].major+"\t\t"+all[i].calss+"\t\t");}} catch (Exception e) {System.out.println("ERROR : " + e) ;e.printStackTrace(System.out);}}}试验三将book1.xls电子表格数据读到MySql数据库中STUDENT.javapublic class STUDENT {private String id,name,major,cls;public STUDENT(String id, String name, String major, String cls) { super();this.id = id; = name;this.major = major;this.cls = cls;}public STUDENT() {super();// TODO Auto-generated constructor stub}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public String getCls() {return cls;}public void setCls(String cls) {this.cls = cls;public void print(){System.out.println(this.id+"\t\t"++"\t\t"+this.major+"\t\t"+this.cls);}}DBApp.javaimport java.sql.*;import java.util.ArrayList;import java.util.Iterator;public class DBAppa {private ArrayList al = new ArrayList();public void fillArrayList(){try{String driver = "sun.jdbc.odbc.JdbcOdbcDriver";String url="jdbc:odbc:rmiiiop_ds";String user="";String password="";String sql="SELECT * FROM STUDENT";Class.forName(driver);Connection con =DriverManager.getConnection(url,user,password);if(con!=null)System.out.println("Connection to DB is established!");elseSystem.out.println("Connection to DB is failled!");Statement st = con.createStatement();ResultSet rs = st.executeQuery(sql);while(rs.next()){al.add(new STUDENT(rs.getString("ID"),rs.getString("Name"), rs.getString("Major"),rs.getString("Class1")));}rs.close();st.close();con.close();}catch(Exception ex){ex.printStackTrace();}}public void display(){this.fillArrayList();Iterator it = al.iterator();while(it.hasNext()){STUDENT stu= (STUDENT)it.next();stu.print();}}public void fromExel2MySql(){this.fillArrayList();try{String driver = "com.mysql.jdbc.Driver";String url="jdbc:mysql://localhost:3306/students"+"?useUnicode=true&characterEncoding=UTF-8";String user = "root";String passwd = "miaham";String sqlCreate = "CREATE TABLE STUDENT(ID varchar(50) not null"+ " primary key,NAME varchar(50) not null,"+" MAJOR varchar(50) not null,"+"CLASS1 varchar(50) not null)"+"ENGINE=InnoDB DEFAULT CHARSET=utf8";String sqlInsert = "insert into STUDENT("+"id,name,major,class1) values ("+"?,?,?,?)";Class.forName(driver);Connection con =DriverManager.getConnection(url,user,passwd);if(con!=null)System.out.println("Connection to DB is established!");elseSystem.out.println("Connection to DB is failled!");Statement st = con.createStatement();st.execute(sqlCreate);con.setAutoCommit(false);PreparedStatement pst =con.prepareStatement(sqlInsert);Iterator it = al.iterator();while(it.hasNext()){STUDENT stu = (STUDENT)it.next();pst.setString(1, stu.getId());pst.setString(2,stu.getName());pst.setString(3, stu.getMajor());pst.setString(4, stu.getCls());pst.executeUpdate();}mit();pst.close();st.close();con.close();}catch(Exception ex ){ex.printStackTrace();}}public static void main(String[] args){DBAppa db = new DBAppa();//db.delete();db.fromExel2MySql();//db.fillArrayList();//db.display();//db.selectAll();}}MyEJBApp02.jarStudent.java/** To change this template, choose Tools | Templates * and open the template in the editor.*/package course.eb;import java.io.Serializable;import javax.persistence.Basic;import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.Id;import dQueries;import dQuery;import javax.persistence.Table;/**** @author Administrator*/@Entity@Table(name = "student")@NamedQueries({@NamedQuery(name = "Student.findAll", query = "SELECT s FROM Student s"), @NamedQuery(name = "Student.findById", query = "SELECT s FROM Student s WHERE s.id = :id"), @NamedQuery(name = "Student.findByName", query = "SELECT s FROM Student s WHERE = :name"), @NamedQuery(name = "Student.findByMajor", query = "SELECT s FROM Student s WHERE s.major = :major"), @NamedQuery(name = "Student.findByClass1", query = "SELECT s FROM Student s WHERE s.class1 = :class1")})public class Student implements Serializable {private static final long serialVersionUID = 1L;@Id@Basic(optional = false)@Column(name = "ID")private String id;@Basic(optional = false)@Column(name = "NAME")private String name;@Basic(optional = false)@Column(name = "MAJOR")private String major;@Basic(optional = false)@Column(name = "CLASS1")private String class1;public Student() {}public Student(String id) {this.id = id;}public Student(String id, String name, String major, String class1) {this.id = id; = name;this.major = major;this.class1 = class1;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getName() {return name;}public void setName(String name) { = name;}public String getMajor() {return major;}public void setMajor(String major) {this.major = major;}public String getClass1() {return class1;}public void setClass1(String class1) {this.class1 = class1;}@Overridepublic int hashCode() {int hash = 0;hash += (id != null ? id.hashCode() : 0);return hash;}@Overridepublic boolean equals(Object object) {// TODO: Warning - this method won't work in the case the id fields are not setif (!(object instanceof Student)) {return false;}Student other = (Student) object;if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {return false;}return true;}@Overridepublic String toString() {return "course.eb.Student[id=" + id + "]";}}StudentSLSBBeanBean.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package course.eb;import javax.ejb.Stateless;import java.util.List;import javax.persistence.PersistenceContext;import javax.persistence.EntityManager;import javax.persistence.Query;/**** @author Administrator*/@Stateless(mappedName="ejb/StudentSLSBBean")public class StudentSLSBBeanBean implements StudentSLSBBeanRemote {@PersistenceContext(unitName="MyEJBApp02-ejbPU")// Add business logic below. (Right-click in editor and choose// "Insert Code > Add Business Method" or "Web Service > Add Operation")private EntityManager em;public List<Student> findAllStudents() {Query query = em.createNamedQuery("Student.findAll");return query.getResultList();}public Student findStudentByID(String id) {Query query = em.createNamedQuery("Student.findById");query.setParameter("id",id);return (Student)query.getSingleResult();}public Student findStudentByName(String name) {Query query = em.createNamedQuery("Student.findByName");query.setParameter("name",name);return (Student)query.getSingleResult();}public List<Student> findStudentsByMajor(String major) {Query query = em.createNamedQuery("Student.findByMajor");query.setParameter("major",major);return query.getResultList();}public List<Student> findStudentsByClass(String class1) {Query query = em.createNamedQuery("Student.findByClass1");query.setParameter("class1",class1);return query.getResultList();}//@PersistenceContext(unitName="MyEJBApp1PU")// Add business logic below. (Right-click in editor and choose// "Insert Code > Add Business Method" or "Web Service > Add Operation") }StudentSLSBBeanRemote.java/** To change this template, choose Tools | Templates* and open the template in the editor.*/package course.eb;import javax.ejb.Remote;import java.util.List;/**** @author Administrator*/@Remotepublic interface StudentSLSBBeanRemote {List<Student> findAllStudents();Student findStudentByID(String id);Student findStudentByName(String name);List<Student> findStudentsByMajor(String major); List<Student> findStudentsByClass(String class1); }客户端程序;Client.javapackage ejbtest;import java.util.Properties;import javax.naming.InitialContext;import javax.naming.NamingException;import java.util.List;import java.util.Scanner;import course.eb.*;/**** @author Administrator*/public class Client {public static void menu(){System.out.println("\n\n-----Menu Options-----");System.out.println("1 display all");System.out.println("2 display by class");System.out.println("3 display by id");System.out.println("4 display by name");System.out.println("9 quit");System.out.println("Your choice=>");System.out.println("----------------------\n\n");}public static void printList(List<Student> students){for(Student s:students){System.out.println(s.getId()+"\t\t"+s.getName()+"\t\t"+s.getMajor()+"\t\t"+s.getClass1());}}/*public static void printStudent(Student stu){System.out.println("My id is:\t"+stu.getId()+"\n"+"My name is:\t"+stu.getName()+"\n"+"My major is:\t"+stu.getMajor()+"\n"+"My class is:\t"+stu.getClass());}*/public static void main(String[] args) {Properties props = new Properties();props.setProperty("java.naming.factory.initial","com.sun.enterprise.naming.SerialInitContextFactory");props.setProperty("java.naming.factory.url.pkgs","com.sun.enterprise.naming");props.setProperty("java.naming.factory.state","com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl");props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");try {InitialContext ctx = new InitialContext(props);StudentSLSBBeanRemote sr=(StudentSLSBBeanRemote)ctx.lookup("ejb/StudentSLSBBean");// List<Student> pl = sr.findAllStudents();// printList(pl);String op=null;Scanner input = new Scanner(System.in);int opn=6;do {menu();op=input.nextLine();opn=Integer.parseInt(op);switch(opn){case 1:List<Student> stus =sr.findAllStudents();if(stus==null)System.out.println("List is empty.");printList(stus);break;/* case 3:System.out.println("Input student id:");String id = input.nextLine();Student stu = sr.findStudentByID(id);printStudent(stu);break;case 2:System.out.println("Input students' class:"); String stuClass = input.nextLine();List<Student> stux =sr.findStudentsByClass(stuClass);printList(stux);break;case 4:System.out.println("Input student name:");String stuName = input.nextLine();Student stuxx =sr.findStudentByName(stuName);printStudent(stuxx);break;case 5:break;*/default:break;}}while(opn!=9);} catch (NamingException e) {e.printStackTrace();}}}。

山东大学计算机网络实验报告

山东大学计算机网络实验报告

计算机网络试验报告学院:计算机科学与技术学院班级:13计基地目录一、实验简述 (2)二、实验内容 (3)实验一:双队列模型 (3)一、实验模型 (3)二、具体实现 (3)三、结果展示 (4)实验二:802.11 无线竞争模型 (6)一、实验模型 (6)二、具体实现 (6)三、实验结果 (6)1.图表结果 (6)2.数据结果 (8)三、实验感想 (8)一、双队列单服务器 (8)二、802.11无限竞争模型 (8)一、实验简述实验一要求采用尽量公平的调度算法,实现一个服务器服务2个队列的功能。

且满足以下条件:到达包数是泊松过程(Poisson process);服务时间是指数分布(exponentially distributed);只有一部服务器(server);队列长度无限制;可加入队列的包数为无限。

实验二基于802.11协议采用二进制指数回退算法,没有中央控制器的调度算法实现对五个站的调度机制。

要求尽可能达到公平。

二、实验内容实验一:双队列模型一、实验模型本次计算机网络实验主要是关于服务器处理包的过程模拟,其中一个重要的基础排队模型是M/M/1 排队模型。

M/M/1排队模型是一种单一服务器(single-server)的排队模型,有以下主要特点:1.到达人数是泊松过程(Poisson process)2.服务时间是指数分布(exponentially distributed)3.只有一台服务器(server)4.队列长度无限制5.可加入队列的人数为无限M/M/1排队模型在任何状态下,只有两种事情可能发生:1.有人加入队列。

如果模型在状态k,它会以速率λ进入状态k + 12.有人离开队列。

如果模型在状态k(k不等于0),它会以速率μ进入状态k -1二、具体实现1.赤字轮询算法赤字轮询算法引入赤字的概念, 即在较长时间统计平均意义上平衡各条流所获得的吞吐量。

因为各流之间不同业务造成的数据包大小的差异以及各流内部数据包大小的不同都可能造成在一个轮询周期内各虚拟队列所发送的字节数具有较大偏差。

中间件实验报告

中间件实验报告

学生学号0121410870704 实验课
成绩
学生实验报告书
实验课程名称软件构件与中间件技术
开课学院计算机科学与技术学院
指导教师石兵
学生姓名廖锡峰
学生专业班级软件1402
2016 -- 2017 学年第二学期
实验课程名称:软件构件与中间件技术
第二部分:实验调试与结果分析(可加页)
一、实验小结、建议及体会
通过本次实验,了解了基于JAVA CORBA 的四则运算分布式系统开发,对中间件有了更深的理解。

二、思考题
(一)假定使用JDK1.6,编译idl 文件的命令是什么?
idlj –fall BA.idl
(二)编译后,产生了哪几个文件?简要说明生成的各个Java 类的作用。

尤其是,客户
端的码根和服务器端的框架是哪个类。

对于BAInterface 接口,编译后共产生以下六个JAVA 类或接口:BAInterface.java, BAInterfaceOperations.java, BAInterfaceHelper.java, BAInterfaceHolder.java, BAInterfacePOA.java, _BAInterfaceStub.java。

前两个文件是对应IDL 接口的JAVA 接口,HELPER 类提供CORBA 类型转
实验课程名称:软件构件与中间件技术
第二部分:实验调试与结果分析(可加页)一、实验结果。

山东大学-中间件实验报告

山东大学-中间件实验报告

山东大学软件学院中间件技术课程实验报告onResize();},error : function(e) {alert('初始化数据错误!');}});});并从bootstrap上找一些已经写好的布局,作为参考。

加入到网页的界面中。

一、数据库操作的封装1、AutoCreateDB——自动创建数据库(1)可以根据下列query的结果判断数据库是否存在:Object obj = dao.QueryOnly("SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?",new Object[] { DATABASE });不存在则创建数据库,则执行executeCreate方法。

(2)AutoCreateDB自动创建数据库的表遍历表,对于数据库中的每一个表,都执行“检测、若不存在则创建”操作,可以根据该query的结果判断数据库的表是否存在,不存在则创建数据库表,则执行executeCreate方法。

2、JdbcDao数据库相关操作(1)在JdbcDao 中定义应用与数据库建立连接,其相关参数从config.properties中获取:/**获取Connection连接*/public Connection getConnection(){Connection conn = null;System.out.println(JDBC_URL);System.out.println(USER_NAME);System.out.println(USER_PWD);try {conn = DriverManager.getConnection(JDBC_URL,USER_NAME,USER_PWD);} catch (SQLException e) {e.printStackTrace();}return conn;}(2)在JdbcDao 中定义关闭所有连接的方法/**关闭所有连接*/public void closeAll(Connection conn, Statement ps, ResultSet rs){try {if(rs!=null) rs.close();} catch (SQLException e) { e.printStackTrace(); }try {if(ps!=null) ps.close();} catch (SQLException e) { e.printStackTrace(); }try {if(conn!=null) conn.close();} catch (SQLException e) { e.printStackTrace(); }}(3)在JdbcDao 中定义增删改查的方法在JdbcDao 中定义执行update的方法(delete则status=0)public int executeUpdate(String sql, Object[] obj)在JdbcDao 中定义执行insert的方法public int executeInsert(String sql, Object[] obj)在JdbcDao 中定义执行query(返回多条记录)的方法public List<Map<String, Object>> Query(final String sql,Object []obj)在JdbcDao 中定义执行query(返回单条记录)的方法public Object QueryOnly(final String sql,Object []obj)3、JoinSql, Relatio, Where构建SQL语使得无需自己写原生的SQL,自己写SQL则比较容易出错.比如,当程序开始时检测并初始化数据库和表时输出的数据库语句如下:二、处理模块以及控制模块1、本框架使用流程:首先是一个control,类的命名方式xxx+Veasion请求url,/项目名/test/method.veatest:类名除Veasion之外的字符串,小写method:将被调用的方法名,或注解@Veasion(value=""),值不包含/ method定义:返回String,表示跳转的url或页面,默认转发,重定向请加“redirect:”或方法注解@Veasion(redirect=true).返回除String之外的Object,返回该对象的json.类中可以添加属性HttpServletRequest获取请求对象.类中可以添加属性HttpServletResponse获取响应对象.类中可以添加属性JSONObject获取分装的数据.2、在VeasionServlet的service方法中的uri预处理字符串处理uri,得到className和methodNameString[] classMethod = getClassMethod(vea);System.out.println("===");for(int i=0;i>classMethod.length;i++){System.out.println(classMethod[i]);}String className = classMethod[0];String methodName = classMethod[1];vea= classMethod[2];比如处理一下uri的过程如下:uri:/Veasion/admin/desktop/iconSearch.veavea:/admin/desktop/iconSearch.veaclassName:veasion.control.admin.DesktopVeasionmethodName:IconSearchvea_:admin/desktop/iconSearch3、Java的反射机制简介(1)Java的反射机制简介及举例:Java语言允许通过程序化的方式间接对Class的对象实例操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:构造函数、属性和方法等。

中间件实验报告1

中间件实验报告1
strncpy(open_file_1_arg.file_name , "/home/wame100/test.txt",26);
result_1 = open_file_1(&open_file_1_arg, clnt);
if (result_1 == (int *) NULL) {
clnt_perror (clnt, "call failed");
*/
result = write(argp->fd , argp->word_write ,strlen(argp->word_write));
printf("rpc向文件中写入%d bytes写入内容: %s\n" , strlen(argp->word_write) , argp->word_write);
return &result;
}
int *
close_file_1_svc(int *argp, struct svc_req *rqstp)
{
static int result;
/*
* insert server code here
*/
result = close(*argp);
printf("rpc关闭文件\n");
五、测试和截图
测试环境:
虚拟机Ubuntu/Linux作为服务器,ip地址是10.0.4.118。
虚拟机Windows Xp作为客户端,采用Vc ++ 6.0编译器。
客户端访问服务器文件/home/wame100/test.txt,分别测试open , close , read , write.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

山东大学软件学院中间件技术课程实验报告onResize();},error : function(e) {alert('初始化数据错误!');}});});并从bootstrap上找一些已经写好的布局,作为参考。

加入到网页的界面中。

一、数据库操作的封装1、AutoCreateDB——自动创建数据库(1)可以根据下列query的结果判断数据库是否存在:Object obj = dao.QueryOnly("SELECT COUNT(*) FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME=?",new Object[] { DATABASE });不存在则创建数据库,则执行executeCreate方法。

(2)AutoCreateDB自动创建数据库的表遍历表,对于数据库中的每一个表,都执行“检测、若不存在则创建”操作,可以根据该query的结果判断数据库的表是否存在,不存在则创建数据库表,则执行executeCreate方法。

2、JdbcDao数据库相关操作(1)在JdbcDao 中定义应用与数据库建立连接,其相关参数从config.properties中获取:/**获取Connection连接*/public Connection getConnection(){Connection conn = null;System.out.println(JDBC_URL);System.out.println(USER_NAME);System.out.println(USER_PWD);try {conn = DriverManager.getConnection(JDBC_URL,USER_NAME,USER_PWD);} catch (SQLException e) {e.printStackTrace();}return conn;}(2)在JdbcDao 中定义关闭所有连接的方法/**关闭所有连接*/public void closeAll(Connection conn, Statement ps, ResultSet rs){try {if(rs!=null) rs.close();} catch (SQLException e) { e.printStackTrace(); }try {if(ps!=null) ps.close();} catch (SQLException e) { e.printStackTrace(); }try {if(conn!=null) conn.close();} catch (SQLException e) { e.printStackTrace(); }}(3)在JdbcDao 中定义增删改查的方法在JdbcDao 中定义执行update的方法(delete则status=0)public int executeUpdate(String sql, Object[] obj)在JdbcDao 中定义执行insert的方法public int executeInsert(String sql, Object[] obj)在JdbcDao 中定义执行query(返回多条记录)的方法public List<Map<String, Object>> Query(final String sql,Object []obj)在JdbcDao 中定义执行query(返回单条记录)的方法public Object QueryOnly(final String sql,Object []obj)3、JoinSql, Relatio, Where构建SQL语使得无需自己写原生的SQL,自己写SQL则比较容易出错.比如,当程序开始时检测并初始化数据库和表时输出的数据库语句如下:二、处理模块以及控制模块1、本框架使用流程:首先是一个control,类的命名方式xxx+Veasion请求url,/项目名/test/method.veatest:类名除Veasion之外的字符串,小写method:将被调用的方法名,或注解@Veasion(value=""),值不包含/ method定义:返回String,表示跳转的url或页面,默认转发,重定向请加“redirect:”或方法注解@Veasion(redirect=true).返回除String之外的Object,返回该对象的json.类中可以添加属性HttpServletRequest获取请求对象.类中可以添加属性HttpServletResponse获取响应对象.类中可以添加属性JSONObject获取分装的数据.2、在VeasionServlet的service方法中的uri预处理字符串处理uri,得到className和methodNameString[] classMethod = getClassMethod(vea);System.out.println("===");for(int i=0;i>classMethod.length;i++){System.out.println(classMethod[i]);}String className = classMethod[0];String methodName = classMethod[1];vea= classMethod[2];比如处理一下uri的过程如下:uri:/Veasion/admin/desktop/iconSearch.veavea:/admin/desktop/iconSearch.veaclassName:veasion.control.admin.DesktopVeasionmethodName:IconSearchvea_:admin/desktop/iconSearch3、Java的反射机制简介(1)Java的反射机制简介及举例:Java语言允许通过程序化的方式间接对Class的对象实例操作,Class文件由类装载器装载后,在JVM中将形成一份描述Class结构的元信息对象,通过该元信息对象可以获知Class的结构信息:构造函数、属性和方法等。

Java允许用户借由这个Class相关的元信息对象间接调用Class对象的功能.例:public Class Car{private String brand;private String color;private int maxSpeed;public Car(){}public Car(String brand,String color,int maxSpeed){this.brand = brand;this.color = color;this.maxSpeed = maxSpeed;}public void introduce(){System.out.println("brand"+brand+",color"+color+",+maxSpeed"+maxSpeed);}}import ng.reflect.Construcor;import ng.reflect.Field;import ng.reflect.Method;public class ReflectTest{public static Car initByDefaultConst() throws Throwable{//通过类加载器获取Car类对象ClassLoader loader = Thread.currentThread().getContextClassLoader();Class clazz = loader.loadClass(Car)://获取类的默认构造器对象并通过它实例化CarConstructor cons = clazz.getDeclardConstructor((Class[])null);Car car = (Car)cons.newInstance()://通过反射方法设置属性Method setBrand = clazz.getMethod("setBrand",String.class);setBrand.invoke(car,"WCA72");Method setColor = clazz.getMethod("setColor ",String.class);setColor .invoke(car,"black");Method setMaxSpeed = clazz.getMethod("setMaxSpeed ",int.class);setMaxSpeed .invoke(car,200);return car;}public static void main(String[] args) throws Throwable{Car car = initByDefaultConst();car.introduce();}}(2)所用到的相关方法和类简介Field:类的成员变量的反射类,通过Class#getDeclaredFields()方法可以获取类的成员变量反射对象数组,通过Class#getDeclaredFields(String name)则可获取某个特定名称的成员变量反射对象。

Field类最主要的方法是set(Object obj,Object value),obj表示操作目标评对象,通过value为目标对象的成员变量设置值。

若成员变为为基础类型,用户可以使用Field类中提供的带类型名的值设置方法。

Method:类方法的反射类,通过Class#getDeclaredMehtods()方法可以获取类的所有方法反射类对象数组Method[]。

在JDK 5.0中可以通过getDeclaredMehtods(String name,Class parameterTypes)获取特定签名的方法,name为方法名;Class为方法入参类型列表。

Method最主要的方法是invoke(Object obj,Object[] args),obj表示操作的目标对象,args为方法入参。

3、采用反射机制找到对应调用的方法Class c = null;// 反射找到对应control.veasiontry {c = Class.forName(className);Object obj = c.newInstance();//反射属性request,response和json数据this.reflectAttribute(request, response, c, obj);// 反射对应类的对应方法Method[] methods = c.getMethods();boolean success = false;for (int i = 0; i < methods.length; i++) {Method method = methods[i];String fName=method.getName().toLowerCase().trim();boolean isRedirect=false;Veasion v=method.getAnnotation(Veasion.class);//注解方法判断success=this.annotationVeasion(v,methodName,isRedirect);if(success){isRedirect=v.redirect();}//普通方法判断if (!success && fName.equalsIgnoreCase(methodName)) {success=true;}if(success){// 调用对应方法Object returnObj = method.invoke(obj);//封装响应数据并跳转success=dispatcher(request, response, vea, returnObj, isRedirect);if(success)break;}}if (!success) {response.sendError(404);}} catch (Exception e) {response.sendError(500);e.printStackTrace();}三、样例程序运行1、程序入口启动服务器之后默认跳转到index.jsp整个应用的入口是http://localhost:8080/Veasion/index/index.vea根据(二)中将的映射机制,该地址被处理处className和methodName 对应的Controller 是IndexVeasion ,采用的动作是index()2、进入界面管理界面在桌面上的记事本中输入暗码,并回车:通过code验证之后,进入到管理界面:此块操作对应的DeskVeasion。

相关文档
最新文档