Skip to content

Commit f1dd950

Browse files
committed
CAY-2469 Allow maxQueueWaitTime and validationQuery in XML project
1 parent 4fd5039 commit f1dd950

File tree

23 files changed

+433
-60
lines changed

23 files changed

+433
-60
lines changed

RELEASE-NOTES.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ Changes/New Features:
1515

1616
CAY-2446 Run Disjoint By Id queries outside of synchronized block
1717
CAY-2447 Crypto support for LocalDateTime
18+
CAY-2469 Allow maxQueueWaitTime and validationQuery to be set in XML project
1819
CAY-2471 Support multiple XML project versions
1920

2021
Bug Fixes:
@@ -549,4 +550,4 @@ CAY-1804 Serialisation of long[] type was not working correctly.
549550
CAY-1806 Error importing eomodel
550551
CAY-1817 NPE during Validate Project
551552
CAY-1827 EhCache region corresponding to a cache group loses its settings after 'removeGroup'
552-
CAY-1832 Exception when modifying objects in postLoad callback
553+
CAY-1832 Exception when modifying objects in postLoad callback

cayenne-project-compatibility/src/main/java/org/apache/cayenne/project/compatibility/ProjectCompatibilityModule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import org.apache.cayenne.project.ProjectModule;
2929
import org.apache.cayenne.project.upgrade.UpgradeService;
3030
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V10;
31+
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V11;
3132
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V7;
3233
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V8;
3334
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V9;
@@ -49,6 +50,7 @@ public void configure(Binder binder) {
4950
.add(UpgradeHandler_V7.class)
5051
.add(UpgradeHandler_V8.class)
5152
.add(UpgradeHandler_V9.class)
52-
.add(UpgradeHandler_V10.class);
53+
.add(UpgradeHandler_V10.class)
54+
.add(UpgradeHandler_V11.class);
5355
}
5456
}

