Skip to content

Commit c78db31

Browse files
author
dxcity
committed
tagging release 3.294
1 parent 9fd6da0 commit c78db31

File tree

51 files changed

+359
-166
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+359
-166
lines changed

ReleaseNotes.txt

+8
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
2+
QDS 3.294:
3+
4+
* [QD-1262] Handle MARS time synchronization tracker multicast initialization error on MacOS
5+
* [QD-1257] Add connector option to ignore received subscription removal requests
6+
- added 'subscriptionKeepAlive' parameter accepting '0' (default behavior) and 'inf' (ignores unsubscription) values
7+
* [QD-1261] Unsynchronized usage of WeakHashMap in SerialClassContext
8+
19
QDS 3.293:
210

311
* [QD-1246] LongHashMap key_set,values,entry_set,mod_count fields should not be volatile

auth/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-api/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-bin/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-codegen-verify/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-codegen/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-impl/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-ipf-filter/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-news/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-ondemand/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-plotter/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-promise/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-samples/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>
2121

2222
<artifactId>dxfeed-samples</artifactId>
23-
<version>3.293</version>
23+
<version>3.294</version>
2424
<packaging>jar</packaging>
2525

2626
<properties>

dxfeed-tools/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-viewer-installer/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-viewer/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxfeed-webservice-impl/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxfeed-webservice/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
</parent>
1919
<modelVersion>4.0.0</modelVersion>
2020

dxlib-benchmark/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<parent>
33
<artifactId>QD</artifactId>
44
<groupId>com.devexperts.qd</groupId>
5-
<version>3.293</version>
5+
<version>3.294</version>
66
<relativePath>../pom.xml</relativePath>
77
</parent>
88
<modelVersion>4.0.0</modelVersion>

dxlib-qd-sandbox/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxlib/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
<parent>
1515
<artifactId>QD</artifactId>
1616
<groupId>com.devexperts.qd</groupId>
17-
<version>3.293</version>
17+
<version>3.294</version>
1818
<relativePath>../pom.xml</relativePath>
1919
</parent>
2020
<modelVersion>4.0.0</modelVersion>

dxlib/src/main/java/com/devexperts/io/SerialClassContext.java

+22-26
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,11 @@
2121
import java.net.URL;
2222
import java.nio.charset.StandardCharsets;
2323
import java.util.ArrayList;
24+
import java.util.Arrays;
2425
import java.util.Collection;
2526
import java.util.Collections;
2627
import java.util.List;
28+
import java.util.Map;
2729
import java.util.Objects;
2830
import java.util.WeakHashMap;
2931

@@ -48,7 +50,8 @@ public class SerialClassContext {
4850
*/
4951
public static final String DEFAULT_BLACK_LIST_NAME = "/META-INF/SerialClassBlacklist.txt";
5052

51-
private static final WeakHashMap<ClassLoader, SerialClassContext> defaultSerialContextMap = new WeakHashMap<>();
53+
private static final Map<ClassLoader, SerialClassContext> defaultSerialContextMap =
54+
Collections.synchronizedMap(new WeakHashMap<>());
5255

5356
private static final String ARRAY_PREFIX = "[";
5457

@@ -79,45 +82,38 @@ public static SerialClassContext createSerialClassContext(ClassLoader loader, Co
7982
* @return serial class context.
8083
*/
8184
public static SerialClassContext getDefaultSerialContext(ClassLoader loader) {
82-
if (loader == null)
83-
loader = ClassUtil.resolveContextClassLoader(null);
84-
SerialClassContext defaultContext = defaultSerialContextMap.get(loader);
85-
if (defaultContext == null) {
86-
StringPrefixSet whitelist = readPrefixSet(loader, DEFAULT_WHITE_LIST_NAME, StringPrefixSet.ANYTHING_SET);
87-
StringPrefixSet blacklist = readPrefixSet(loader, DEFAULT_BLACK_LIST_NAME, StringPrefixSet.NOTHING_SET);
88-
defaultContext = new SerialClassContext(loader, whitelist, blacklist);
89-
defaultSerialContextMap.put(loader, defaultContext);
90-
}
91-
return defaultContext;
85+
return defaultSerialContextMap.computeIfAbsent(
86+
ClassUtil.resolveContextClassLoader(loader),
87+
SerialClassContext::readSerialClassContext);
88+
}
89+
90+
private static SerialClassContext readSerialClassContext(ClassLoader cl) {
91+
StringPrefixSet whitelist = readPrefixSet(cl, DEFAULT_WHITE_LIST_NAME, StringPrefixSet.ANYTHING_SET);
92+
StringPrefixSet blacklist = readPrefixSet(cl, DEFAULT_BLACK_LIST_NAME, StringPrefixSet.NOTHING_SET);
93+
return new SerialClassContext(cl, whitelist, blacklist);
9294
}
9395

9496
private static StringPrefixSet readPrefixSet(ClassLoader cl, String prefixSetName, StringPrefixSet def) {
95-
if (prefixSetName == null)
96-
return def;
97-
List<URL> urls = new ArrayList<>();
98-
if (cl == null)
99-
cl = Thread.currentThread().getContextClassLoader();
97+
List<URL> urls;
10098
try {
101-
urls.addAll(Collections.list(cl.getResources(prefixSetName)));
99+
urls = Collections.list(cl.getResources(prefixSetName));
102100
} catch (IOException e) {
103101
return def;
104102
}
105103
if (urls.isEmpty())
106104
return def;
107-
StringPrefixSet set = null;
105+
List<String> names = new ArrayList<>();
108106
for (URL url : urls) {
109107
try (BufferedReader r = new BufferedReader(new InputStreamReader(url.openStream(), StandardCharsets.UTF_8))) {
110-
for (String name; (name = r.readLine()) != null;) {
111-
if (set == null)
112-
set = StringPrefixSet.valueOf(name);
113-
else
114-
set = set.add(StringPrefixSet.valueOf(name));
108+
for (String line; (line = r.readLine()) != null;) {
109+
// support multiple names on a single line for compatibility
110+
names.addAll(Arrays.asList(line.split(StringPrefixSet.DEFAULT_NAMES_SEPARATOR)));
115111
}
116112
} catch (IOException e) {
117113
log.error("Cannot read " + LogUtil.hideCredentials(url), e);
118114
}
119115
}
120-
return set == null ? def : set;
116+
return names.isEmpty() ? def : StringPrefixSet.valueOf(names);
121117
}
122118

123119
private final StringPrefixSet whitelist;
@@ -157,7 +153,7 @@ public ClassLoader getClassLoader() {
157153
* @return {@code true}, if class name contained in whitelist and not contained in blacklist.
158154
* @throws NullPointerException if className is null.
159155
*/
160-
public synchronized boolean accept(String className) {
156+
public boolean accept(String className) {
161157
Objects.requireNonNull(className, "className");
162158
if (className.startsWith(ARRAY_PREFIX))
163159
return true;
@@ -176,7 +172,7 @@ public synchronized boolean accept(String className) {
176172
* @throws ClassNotFoundException if the class not contained in whitelist or contained in blacklist.
177173
* @throws NullPointerException if className is null.
178174
*/
179-
public synchronized void check(String className) throws ClassNotFoundException {
175+
public void check(String className) throws ClassNotFoundException {
180176
Objects.requireNonNull(className, "className");
181177
if (className.startsWith(ARRAY_PREFIX))
182178
return;

0 commit comments

Comments
 (0)