问题是,你需要用CMIS写一个类型管理器。我们有以下架构:https://i.stack.imgur.com/cAFv4.gif
对于足以获得会话的连接。
private Session getSession() {
SessionFactory sessionFactory = SessionFactoryImpl.newInstance();
Map<String, String> parameter = new HashMap<String, String>();
parameter.put(SessionParameter.USER, "");
parameter.put(SessionParameter.PASSWORD, "");
parameter.put(SessionParameter.ATOMPUB_URL, this.atomUrl);
parameter.put(SessionParameter.BINDING_TYPE, BindingType.ATOMPUB.value());
parameter.put(SessionParameter.REPOSITORY_ID, getIDKey());
Repository repository = sessionFactory.getRepositories(parameter).get(0);
return sessionFactory.createSession(parameter);
}
然后,例如,您可以获取所有文件夹的列表:
public List<String> getAllFolder() {
List<String> folders = new ArrayList<String>();
if (session != null) {
Folder root = session.getRootFolder();
ItemIterable<CmisObject> children = root.getChildren();
for (CmisObject child : children) {
folders.add(child.getName());
}
}
return folders;
}
在哪里与CMIS建立联系?最好能够访问任何会话 Bean 的会话,就像在持久性上下文中一样。
这取决于安全性、状态和生命周期。
CMIS 会话是一个有状态的东西。它知道安全性(凭据),我想大多数实现(至少是化学)通常会缓存。如果必须将安全性传播到 CMIS(您代表其调用),则可以创建一个 CMIS 会话并将其绑定到一个有状态会话 Bean。也许可以以某种方式注入,但我想ejbCreate(无论它现在叫什么)都可以做到。
如果安全性(传播)无关紧要,并且如果所有 CMIS 请求都代表一个用户(例如管理员)执行,对您的应用程序来说没问题,我会构建一个处理会话创建的 cmis 会话池,并让您的 ejb 请求该池作为实例。AlfrescoWCM快速入门有一个示例实现。
无论哪种方式:要清楚,与JPA相比,CMIS根本不会参与(容器管理的)事务。因此,根据会话 bean 中发生的情况,使用 EJB 可能根本没有意义。