cayenne-project-compatibility/src/test/java/org/apache/cayenne/project/compatibility/CompatibilityTestModule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
import org.apache.cayenne.project.upgrade.UpgradeService;
3535
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler;
3636
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V10;
37+
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V11;
3738
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V7;
3839
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V8;
3940
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V9;
@@ -59,7 +60,8 @@ public void configure(Binder binder) {
5960
.add(UpgradeHandler_V7.class)
6061
.add(UpgradeHandler_V8.class)
6162
.add(UpgradeHandler_V9.class)
62-
.add(UpgradeHandler_V10.class);
63+
.add(UpgradeHandler_V10.class)
64+
.add(UpgradeHandler_V11.class);
6365

6466
binder.bind(ProjectSaver.class).toInstance(mock(ProjectSaver.class));
6567
binder.bind(DataChannelDescriptorLoader.class).toInstance(mock(DataChannelDescriptorLoader.class));

cayenne-project-compatibility/src/test/java/org/apache/cayenne/project/compatibility/CompatibilityUpgradeServiceIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public void testUpgradeFullProjectDom() throws Exception {
5252
Document domainDocument = documentProvider.getDocument(resourceUrl);
5353

5454
assertNotNull(domainDocument);
55-
assertEquals("10", domainDocument.getDocumentElement().getAttribute("project-version"));
55+
assertEquals("11", domainDocument.getDocumentElement().getAttribute("project-version"));
5656

5757
URL dataMapUrl = getClass().getResource("test-map-v6.map.xml");
5858
Document dataMapDocument = documentProvider.getDocument(dataMapUrl);
@@ -87,4 +87,4 @@ public void testUpgradeStandAloneDataMapDom() throws Exception {
8787
private Injector getInjector() {
8888
return DIBootstrap.createInjector(new CompatibilityTestModule());
8989
}
90-
}
90+
}

cayenne-project/src/main/java/org/apache/cayenne/project/ProjectModule.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.apache.cayenne.project.upgrade.UpgradeService;
2727
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler;
2828
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V10;
29+
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V11;
2930
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V7;
3031
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V8;
3132
import org.apache.cayenne.project.upgrade.handlers.UpgradeHandler_V9;
@@ -66,7 +67,8 @@ public void configure(Binder binder) {
6667
.add(UpgradeHandler_V7.class)
6768
.add(UpgradeHandler_V8.class)
6869
.add(UpgradeHandler_V9.class)
69-
.add(UpgradeHandler_V10.class);
70+
.add(UpgradeHandler_V10.class)
71+
.add(UpgradeHandler_V11.class);
7072

7173
contributeExtensions(binder);
7274
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.apache.cayenne.project;
2+
3+
import org.apache.cayenne.CayenneRuntimeException;
4+
5+
/**
6+
* Encapsulates compatible schema versions.
7+
*/
8+
public enum ProjectVersion {
9+
10+
VERSION_9(null,"9"),
11+
VERSION_10("10","10"),
12+
VERSION_11("11","10");
13+
14+
public final String domainSchemaVersion;
15+
public final String modelMapSchemaVersion;
16+
17+
ProjectVersion(String domainSchemaVersion, String modelMapSchemaVersion) {
18+
this.domainSchemaVersion = domainSchemaVersion;
19+
this.modelMapSchemaVersion = modelMapSchemaVersion;
20+
}
21+
22+
public ProjectVersion getProjectVersion(String version) {
23+
switch (version) {
24+
case "9":
25+
return VERSION_9;
26+
case "10":
27+
return VERSION_10;
28+
case "11":
29+
return VERSION_11;
30+
default:
31+
throw new CayenneRuntimeException("Invalid project version: " + version);
32+
}
33+
}
34+
}

cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/DefaultUpgradeService.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,10 @@ public class DefaultUpgradeService implements UpgradeService {
8787

8888
private static final Logger logger = LoggerFactory.getLogger(DefaultUpgradeService.class);
8989

90-
public static final String UNKNOWN_VERSION = "0";
91-
public static final String MIN_SUPPORTED_VERSION = "6";
90+
private static final String UNKNOWN_VERSION = "0";
91+
private static final String MIN_INTERMEDIATE_SUPPORTED_VERSION = "6";
92+
private static final String MIN_SUPPORTED_VERSION = "10";
93+
private static final String MAX_SUPPORTED_VERSION = "11";
9294

9395
TreeMap<String, UpgradeHandler> handlers = new TreeMap<>(VersionComparator.INSTANCE);
9496

@@ -110,28 +112,26 @@ public UpgradeMetaData getUpgradeType(Resource resource) {
110112

111113
String version = loadProjectVersion(resource);
112114
metaData.setProjectVersion(version);
113-
metaData.setSupportedVersion(String.valueOf(Project.VERSION));
114115

115-
int c1 = VersionComparator.INSTANCE.compare(version, MIN_SUPPORTED_VERSION);
116+
int c1 = VersionComparator.INSTANCE.compare(version, MIN_INTERMEDIATE_SUPPORTED_VERSION);
116117
if (c1 < 0) {
117-
metaData.setIntermediateUpgradeVersion(MIN_SUPPORTED_VERSION);
118118
metaData.setUpgradeType(UpgradeType.INTERMEDIATE_UPGRADE_NEEDED);
119119
return metaData;
120120
}
121121

122-
int c2 = VersionComparator.INSTANCE.compare(String.valueOf(Project.VERSION), version);
123-
if (c2 < 0) {
122+
if (VersionComparator.INSTANCE.compare(version, MIN_SUPPORTED_VERSION) < 0) {
123+
metaData.setUpgradeType(UpgradeType.UPGRADE_NEEDED);
124+
} else if (VersionComparator.INSTANCE.compare(version, MAX_SUPPORTED_VERSION) > 0) {
124125
metaData.setUpgradeType(UpgradeType.DOWNGRADE_NEEDED);
125-
} else if (c2 == 0) {
126-
metaData.setUpgradeType(UpgradeType.UPGRADE_NOT_NEEDED);
127126
} else {
128-
metaData.setUpgradeType(UpgradeType.UPGRADE_NEEDED);
127+
metaData.setUpgradeType(UpgradeType.UPGRADE_NOT_NEEDED);
129128
}
129+
130130
return metaData;
131131
}
132132

133133
protected List<UpgradeHandler> getHandlersForVersion(String version) {
134-
boolean found = MIN_SUPPORTED_VERSION.equals(version);
134+
boolean found = MIN_INTERMEDIATE_SUPPORTED_VERSION.equals(version);
135135
List<UpgradeHandler> handlerList = new ArrayList<>();
136136

137137
for(Map.Entry<String, UpgradeHandler> entry : handlers.entrySet()) {

cayenne-project/src/main/java/org/apache/cayenne/project/upgrade/UpgradeMetaData.java

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@ public class UpgradeMetaData {
2828

2929
protected UpgradeType upgradeType;
3030
protected String projectVersion;
31-
protected String supportedVersion;
32-
protected String intermediateUpgradeVersion;
3331

3432
public UpgradeType getUpgradeType() {
3533
return upgradeType;
@@ -47,20 +45,4 @@ public void setProjectVersion(String projectVersion) {
4745
this.projectVersion = projectVersion;
4846
}
4947

50-
public String getSupportedVersion() {
51-
return supportedVersion;
52-
}
53-
54-
public void setSupportedVersion(String supportedVersion) {
55-
this.supportedVersion = supportedVersion;
56-
}
57-
58-
public String getIntermediateUpgradeVersion() {
59-
return intermediateUpgradeVersion;
60-
}
61-
62-
public void setIntermediateUpgradeVersion(String intermediateUpgradeVersion) {
63-
this.intermediateUpgradeVersion = intermediateUpgradeVersion;
64-
}
65-
6648
}
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
/*****************************************************************
2+
* Licensed to the Apache Software Foundation (ASF) under one
3+
* or more contributor license agreements. See the NOTICE file
4+
* distributed with this work for additional information
5+
* regarding copyright ownership. The ASF licenses this file
6+
* to you under the Apache License, Version 2.0 (the
7+
* "License"); you may not use this file except in compliance
8+
* with the License. You may obtain a copy of the License at
9+
*
10+
* http://www.apache.org/licenses/LICENSE-2.0
11+
*
12+
* Unless required by applicable law or agreed to in writing,
13+
* software distributed under the License is distributed on an
14+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15+
* KIND, either express or implied. See the License for the
16+
* specific language governing permissions and limitations
17+
* under the License.
18+
****************************************************************/
19+
20+
package org.apache.cayenne.project.upgrade.handlers;
21+
22+
import org.apache.cayenne.configuration.DataChannelDescriptor;
23+
import org.apache.cayenne.project.upgrade.UpgradeUnit;
24+
import org.w3c.dom.Element;
25+
26+
/**
27+
* Upgrade handler for the project version "10" introduced by 4.1.M1 release.
28+
* Changes highlight:
29+
* - strict schema for domain (e.g. main project document)
30+
* - new schema for data map allowing usage of additional elements (e.g. XML extensions)
31+
*
32+
* @since 4.1
33+
*/
34+
public class UpgradeHandler_V11 implements UpgradeHandler {
35+
36+
@Override
37+
public String getVersion() {
38+
return "11";
39+
}
40+
41+
@Override
42+
public void processProjectDom(UpgradeUnit upgradeUnit) {
43+
Element domain = upgradeUnit.getDocument().getDocumentElement();
44+
// introduce xml namespace and schema for domain
45+
domain.setAttribute("xmlns","http://cayenne.apache.org/schema/11/domain");
46+
domain.setAttribute("xmlns:xsi","http://www.w3.org/2001/XMLSchema-instance");
47+
domain.setAttribute("xsi:schemaLocation", "http://cayenne.apache.org/schema/11/domain " +
48+
"https://cayenne.apache.org/schema/11/domain.xsd");
49+
// update version
50+
domain.setAttribute("project-version", getVersion());
51+
}
52+
53+
@Override
54+
public void processDataMapDom(UpgradeUnit upgradeUnit) {
55+
// noop
56+
}
57+
58+
@Override
59+
public void processModel(DataChannelDescriptor dataChannelDescriptor) {
60+
// noop
61+
}
62+
}

cayenne-project/src/test/java/org/apache/cayenne/project/upgrade/DefaultUpgradeServiceTest.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,16 @@ public void getUpgradeType() throws Exception {
6464
metaData = upgradeService.getUpgradeType(getResourceForVersion("6"));
6565
assertEquals(UpgradeType.UPGRADE_NEEDED, metaData.getUpgradeType());
6666

67+
metaData = upgradeService.getUpgradeType(getResourceForVersion("9"));
68+
assertEquals(UpgradeType.UPGRADE_NEEDED, metaData.getUpgradeType());
69+
6770
metaData = upgradeService.getUpgradeType(getResourceForVersion("10"));
6871
assertEquals(UpgradeType.UPGRADE_NOT_NEEDED, metaData.getUpgradeType());
6972

7073
metaData = upgradeService.getUpgradeType(getResourceForVersion("11"));
74+
assertEquals(UpgradeType.UPGRADE_NOT_NEEDED, metaData.getUpgradeType());
75+
76+
metaData = upgradeService.getUpgradeType(getResourceForVersion("12"));
7177
assertEquals(UpgradeType.DOWNGRADE_NEEDED, metaData.getUpgradeType());
7278
}
7379

@@ -160,4 +166,4 @@ private Resource getResourceForVersion(String version) {
160166
return new URLResource(getClass().getResource("handlers/cayenne-project-v"+version+".xml"));
161167
}
162168

163-
}
169+
}

0 commit comments

Comments
 (0)