本文主要列出项目中使用的Shark API ,并列出已知的Shark1.1和shark2.0(TWS)的差别,不定时更新。

Shark1.1和shark2.0的设计上的总体差别

1.事务:

Shark2.0支持jotm 所以在API中把所有方法中带有 SharkTransaction 参数的重载版本都去掉了,转而使用jotm来对事物进行控制,这么做的后果就是你要像shark的demo中一样在调用shark API时都要手动启动一个事务,不然会报 Transaction is not begun(没有事务曾经被启动)的错误。这样很麻烦,因为Spring 提供了一个jotm的事务管理器所为我在项目中使用了Spring声明式事务,这样就不用在代码中夹杂着jotm事务处理的代码了,有关这方式的使用我会在框架融合部分的文章中加以说明。

2.管理接口:

Shark2.0去掉了 AdminInterface接口和取得该接口实例的方法Shark.getInstance().getAdminInterface(),(在shark1.1中该接口提供取得其它管理接口的方法,如AdminMisc、PackageAdministrator等),而把AdminInterface的方法直接拿到了Shark.getInstance()中去。

也就是说在shark1.0中要取得AdminMisc的代码为

Shark.getInstance().getAdminInterface().getAdminMisc()

而在Shark2.0中是这样的

Shark.getInstance().getAdminMisc()

3.Shark用户管理

在shark1.1中用个用户管理的接口:UserGroupAdministration,在文档中有明确的体现,用法如下

UserGroupAdministration ugAdmin = Shark.getInstance()

.getAdminInterface()

.getUserGroupAdministration();

ugAdmin.createGroup("developers","sweat-shop");

ugAdmin.createUser("developers",

"user",

"secret",

"Jane",

"Doe",

"some@email.address");

System.out.println("Group and user created!");

可以使用这个类来管理用户、用户组、权限,之后使用Sharkconnection的connect方法来登录,如果用户名或密码错误会抛出异常。但是在Shark2.0中这个UserGroupAdministration 被去掉了,在shark的文档中也没找到可以达到相同功能的接口,而且Sharkconnection的connect方法表现的也十分怪异,当使用connect方法时无论你提供的密码是对是错都会成功返回Sharkconnection而且不抛出任何异常,如果用户名也是错误的话,那么Shark 引擎会创建这个用户。后来想想设计者也对的,因为connect方法是“连接”而不是“验证”,那么shark2.0怎样来管理用户、用户组、权限和用户的登录呢。这个问题我找了很久后来终于在shark 的源码中找到了答案原来shark2.0提供了另一个接口来做这些事,那就是org.enhydra.shark.api.admin.UserGroupManagerAdmin(注意,这个包下的类在Shark API文档中并没有被提到,但是文档中有对它的父类org.enhydra.shark.api.internal.usergroup.UserGroupManager的说明,方法差不多大家可以参考一下 ),但是怎么得到这个接口的实例呢(为了这个问题我可是看了好长时间shark的源码,你们有福了有我告诉你们),我根据shark源码改动后的方法如下,可以返回这个接口的实例:

publicUserGroupManagerAdmin getUserGroupAdmin() {

UserGroupManagerAdmin userGroupAdmin =null;

try{

Object ama = Shark.getInstance().getPlugIn(

SharkConstants.PLUGIN_USER_GROUP);

if(amainstanceofUserGroupManagerAdmin) {

userGroupAdmin = (UserGroupManagerAdmin) ama;

}

}catch(Exception e) {

}

returnuserGroupAdmin;

}

有了这个接口用可以实现用户管理相关的功能了,如验证用户的登录:

if(getUserGroupAdmin().validateUser(

connectInfo.getUserIdentification(), connectInfo.getPassword())) {

System.out.println("********************Vaildateuser is true");

}else{

System.out.println("********************Vaildateuser is False");

}

注:因为加入了单独的验证功能,所以Shark1.1中的connect方法也就不会再抛出ConnectFailed, NotConnected 异常了。

4.管理接口中的用户认证

在shark1.1中有的管理接口在使用之前需要对登录的用户进行认证如ExecutionAdministration在使用之前要有如下代码(shark2.0的SharkConnection的connect方法的参数也进行了改动):

privateExecutionAdministration ea =null;

ea = Shark.getInstance().getAdminInterface()

.getExecutionAdministration();

ea.connect(userName, password, SharkAdapter.engineName,null);

这样在使用时不但要对SharkConnection进行登录而且还需要对使用到的管理接口进行登录,  而在Shark2.0中则不需要这么做了,shark2.0去掉了ExecutionAdministration 等管理接口的connect方法,可以在获得管理接口后直接调用管理接口的方法,而在方法中加入了一个用户会话信息的参数:WMSessionHandle.而这个参数可以 通过SharkConnection 的getSessionHandle()获得。代码如下(项目中的代码片断,取得所有加载的包,getSharkLogon().getSConn()返回的是已认证的SharkConnection ):

PackageAdministration pa = Shark.getInstance()

.getPackageAdministration();

packageInfos.clear();

String pkIDs[] = pa.getOpenedPackageIds(getSharkLogon().getSConn()

.getSessionHandle());

5.异常处理:

不知是什么原因Shark2.0的API方法不再抛出某些Shark自定义的异常,目前本人只发现好像BaseException不会再被抛出了,而是直接抛出Exception类的异常,而某些方法还是会抛出Shark自定义的异常,如complete会抛出CannotComplete异常,我们在使用时可能捕获不同的异常进行不同的处理是很方便的如(代码中使用了JSF,shark版本为1.1):

