Skip to content

Commit da53b9a

Browse files
committed
[refactor] Replace DBSource with DbUriSource
1 parent 13bd6c3 commit da53b9a

18 files changed

Lines changed: 477 additions & 348 deletions

File tree

exist-core/pom.xml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1015,13 +1015,15 @@
10151015
<include>src/test/java/org/exist/security/internal/BackupRestoreSecurityPrincipalsTest.java</include>
10161016
<include>src/main/java/org/exist/security/internal/RealmImpl.java</include>
10171017
<include>src/main/java/org/exist/security/internal/SecurityManagerImpl.java</include>
1018+
<include>src/main/java/org/exist/security/internal/SMEvents.java</include>
10181019
<include>src/main/java/org/exist/security/internal/aider/UnixStylePermissionAider.java</include>
10191020
<include>src/main/java/org/exist/security/management/AccountsManagement.java</include>
10201021
<include>src/main/java/org/exist/security/management/GroupsManagement.java</include>
10211022
<include>src/main/java/org/exist/source/AbstractSource.java</include>
10221023
<include>src/main/java/org/exist/source/DBSource.java</include>
10231024
<include>src/main/java/org/exist/source/Source.java</include>
10241025
<include>src/main/java/org/exist/source/SourceFactory.java</include>
1026+
<include>src/test/java/org/exist/source/SourceFactoryTest.java</include>
10251027
<include>src/main/java/org/exist/source/URLSource.java</include>
10261028
<include>src/test/java/org/exist/stax/EmbeddedXMLStreamReaderTest.java</include>
10271029
<include>src/test/java/org/exist/storage/AbstractUpdateTest.java</include>
@@ -1844,6 +1846,7 @@
18441846
<exclude>src/test/java/org/exist/security/internal/BackupRestoreSecurityPrincipalsTest.java</exclude>
18451847
<exclude>src/main/java/org/exist/security/internal/RealmImpl.java</exclude>
18461848
<exclude>src/main/java/org/exist/security/internal/SecurityManagerImpl.java</exclude>
1849+
<exclude>src/main/java/org/exist/security/internal/SMEvents.java</exclude>
18471850
<exclude>src/main/java/org/exist/security/internal/aider/ImmutableUnixStylePermissionAider.java</exclude>
18481851
<exclude>src/main/java/org/exist/security/internal/aider/UnixStylePermissionAider.java</exclude>
18491852
<exclude>src/main/java/org/exist/security/management/AccountsManagement.java</exclude>
@@ -1854,6 +1857,7 @@
18541857
<exclude>src/main/java/org/exist/source/DbUriSource.java</exclude>
18551858
<exclude>src/main/java/org/exist/source/Source.java</exclude>
18561859
<exclude>src/main/java/org/exist/source/SourceFactory.java</exclude>
1860+
<exclude>src/test/java/org/exist/source/SourceFactoryTest.java</exclude>
18571861
<exclude>src/main/java/org/exist/source/URLSource.java</exclude>
18581862
<exclude>src/test/java/org/exist/stax/EmbeddedXMLStreamReaderTest.java</exclude>
18591863
<exclude>src/test/java/org/exist/storage/AbstractRecoverTest.java</exclude>

exist-core/src/main/java/org/exist/collections/triggers/XQueryTrigger.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
import org.exist.dom.persistent.DocumentImpl;
6262
import org.exist.dom.QName;
6363
import org.exist.security.PermissionDeniedException;
64-
import org.exist.source.DBSource;
64+
import org.exist.source.DbStoreSource;
6565
import org.exist.source.Source;
6666
import org.exist.source.SourceFactory;
6767
import org.exist.source.StringSource;
@@ -364,8 +364,8 @@ private CompiledXQuery getScript(final DBBroker broker, final Txn transaction) t
364364
context.prepareForReuse();
365365
}
366366

