EMC-- DFC --Sessions and Session Managers
来源:互联网 发布:palantir 知乎 编辑:程序博客网 时间:2024/05/17 06:00
DFC - Documentum Foundation Classes
位于Content server和client 之间。 用来做服务端业务逻辑和客制。
BOF- Business Object Framework.
模组。 最重要的两个模组是
1. TBOs --type based objects
2. SBOs-- service based objects
3. Aspect -- similar to TBOs. enable you to attach properties and behavior on an instance-by-instace basic.
DFC的运行点
1. 运行content server的机器。 as call from a mthod.
2. 中间层系统。 as an application server
DFC除了DfClientC和 异常类及其子类(DfException),大部分类都是通过工厂方法 实例化。
如何得到一个session
1. 通过 IDfClient.newSessionMangager的方式创建一个IDfSessionManger
2. 从session manager中得到一个session. IDfSessionManger.newSession
3. session使用完成之后需要释放
4. IDfSessionManger.getSession 得到的是公用的session
clientx.getLocalClient() 这个方法会去找dfc的配置文件
IDfSessionManager.ALL_DOCBASES . 对于所有的docbases, 设置单一的身份
如果session manager有多重身份, 可以懒加载。 但是需要确认是否以及有此身份,如果有需先清空之前的身份信息,才能setIdentity否则会报错误。
package com.dev.guide.ch2;import com.documentum.com.DfClientX;import com.documentum.com.IDfClientX;import com.documentum.fc.client.DfServiceException;import com.documentum.fc.client.IDfClient;import com.documentum.fc.client.IDfSessionManager;import com.documentum.fc.common.DfException;import com.documentum.fc.common.IDfLoginInfo;public class TestSession {private IDfSessionManager sessionManager;IDfClientX clientx;public IDfSessionManager getSessionManager() {sessionManager = null;try {clientx = new DfClientX();IDfClient client = clientx.getLocalClient();sessionManager = client.newSessionManager();} catch (DfException e) {e.printStackTrace();}return sessionManager;}public IDfSessionManager getSessionManager(String userName, String password) {sessionManager = null;try {clientx = new DfClientX();IDfClient client = clientx.getLocalClient();sessionManager = client.newSessionManager();IDfLoginInfo loginInfo = clientx.getLoginInfo();loginInfo.setUser(userName);loginInfo.setPassword(password);sessionManager.setIdentity(IDfSessionManager.ALL_DOCBASES, loginInfo);} catch (DfException e) {e.printStackTrace();}return sessionManager;}public void addIdentity(String repository, String userName, String password) {try {IDfLoginInfo loginInfo = clientx.getLoginInfo();loginInfo.setUser(userName);loginInfo.setPassword(password);if (sessionManager.hasIdentity(repository)) {sessionManager.clearIdentity(repository);}sessionManager.setIdentity(repository, loginInfo);} catch (DfServiceException e) {e.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubTestSession testSession = new TestSession();testSession.getSessionManager("dm_bof_registry", "dctmecmq");testSession.addIdentity("ecmq", "dm_bof_registry", "dctmecmq");}}
setIdentity不会验证登录信息的正确与否, 而是到getSession或是newSession的时候验证。但是你可以调用IDfSessionManger.authenticate的方法来验证。
getSession -- 得到共享session
newSession --得到私有的session
session需及时释放,尽量不要保存使用。 释放时放在 finally的程序段里。
一些遗留的程序直接从IDfClient获取sessions, 在这种状况下,使用IDfSession.disconnet的方式释放。
当引用一个存在的session , 像session作为type object的数据成员的时候, 不能够释放session.
比如通过这种方式获取的: IDfTypedObject.getSession
同一个session不能被释放两次 ,否则会抛出异常。
session释放之后也不能再使用了。
根据现有的session,得到另外一个repository有两种方式
1. 通过session得到sessionmanger, 使用sessionmanager传入repository, 获取session. 两个session都需要释放。
2. 使用relateSession的方式。session.getRelatedSession. 这种session不需要显示释放。
早期DFC使用 setDocbaseScope方式创建子连接的方式不再推荐使用。
original 和object sessions
一般来说, 两者是一样的
事务
分为 session manager level 和 session level
IDfSessionManagerConfig
IDfSessionManager.getConfig的方式获得。
可以设置本地话, 时区,动态组,和应用程式代码设置。
使用登录门票获取session
login ticket可以使用IDfSession里的方法获取
1. 第一个使用是已经有了认证session, 需要链接进入WDK-based的程序。 使用URL方式传入, 就不需要再登录了。
2. 第二个使用是授予其他人权限。一般用在流程方法等。
获得login tickets的方法
1. getLoginTicket -- 不需要获得ticket的session是super user
2. getLoginTicketEx -- 获得ticket的session是super user,
3. getLoginTicketForUser -- 获得ticket的session是属于superuser. 当前登录的人是superuser
principal authentication support
Maintaining state in a session manager
可以使session manager维持一个repository object的状态。 通过调用IDfTypedObject的 setSessionManager.
这个方法把对象的状态从session复制到session manager, 这样的话,session 断开也不会导致对象无效。
注意:谨慎使用setSessionManager,这是一个花销很大的方法。
但是,使用setSessionManager比使用 begin/end client control 的机制防止session从session manager断开要好。
- EMC-- DFC --Sessions and Session Managers
- DFC Session Management 白皮书
- URL重写Using Sessions and Session Persistence in Web Applications
- Using Sessions and Session Persistence in Web Applications
- Location managers, providers, and listeners
- Awards and Certifications @EMC
- Processes, sessions and open_cursors
- Sessions and security
- Connections and Sessions【1008】
- Sessions and transactions
- Connections and Sessions
- Sessions and Process Groups
- Tensorflow Graphs and Sessions
- How to set trace for others sessions, for your own session and at instance level
- 分布式session会话Sticky Sessions
- [puzzle toad 1]managers and enginners
- Sessions, Desktops and Windows Stations
- Locked Sessions and Locked Objects
- 嘴里啧啧有声
- sqlite3自增key设定(创建自增字段)
- 判断字符串string是数字、json结构、xml结构
- jqGrid 各种参数 详解
- 一些SQLite技巧
- EMC-- DFC --Sessions and Session Managers
- C++ 面试
- SQLite的SQL语法
- 简单的Linq查询
- 用c语言动态操作sqilite3数据库
- VS2005操作excel所需的类及文件
- 黑马程序员之ADO.NET篇---1.登录界面
- 关于dojo在页面结束时会做的事
- 关于音频采样率以及比特率的问题