publicString logonActive() {

FacesContext facesContext = FacesContext.getCurrentInstance();

try{

LogonInfo logonInfo =newLogonInfo();

logonInfo.logon(userName, password);

HttpServletRequest request = (HttpServletRequest) facesContext

.getExternalContext().getRequest();

HttpSession session = request.getSession();

session.setAttribute("logonInfo", logonInfo);

return"success";

}catch(BaseException e) {

FacesMessage msg = MessageFactory.getMessage(facesContext,

"error_cannot_login","");

msg.setSeverity(FacesMessage.SEVERITY_ERROR);

facesContext.addMessage(null, msg);

return"error";

}catch(ConnectFailed e) {

FacesMessage msg = MessageFactory.getMessage(facesContext,

"error_userorpassword","");

msg.setSeverity(FacesMessage.SEVERITY_WARN);

facesContext.addMessage(null, msg);

return"failure";

}catch(NotConnected e) {

FacesMessage msg = MessageFactory.getMessage(facesContext,

"error_cannot_login","");

msg.setSeverity(FacesMessage.SEVERITY_ERROR);

facesContext.addMessage(null, msg);

return"error";

}

}

但是shark1.1中的异常类并没有被删除,通过import还可以正常导入使用只是shark API不会再抛出这种异常了。

具体的API用法及Shark1.1同2.0的差别:

本来想在这部分写一些shark的API方法的,可是发现这么做不如只接去看shark API的javadoc(安装shark自带,很全)所以只列出某些用法上有说道的方法

待继...........

java shark_JAVA项目开发笔记(3)Shark部分: Shark API | 学步园相关推荐

  1. MyEclipse搭建java Web项目开发环境

    MyEclipse搭建java Web项目开发环境 首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭 ...

  2. [Openwrt 项目开发笔记]:Samba服务vsFTP服务(四)

    [Openwrt项目开发笔记]系列文章传送门:http://www.cnblogs.com/double-win/p/3888399.html 正文: 在上一节中,我们讲述了如何在路由器上挂载U盘,以 ...

  3. java web开发myeclipse_【java项目实战】一步步教你使用MyEclipse搭建java Web项目开发环境(一)...

    首先,在开始搭建MyEclipse的开发环境之前,还有三步工具的安装需要完成,只要在安装配置成功之后才可以进入下面的java Web项目开发环境的搭建. 1.安装工具 第一步,下载并安装JDK,到官网 ...

  4. 京东投票项目开发笔记

    京东投票项目开发笔记 打开项目 $yarn install / $ npm install: 跑环境(把项目依赖的插件进行安装) $node admin.js: 启服务(把自己的计算机作为服务器,创建 ...

  5. 京东抽奖项目开发笔记

    京东抽奖项目开发笔记 前言: 这是一个独立项目,这个项目会由我们四个人来一起完成,所以首先就要分工合作,我是写前端的,所以我会先把基本的页面写出来 1.注册页 这是注册页的代码 <!DOCTYP ...

  6. Java综合项目----开发团队分配管理软件

    Java综合项目----开发团队分配管理软件 源代码下载地址: 简介 需求说明 系统功能结构 系统流程 用户注册和登录模块 开发人员管理模块 Equipment接口及其实现子类的设计 Employee ...

  7. JAVA EE项目开发及应用实训报告——网上考试系统

    ** JAVA EE项目开发及应用实训 ** 题 目: 网上考试系统 系 别: 专 业: 学生姓名: 学 号: 指导教师: 题目类型:•理论研究 •实验研究 •工程设计 •工程技术研究 软件开发 • ...

  8. 尚硅谷前端项目开发笔记

    尚硅谷前端项目开发笔记 B站视频直达,这个项目亮点在于所有 API 请求都并非在组件内编写,而是在组件内使用this.$store.dispatch() 派发任务,再由 Vuex(actions.mu ...

  9. Java后台项目开发规范

    Java后台项目开发规范 写在前边 1.目标 2. 原则 一.命名规范 1.包命名规范 2.类命名规范[**UpperCamelCase命名法**] 2.1==如果在模块或者接口,类,方法中使用了设计 ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task13. 罗马数字转整数
  2. 第十课.蒙特卡洛方法与随机过程
  3. 支付宝不止怀有“社交梦”,社区金融才是它的野心所在
  4. [微信开发] 微信网页授权Java实现(https://www.cnblogs.com/lovebread/p/5513241.html)
  5. dotnet 是 前30个增长最快速度的开源项目中排名第一的开发平台
  6. LeetCode每日打卡 - 反转每对括号间的子串
  7. 机器学习入门阶段程序员易犯的5个错误
  8. 编程思想:面向对象和面向过程
  9. where、having、group by、order by、count的使用注意
  10. mac 启动php70 fpm,mac 启动php-fpm
  11. 江西师范大学2017年C语言考试,2018年江西师范大学程序设计(C语言)考研初试大纲...
  12. postman压测_只会postman单接口测试?快看看这里
  13. codeforces hack
  14. IDEA 2019.3新建项目找不到Maven的解决方法
  15. 汉诺塔 --- 递归的经典运用
  16. SSM框架-小区物业管理系统(附源码)
  17. Less变量动态修改
  18. Js模拟重力场【Js动效】
  19. 2018年带三维团队的一点总结
  20. 软件测试分类(按测试阶段划分)

热门文章

  1. Intel 64/x86_64/IA-32/x86处理器 - 通用指令(1) - 数据传输指令
  2. linux打开python3_Python3 执行Linux Bash命令的方法
  3. js 时间加减_【JS】550 简单几步让你的 JS 写得更漂亮
  4. jupyter notebook 某个cell 一直在运行
  5. ue4 服务器登陆流程
  6. 改进粒子系统-GPU实现
  7. Java多线程学习(八)线程池与Executor 框架
  8. 《国境的南边》观后感
  9. ext4 关闭延迟分配
  10. Java应用程序的基本框架