[
https://issues.apache.org/jira/browse/JCR-1096?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Raffaele Sena updated JCR-1096:
-------------------------------
Description:
I have an application that uses custom node types and I am having problems in a
clustered configuration.
Issue 1: the following definition in a nodetype is incorrectly read from the
journal:
+ * (nt:hierarchyNode) version
The * is stored in the journal as _x002a_ since it should be a QName and it
gets escaped.
When read, the code
...core.nodetype.compact.CompactNodeTypeDefReader.doChildNodeDefinition does
the following test:
if (currentTokenEquals('*')) {
ndi.setName(ItemDef.ANY_NAME);
} else {
ndi.setName(toQName(currentToken));
}
Since currentToken is _x002a_ and not * toQName(currentToken) is called but it
fails.
I changed the test to:
if (currentTokenEquals('*') || currentTokenEquals("_x002a_"))
....
and that fixes the problem.
Issue 2: when storing a nodeType in the journal the superclass nt:base is not
store, but when reading I get an error saying the node should be a subclass of
nt:base.
The code in...core.nodetype.compact.CompactNodeTypeDefWriter.writeSupertypes
skips nt:base when writing the node.
When reading the nodetype definition from the journal the following exception
is thrown:
Unable to deliver node type operation:
[{http://namespace/app/repository/1.0}resource] all primary node types except
nt:base itself must be (directly or indirectly) derived from nt:base
probably because nt:base is not re-added to the nodetype definition
was:
I have an application that uses custom node types and I am having problems in a
clustered configuration.
Issue 1: the following definition in a nodetype is incorrectly read from the
journal:
+ * (nt:hierarchyNode) version
The * is stored in the journal as _x002a_ since it should be a QName and it
gets escaped.
When read, the code
...core.nodetype.compact.CompactNodeTypeDefReader.doChildNodeDefinition does
the following test:
if (currentTokenEquals('*')) {
ndi.setName(ItemDef.ANY_NAME);
} else {
ndi.setName(toQName(currentToken));
}
Since currentToken is _x002a_ and not * toQName(currentToken) is called but it
fails.
I changed the test to:
if (currentTokenEquals('*') || currentTokenEquals("_x002a_"))
....
and that fixes the problem.
Issue 2: when storing a nodeType in the journal the superclass nt:base is not
store, but when reading I get an error saying the node should be a subclass of
nt:base.
The code in...core.nodetype.compact.CompactNodeTypeDefWriter.writeSupertypes
skips nt:base when writing the node.
When reading the nodetype definition from the journal the following exception
is thrown:
Unable to deliver node type operation:
[{http://www.adobe.com/acorn/repository/1.0}resource] all primary node types
except nt:base itself must be (directly or indirectly) derived from nt:base
probably because nt:base is not re-added to the nodetype definition
I commented out the test for nt:base in writeSupertypes and now starting a new
machine in the cluster from the journal works fine.
Since CompactNodeTypeDefWriter is only used in the journal this shouldn't
generate any regression.
> Problems with custom nodes in journal
> -------------------------------------
>
> Key: JCR-1096
> URL: https://issues.apache.org/jira/browse/JCR-1096
> Project: Jackrabbit
> Issue Type: Bug
> Components: clustering
> Affects Versions: 1.3.1
> Reporter: Raffaele Sena
>
> I have an application that uses custom node types and I am having problems in
> a clustered configuration.
> Issue 1: the following definition in a nodetype is incorrectly read from the
> journal:
> + * (nt:hierarchyNode) version
> The * is stored in the journal as _x002a_ since it should be a QName and it
> gets escaped.
> When read, the code
> ...core.nodetype.compact.CompactNodeTypeDefReader.doChildNodeDefinition does
> the following test:
> if (currentTokenEquals('*')) {
> ndi.setName(ItemDef.ANY_NAME);
> } else {
> ndi.setName(toQName(currentToken));
> }
> Since currentToken is _x002a_ and not * toQName(currentToken) is called but
> it fails.
> I changed the test to:
> if (currentTokenEquals('*') || currentTokenEquals("_x002a_"))
> ....
> and that fixes the problem.
> Issue 2: when storing a nodeType in the journal the superclass nt:base is not
> store, but when reading I get an error saying the node should be a subclass
> of nt:base.
> The code in...core.nodetype.compact.CompactNodeTypeDefWriter.writeSupertypes
> skips nt:base when writing the node.
> When reading the nodetype definition from the journal the following exception
> is thrown:
> Unable to deliver node type operation:
> [{http://namespace/app/repository/1.0}resource] all primary node types except
> nt:base itself must be (directly or indirectly) derived from nt:base
> probably because nt:base is not re-added to the nodetype definition
>
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.