我需要为项目使用面向对象的数据存储库.
它将成为维基和CMS之间的东西.
我还不是坚持领域的专家.
我想Hibernate和Jackrabbit是要去的框架,对吧?
至于我正确地告知,兔崽子不不支持
注释或其他方便的技术映射
对象实例和数据存储之间.
另一方面,Hibernate 不支持
开箱即用的版本控制
.
你建议我用什么?
我可以在某种程度上结合这两个框架吗?
如果可能的话,你能否总结一下这两个框架的优缺点?
谢谢!
编辑
我真的想要使用一些不需要我处理将对象映射到表格和背面的东西.我为什么要?我们住在哪个世纪?;)
我对JAXB有很好的经验(将对象映射到XML并以面向对象的方式返回),但JAXB在数据库中没有用处.
我正在使用以下JCR-SQL2查询从jackrabbit存储库中检索一些文件
SELECT id FROM [nt:file]
WHERE ISDESCENDANTNODE([/repo/cms])
Run Code Online (Sandbox Code Playgroud)
如何在jackrabbit中使用分页来仅检索限制数量的文件.
我指的是MS-SQL中的COUNT或MySQL中的LIMIT
我正在使用Apache Jackrabbit作为数据库。
In my case, root node has numbers of child nodes(only at depth 1).
All child node has unique name, i.e., some Integer.
Each child Node have some properties that I have used further.
Run Code Online (Sandbox Code Playgroud)
我的任务
我必须采取其键(整数值)最小的前10个节点。
我的想法
为了实现上述目标,我进行了一个查询,以对所有子节点的键进行排序,并选择前10位。然后使用该键,获得所有对应的节点,并在工作后删除所有这些键/值对。
为此,我在互联网上搜索了很多运行查询的方法。您能告诉我如何在apache jackrabit上运行查询吗?如果您通过示例进行说明,那就很好。
编辑编号 1个
公共课程JackRabbit {
public static void main(String[] args) throws Exception {
try {
Repository repository = JcrUtils.getRepository("http://localhost:4502/crx/server");
javax.jcr.Session session = repository.login(new SimpleCredentials("admin", "admin".toCharArray()));
Node root = session.getRootNode();
// Obtain the query manager for the session via the workspace …Run Code Online (Sandbox Code Playgroud) 我们有一个REST层和后端作为Jackrabbit实现.我们使用TransientRepository和默认设置.当两个请求(仅用于读取节点)同时被触发时,我们面临以下错误:
:RepositoryLock.acquire(134)::检测到现有锁文件{tomcat}/.lock.存储库未正确关闭.javax.jcr.RepositoryException:存储库home {tomcat}似乎正在使用中,因为名为.lock的文件已被当前进程锁定.
jackrabbit wiki页面:http://wiki.apache.org/jackrabbit/RepositoryLock 提到,当存储库已在同一进程中打开但在另一个类加载器中(例如,在另一个Web应用程序中)时,会发生这种情况.在这种情况下,您需要确保在Web应用程序停止时关闭存储库.
我们使用下面的代码来获取存储库和创建会话:
try {
Repository repository = new TransientRepository(REPO_CONFIG_FILE, REPO_HOME_DIR);
session = repository.login(new SimpleCredentials(REPOSITORY_USERNAME, REPOSITORY_PASSWORD.toCharArray()));
} finally {
if(session != null){
session.logout();
}
}
Run Code Online (Sandbox Code Playgroud)
以上代码适用于Jackrabbit的每个操作,因此会话在每次操作后关闭.并且只有一个Web应用程序可以访问Jackrabbit存储库.
RepositoryLock页面上给出的解决方案建议使用Repository Server.这是唯一的解决方案,还是我在配置或编码时遗漏了什么?
我正在尝试使用TarMK Cold Standby配置AEM.我已按照以下网址进行配置
https://docs.adobe.com/docs/en/aem/6-0/deploy/recommended-deploys/tarmk-cold-standby.html http://cq-ops.tumblr.com/post/102621710969/how -to-配置-AN-AEM-6-冷备用的故障转移
但我得到java.lang.IllegalStateException:
java.lang.IllegalStateException:Attempt to read external blob with blobId
[c184d2a3f1dbc709004a45ae6c5df7624c2ae653#32768] without specifying BlobStore
at org.apache.jackrabbit.oak.plugins.segment.SegmentBlob.getReference(SegmentBlob.java:118)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeBlob(SegmentWriter.java:706)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeProperty(SegmentWriter.java:808)
at org.apache.jackrabbit.oak.plugins.segment.SegmentWriter.writeProperty(SegmentWriter.java:796)
Run Code Online (Sandbox Code Playgroud) 目前处于使用Apache Jackrabbit与Oracle DB进行评估的早期阶段.测试repository.xml配置的初始设置时,收到此错误:
15:18:32.281 [main] ERROR o.a.j.c.p.p.BundleDbPersistenceManager - FATAL error while writing the bundle: deadbeef-cafe-babe-cafe-babecafebabe
java.sql.SQLException: ORA-00001: unique constraint (REPO_BUNDLE_IDX) violated
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:113) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:331) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:288) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.T4C8Oall.receive(T4C8Oall.java:754) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:219) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:972) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1192) ~[ojdbc14-10.2.0.4.jar:Oracle JDBC Driver version - "10.2.0.5.0"]
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3415) ~[ojdbc14-10.2.0.4.jar:Oracle …Run Code Online (Sandbox Code Playgroud) 我尝试更新 JCR 2.0 中的节点
InputStream content = node.getProperty("jcr:content").getProperty("jcr:data").getBinary().getStream();
//TODO same with stream
Binary value = ...;
Node contentNode = node.getProperty("jcr:content");
contentNode.setProperty("jcr:content", value);
Run Code Online (Sandbox Code Playgroud)
我收到异常“javax.jcr.nodetype.ConstraintViolationException:项目受保护”。怎么了?
我需要查询jcr存储库以查找日期属性(例如jcr:created)比特定日期更年轻的节点.
使用SQL2,我像这样检查"jcr:created> date"(工作正常):
SELECT * FROM [nt:base] AS s WHERE s.[jcr:created] > CAST('2012-01-05T00:00:00.000Z' AS DATE)
现在棘手的部分:
还有一个额外的属性声明需要动态添加到jcr:created日期的天数.
假设该属性包含5(天),那么查询不应该检查"jcr:created> date"而是"(jcr:created + 5)> date".包含属性值10的下一个节点应通过"(jcr:created + 10)> date"进行检查.
是否有任何智能/动态操作数可以做到这一点?由于属性是特定于节点的,因此我无法将其静态添加到查询中,但必须读取每个节点的属性.