367-
if (query instanceof DBSource) {
368-
context.setModuleLoadPath(XmldbURI.EMBEDDED_SERVER_URI_PREFIX + ((DBSource)query).getDocumentPath().removeLastSegment().toString());
367+
if (query instanceof DbStoreSource) {
368+
context.setModuleLoadPath(XmldbURI.EMBEDDED_SERVER_URI_PREFIX + ((DbStoreSource) query).getDocumentPath().removeLastSegment().toString());
369369
}
370370

371371
//compile the XQuery

exist-core/src/main/java/org/exist/http/AuditTrailSessionListener.java

Lines changed: 19 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -48,15 +48,13 @@
4848
import com.evolvedbinary.j8fu.function.ConsumerE;
4949
import org.apache.logging.log4j.LogManager;
5050
import org.apache.logging.log4j.Logger;
51-
import org.exist.dom.persistent.BinaryDocument;
52-
import org.exist.dom.persistent.LockedDocument;
51+
import org.exist.EXistException;
52+
import org.exist.security.PermissionDeniedException;
5353
import org.exist.security.Subject;
54-
import org.exist.source.DBSource;
54+
import org.exist.source.DbUriSource;
5555
import org.exist.source.Source;
5656
import org.exist.storage.BrokerPool;
5757
import org.exist.storage.DBBroker;
58-
import org.exist.storage.XQueryPool;
59-
import org.exist.storage.lock.Lock.LockMode;
6058
import org.exist.xmldb.XmldbURI;
6159
import org.exist.xquery.XPathException;
6260
import org.exist.xquery.XQueryContext;
@@ -67,7 +65,7 @@
6765
import javax.servlet.http.HttpSessionEvent;
6866
import javax.servlet.http.HttpSessionListener;
6967

70-
import javax.annotation.Nullable;
68+
import java.io.IOException;
7169
import java.util.Optional;
7270
import java.util.Properties;
7371

@@ -116,50 +114,29 @@ private void executeXQuery(String xqueryResourcePath) {
116114
if (xqueryResourcePath != null && xqueryResourcePath.length() > 0) {
117115
xqueryResourcePath = xqueryResourcePath.trim();
118116

119-
@Nullable Source source;
120-
121117
try {
122118
final BrokerPool pool = BrokerPool.getInstance();
123-
final XQueryPool xqpool = pool.getXQueryPool();
124-
125119
final Subject sysSubject = pool.getSecurityManager().getSystemSubject();
126120

127-
try (final DBBroker broker = pool.get(Optional.of(sysSubject))) {
128-
if (broker == null) {
129-
LOG.error("Unable to retrieve DBBroker for {}", sysSubject.getName());
130-
return;
131-
}
132-
133-
final XmldbURI pathUri = XmldbURI.create(xqueryResourcePath);
121+
final XmldbURI pathUri = XmldbURI.create(xqueryResourcePath);
122+
final Source source = DbUriSource.from(pool, sysSubject, pathUri, true, false);
123+
124+
final ConsumerE<XQueryContext, XPathException> setupXqueryContextPreCompilation = xqueryContext -> {
125+
xqueryContext.setStaticallyKnownDocuments(new XmldbURI[]{pathUri});
126+
xqueryContext.setBaseURI(new AnyURIValue(pathUri.toString()));
127+
};
134128

135-
try (final LockedDocument lockedResource = broker.getXMLResource(pathUri, LockMode.READ_LOCK)) {
129+
final Properties outputProperties = new Properties();
130+
try (final DBBroker broker = pool.get(Optional.of(sysSubject));
131+
final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, null, null)) {
136132

137-
if (lockedResource != null) {
138-
if (LOG.isTraceEnabled()) {
139-
LOG.trace("Resource [{}] exists.", xqueryResourcePath);
140-
}
141-
source = new DBSource(pool, (BinaryDocument) lockedResource.getDocument(), true);
142-
} else {
143-
LOG.error("Resource [{}] does not exist.", xqueryResourcePath);
144-
return;
145-
}
146-
147-
final ConsumerE<XQueryContext, XPathException> setupXqueryContextPreCompilation = xqueryContext -> {
148-
xqueryContext.setStaticallyKnownDocuments(new XmldbURI[]{pathUri});
149-
xqueryContext.setBaseURI(new AnyURIValue(pathUri.toString()));
150-
};
151-
152-
final Properties outputProperties = new Properties();
153-
try (final XQueryUtil.QueryResult queryResult = XQueryUtil.query(broker, source, true, null, outputProperties, setupXqueryContextPreCompilation, null, null)) {
154-
155-
if (LOG.isTraceEnabled()) {
156-
LOG.trace("XQuery execution results: {} in {}ms.", queryResult.result.toString(), queryResult.executionTime);
157-
}
158-
}
133+
if (LOG.isTraceEnabled()) {
134+
LOG.trace("XQuery execution results: {} in {}ms.", queryResult.result.toString(), queryResult.executionTime);
159135
}
160136
}
161-
162-
} catch (final Exception e) {
137+
} catch (final DbUriSource.NoSuchDocumentException e) {
138+
LOG.error("Resource [{}] does not exist.", xqueryResourcePath);
139+
} catch (final EXistException | PermissionDeniedException | XPathException | IOException e) {
163140
LOG.error("Exception while executing [{}] script", xqueryResourcePath, e);
164141
}
165142
}

exist-core/src/main/java/org/exist/http/urlrewrite/XQueryURLRewrite.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,6 @@
5353
import org.exist.EXistException;
5454
import org.exist.Namespaces;
5555
import org.exist.collections.Collection;
56-
import org.exist.dom.persistent.BinaryDocument;
5756
import org.exist.dom.persistent.DocumentImpl;
5857
import org.exist.dom.persistent.LockedDocument;
5958
import org.exist.http.Descriptor;
@@ -66,7 +65,7 @@
6665
import org.exist.security.PermissionDeniedException;
6766
import org.exist.security.Subject;
6867
import org.exist.security.internal.web.HttpAccount;
69-
import org.exist.source.DBSource;
68+
import org.exist.source.DbUriSource;
7069
import org.exist.source.FileSource;
7170
import org.exist.source.Source;
7271
import org.exist.source.SourceFactory;
@@ -774,7 +773,8 @@ SourceInfo findSourceFromDb(final DBBroker broker, final String basePath, final
774773
}
775774

776775
final String controllerPath = controllerDoc.getCollection().getURI().getRawCollectionPath();
777-
return new SourceInfo(new DBSource(broker.getBrokerPool(), (BinaryDocument) controllerDoc, true), "xmldb:exist://" + controllerPath, controllerPath.substring(locationUri.getCollectionPath().length()));
776+
final Source source = DbUriSource.from(broker.getBrokerPool(), broker.getCurrentSubject(), controllerDoc, true, false);
777+
return new SourceInfo(source, "xmldb:exist://" + controllerPath, controllerPath.substring(locationUri.getCollectionPath().length()));
778778

779779
} catch (final URISyntaxException e) {
780780
LOG.warn("Bad URI for base path: {}", e.getMessage(), e);
@@ -922,8 +922,8 @@ private SourceInfo getSource(final DBBroker broker, final String moduleLoadPath)
922922
throw new ServletException("XQuery resource: " + query + " is not an XQuery or " +
923923
"declares a wrong mime-type");
924924
}
925-
sourceInfo = new SourceInfo(new DBSource(broker.getBrokerPool(), (BinaryDocument) sourceDoc, true),
926-
locationUri.toString());
925+
final Source source = DbUriSource.from(broker.getBrokerPool(), broker.getCurrentSubject(), sourceDoc, true, false);
926+
sourceInfo = new SourceInfo(source, locationUri.toString());
927927
} catch (final PermissionDeniedException e) {
928928
throw new ServletException("permission denied to read module source from " + query);
929929
}

exist-core/src/main/java/org/exist/repo/ExistRepository.java

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,13 +48,16 @@
4848
import org.apache.logging.log4j.LogManager;
4949
import org.apache.logging.log4j.Logger;
5050
import org.exist.dom.persistent.BinaryDocument;
51+
import org.exist.dom.persistent.DocumentImpl;
52+
import org.exist.dom.persistent.LockedDocument;
5153
import org.exist.security.PermissionDeniedException;
52-
import org.exist.source.DBSource;
54+
import org.exist.source.DbUriSource;
5355
import org.exist.storage.BrokerPool;
5456
import org.exist.storage.BrokerPoolService;
5557
import org.exist.storage.BrokerPoolServiceException;
5658
import org.exist.storage.DBBroker;
5759
import org.exist.storage.NativeBroker;
60+
import org.exist.storage.lock.Lock;
5861
import org.exist.util.Configuration;
5962
import org.exist.util.FileUtils;
6063
import org.exist.xmldb.XmldbURI;
@@ -70,7 +73,6 @@
7073
import org.expath.pkg.repo.PackageException;
7174
import org.expath.pkg.repo.Repository;
7275
import org.expath.pkg.repo.URISpace;
73-
import org.w3c.dom.Document;
7476

7577
import javax.annotation.Nullable;
7678
import javax.xml.transform.Source;
@@ -323,16 +325,24 @@ public Path resolveXQueryModule(final String namespace) throws XPathException {
323325

324326
// 1. attempt to locate it within a library
325327
XmldbURI xqueryDbPath = XmldbURI.create("xmldb:exist:///db/system/repo/" + relXQueryPath);
326-
@Nullable Document doc = broker.getXMLResource(xqueryDbPath);
327-
if (doc != null && doc instanceof BinaryDocument) {
328-
return new DBSource(broker.getBrokerPool(), (BinaryDocument) doc, false);
328+
try (@Nullable final LockedDocument lockedDoc = broker.getXMLResource(xqueryDbPath, Lock.LockMode.READ_LOCK)) {
329+
if (lockedDoc != null) {
330+
final DocumentImpl doc = lockedDoc.getDocument();
331+
if (doc instanceof BinaryDocument) {
332+
return DbUriSource.from(broker.getBrokerPool(), broker.getCurrentSubject(), doc, false, false);
333+
}
334+
}
329335
}
330336

331337
// 2. attempt to locate it within an app
332338
xqueryDbPath = XmldbURI.create("xmldb:exist:///db/apps/" + relXQueryPath);
333-
doc = broker.getXMLResource(xqueryDbPath);
334-
if (doc != null && doc instanceof BinaryDocument) {
335-
return new DBSource(broker.getBrokerPool(), (BinaryDocument) doc, false);
339+
try (@Nullable LockedDocument lockedDoc = broker.getXMLResource(xqueryDbPath, Lock.LockMode.READ_LOCK)) {
340+
if (lockedDoc != null) {
341+
final DocumentImpl doc = lockedDoc.getDocument();
342+
if (doc instanceof BinaryDocument) {
343+
return DbUriSource.from(broker.getBrokerPool(), broker.getCurrentSubject(), doc, false, false);
344+
}
345+
}
336346
}
337347

338348
return null;

exist-core/src/main/java/org/exist/scheduler/UserXQueryJob.java

Lines changed: 13 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,14 @@
5454
import org.apache.logging.log4j.LogManager;
5555
import org.apache.logging.log4j.Logger;
5656
import org.exist.EXistException;
57-
import org.exist.dom.persistent.BinaryDocument;
58-
import org.exist.dom.persistent.LockedDocument;
5957
import org.exist.security.PermissionDeniedException;
6058
import org.exist.security.Subject;
61-
import org.exist.source.DBSource;
59+
import org.exist.source.DbStoreSource;
60+
import org.exist.source.DbUriSource;
6261
import org.exist.source.Source;
6362
import org.exist.source.SourceFactory;
6463
import org.exist.storage.BrokerPool;
6564
import org.exist.storage.DBBroker;
66-
import org.exist.storage.lock.Lock.LockMode;
6765
import org.exist.xmldb.XmldbURI;
6866
import org.exist.xquery.XPathException;
6967
import org.exist.xquery.XQueryContext;
@@ -175,24 +173,22 @@ public final void execute(final JobExecutionContext jec) throws JobExecutionExce
175173
}
176174

177175
try (final DBBroker broker = pool.get(Optional.of(user))) {
178-
if(xqueryResource.indexOf(':') > 0) {
176+
if (xqueryResource.indexOf(':') > 0) {
179177
final Source source = SourceFactory.getSource(broker, "", xqueryResource, true);
180-
if(source != null) {
181-
executeXQuery(pool, broker, source, params);
178+
if (source != null) {
179+
executeXQuery(pool, broker, source, params);
182180
return;
183181
}
184182
} else {
185183
final XmldbURI pathUri = XmldbURI.create(xqueryResource);
186-
try(final LockedDocument lockedResource = broker.getXMLResource(pathUri, LockMode.READ_LOCK)) {
187-
if (lockedResource != null) {
188-
final Source source = new DBSource(pool, (BinaryDocument) lockedResource.getDocument(), true);
189-
executeXQuery(pool, broker, source, params);
190-
return;
191-
}
192-
}
184+
final Source source = DbUriSource.from(pool, pathUri, true, false);
185+
executeXQuery(pool, broker, source, params);
186+
return;
193187
}
194188

195189
LOG.warn("XQuery User Job not found: {}, job not scheduled", xqueryResource);
190+
} catch (final DbUriSource.NoSuchDocumentException e) {
191+
abort("Could not load XQuery: " + e.getMessage());
196192
} catch(final EXistException ee) {
197193
abort("Could not get DBBroker!");
198194
} catch(final PermissionDeniedException pde) {
@@ -207,8 +203,8 @@ public final void execute(final JobExecutionContext jec) throws JobExecutionExce
207203
private void executeXQuery(final BrokerPool pool, final DBBroker broker, final Source source, final Properties params) throws PermissionDeniedException, XPathException, JobExecutionException {
208204

209205
final ConsumerE<XQueryContext, XPathException> setupXqueryContextPreCompilation = xqueryContext -> {
210-
if (source instanceof DBSource) {
211-
final XmldbURI collectionUri = ((DBSource) source).getDocumentPath().removeLastSegment();
206+
if (source instanceof DbStoreSource) {
207+
final XmldbURI collectionUri = ((DbStoreSource) source).getDocumentPath().removeLastSegment();
212208
xqueryContext.setModuleLoadPath(XmldbURI.EMBEDDED_SERVER_URI.append(collectionUri.getCollectionPath()).toString());
213209
xqueryContext.setStaticallyKnownDocuments(new XmldbURI[]{collectionUri});
214210
}
@@ -253,4 +249,4 @@ private void abort(final String message, final boolean unschedule) throws JobExe
253249

254250
throw jaa;
255251
}
256-
}
252+
}

0 commit comments

Comments
 (0)