org.apache.xml.dtm.ref
Class DTMManagerDefault
public class DTMManagerDefault
The default implementation for the DTMManager.
%REVIEW% There is currently a reentrancy issue, since the finalizer
for XRTreeFrag (which runs in the GC thread) wants to call
DTMManager.release(), and may do so at the same time that the main
transformation thread is accessing the manager. Our current solution is
to make most of the manager's methods synchronized
.
Early tests suggest that doing so is not causing a significant
performance hit in Xalan. However, it should be noted that there
is a possible alternative solution: rewrite release() so it merely
posts a request for release onto a threadsafe queue, and explicitly
process that queue on an infrequent basis during main-thread
activity (eg, when getDTM() is invoked). The downside of that solution
would be a greater delay before the DTM's storage is actually released
for reuse.
void | addDTM(DTM dtm, int id) - Add a DTM to the DTM table.
|
void | addDTM(DTM dtm, int id, int offset) - Add a DTM to the DTM table.
|
DTMIterator | createDTMIterator(Object xpathCompiler, int pos) - NEEDSDOC Method createDTMIterator
NEEDSDOC @param xpathCompiler
NEEDSDOC @param pos
NEEDSDOC (createDTMIterator) @return
|
DTMIterator | createDTMIterator(String xpathString, PrefixResolver presolver) - NEEDSDOC Method createDTMIterator
NEEDSDOC @param xpathString
NEEDSDOC @param presolver
NEEDSDOC (createDTMIterator) @return
|
DTMIterator | createDTMIterator(int node) - NEEDSDOC Method createDTMIterator
NEEDSDOC @param node
NEEDSDOC (createDTMIterator) @return
|
DTMIterator | createDTMIterator(int whatToShow, DTMFilter filter, boolean entityReferenceExpansion) - NEEDSDOC Method createDTMIterator
NEEDSDOC @param whatToShow
NEEDSDOC @param filter
NEEDSDOC @param entityReferenceExpansion
NEEDSDOC (createDTMIterator) @return
|
DTM | createDocumentFragment() - Method createDocumentFragment
NEEDSDOC (createDocumentFragment) @return
|
DTM | getDTM(Source source, boolean unique, DTMWSFilter whiteSpaceFilter, boolean incremental, boolean doIndexing) - Get an instance of a DTM, loaded with the content from the
specified source.
|
DTM | getDTM(int nodeHandle) - Return the DTM object containing a representation of this node.
|
int | getDTMHandleFromNode(Node node) - Given a W3C DOM node, try and return a DTM handle.
|
int | getDTMIdentity(DTM dtm) - Given a DTM, find the ID number in the DTM tables which addresses
the start of the document.
|
ExpandedNameTable | getExpandedNameTable(DTM dtm) - return the expanded name table.
|
int | getFirstFreeDTMID() - Get the first free DTM ID available.
|
XMLReader | getXMLReader(Source inputSource) - This method returns the SAX2 parser to use with the InputSource
obtained from this URI.
|
boolean | release(DTM dtm, boolean shouldHardDelete) - Release the DTMManager's reference(s) to a DTM, making it unmanaged.
|
void | releaseXMLReader(XMLReader reader) - Indicates that the XMLReader object is no longer in use for the transform.
|
createDTMIterator , createDTMIterator , createDTMIterator , createDTMIterator , createDocumentFragment , getDTM , getDTM , getDTMHandleFromNode , getDTMIdentity , getDTMIdentityMask , getIncremental , getNodeIdentityMask , getSource_location , getXMLStringFactory , newInstance , release , setIncremental , setSource_location , setXMLStringFactory |
DTMManagerDefault
public DTMManagerDefault()
Constructor DTMManagerDefault
addDTM
public void addDTM(DTM dtm,
int id)
Add a DTM to the DTM table. This convenience call adds it as the
"base DTM ID", with offset 0. The other version of addDTM should
be used if you want to add "extended" DTM IDs with nonzero offsets.
dtm
- Should be a valid reference to a DTM.id
- Integer DTM ID to be bound to this DTM
addDTM
public void addDTM(DTM dtm,
int id,
int offset)
Add a DTM to the DTM table.
dtm
- Should be a valid reference to a DTM.id
- Integer DTM ID to be bound to this DTM.offset
- Integer addressing offset. The internal DTM Node ID is
obtained by adding this offset to the node-number field of the
public DTM Handle. For the first DTM ID accessing each DTM, this is 0;
for overflow addressing it will be a multiple of 1<<IDENT_DTM_NODE_BITS.
createDTMIterator
public DTMIterator createDTMIterator(Object xpathCompiler,
int pos)
NEEDSDOC Method createDTMIterator
NEEDSDOC @param xpathCompiler
NEEDSDOC @param pos
NEEDSDOC (createDTMIterator) @return
- createDTMIterator in interface DTMManager
createDTMIterator
public DTMIterator createDTMIterator(String xpathString,
PrefixResolver presolver)
NEEDSDOC Method createDTMIterator
NEEDSDOC @param xpathString
NEEDSDOC @param presolver
NEEDSDOC (createDTMIterator) @return
- createDTMIterator in interface DTMManager
createDTMIterator
public DTMIterator createDTMIterator(int node)
NEEDSDOC Method createDTMIterator
NEEDSDOC @param node
NEEDSDOC (createDTMIterator) @return
- createDTMIterator in interface DTMManager
createDTMIterator
public DTMIterator createDTMIterator(int whatToShow,
DTMFilter filter,
boolean entityReferenceExpansion)
NEEDSDOC Method createDTMIterator
NEEDSDOC @param whatToShow
NEEDSDOC @param filter
NEEDSDOC @param entityReferenceExpansion
NEEDSDOC (createDTMIterator) @return
- createDTMIterator in interface DTMManager
createDocumentFragment
public DTM createDocumentFragment()
Method createDocumentFragment
NEEDSDOC (createDocumentFragment) @return
- createDocumentFragment in interface DTMManager
getDTM
public DTM getDTM(Source source,
boolean unique,
DTMWSFilter whiteSpaceFilter,
boolean incremental,
boolean doIndexing)
Get an instance of a DTM, loaded with the content from the
specified source. If the unique flag is true, a new instance will
always be returned. Otherwise it is up to the DTMManager to return a
new instance or an instance that it already created and may be being used
by someone else.
A bit of magic in this implementation: If the source is null, unique is true,
and incremental and doIndexing are both false, we return an instance of
SAX2RTFDTM, which see.
(I think more parameters will need to be added for error handling, and entity
resolution, and more explicit control of the RTF situation).
source
- the specification of the source object.unique
- true if the returned DTM must be unique, probably because it
is going to be mutated.whiteSpaceFilter
- Enables filtering of whitespace nodes, and may
be null.incremental
- true if the DTM should be built incrementally, if
possible.doIndexing
- true if the caller considers it worth it to use
indexing schemes.
- a non-null DTM reference.
getDTM
public DTM getDTM(int nodeHandle)
Return the DTM object containing a representation of this node.
- getDTM in interface DTMManager
nodeHandle
- DTM Handle indicating which node to retrieve
- a reference to the DTM object containing this node.
getDTMHandleFromNode
public int getDTMHandleFromNode(Node node)
Given a W3C DOM node, try and return a DTM handle.
Note: calling this may be non-optimal, and there is no guarantee that
the node will be found in any particular DTM.
node
- Non-null reference to a DOM node.
getDTMIdentity
public int getDTMIdentity(DTM dtm)
Given a DTM, find the ID number in the DTM tables which addresses
the start of the document. If overflow addressing is in use, other
DTM IDs may also be assigned to this DTM.
- getDTMIdentity in interface DTMManager
dtm
- The DTM which (hopefully) contains this node.
- The DTM ID (as the high bits of a NodeHandle, not as our
internal index), or -1 if the DTM doesn't belong to this manager.
getExpandedNameTable
public ExpandedNameTable getExpandedNameTable(DTM dtm)
return the expanded name table.
NEEDSDOC @param dtm
NEEDSDOC ($objectName$) @return
getFirstFreeDTMID
public int getFirstFreeDTMID()
Get the first free DTM ID available. %OPT% Linear search is inefficient!
getXMLReader
public XMLReader getXMLReader(Source inputSource)
This method returns the SAX2 parser to use with the InputSource
obtained from this URI.
It may return null if any SAX2-conformant XML parser can be used,
or if getInputSource() will also return null. The parser must
be free for use (i.e., not currently in use for another parse().
After use of the parser is completed, the releaseXMLReader(XMLReader)
must be called.
inputSource
- The value returned from the URIResolver.
- a SAX2 XMLReader to use to resolve the inputSource argument.
release
public boolean release(DTM dtm,
boolean shouldHardDelete)
Release the DTMManager's reference(s) to a DTM, making it unmanaged.
This is typically done as part of returning the DTM to the heap after
we're done with it.
- release in interface DTMManager
dtm
- the DTM to be released.shouldHardDelete
- If false, this call is a suggestion rather than an
order, and we may not actually release the DTM. This is intended to
support intelligent caching of documents... which is not implemented
in this version of the DTM manager.
- true if the DTM was released, false if shouldHardDelete was set
and we decided not to.
releaseXMLReader
public void releaseXMLReader(XMLReader reader)
Indicates that the XMLReader object is no longer in use for the transform.
Note that the getXMLReader method may return an XMLReader that was
specified on the SAXSource object by the application code. Such a
reader should still be passed to releaseXMLReader, but the reader manager
will only re-use XMLReaders that it created.
reader
- The XMLReader to be released.
Copyright © 2006 Apache XML Project. All Rights Reserved.