]
Paul Ferraro edited comment on JGRP-2168 at 5/9/17 8:14 AM:
------------------------------------------------------------
{quote}First off: I cannot change the Collection to a List as this would be an API
change.{quote}
Why not add a new constructor that accepts a List<? extends Protocol> and deprecate
the old one?
was (Author: pferraro):
{quote}First off: I cannot change the Collection to a List as this would be an API
change.{quote}
Why can't you add a new constructor that accepts a List and deprecate the old one?
JChannel(Collection<Protocol>) constructor clears protocol
properties with non-default converter whose associated system property is not defined
------------------------------------------------------------------------------------------------------------------------------------------------
Key: JGRP-2168
URL:
https://issues.jboss.org/browse/JGRP-2168
Project: JGroups
Issue Type: Bug
Affects Versions: 3.6.13, 4.0.1
Reporter: Paul Ferraro
Assignee: Bela Ban
Fix For: 4.0.3
WildFly 11 recently started using the new JChannel(Protocol...) constructor for creating
channels. This has resulted in the inability to configure certain protocol properties,
most notably, initial_hosts for TCPPING.
Because this constructor calls resolveAndAssignFields(...) with an empty map, if a
property was explicitly set, and its associated system property does not exist, and that
property uses a non-default converter, then it will have its value undefined (or, more
specifically, set to whatever the converter does with a null value).
Additionally, if the assocated system property did exist, it would take precedence over
an explicitly set value. I don't think that's a good idea.
Consider the following:
{code:java}
TCP transport = new TCP();
transport.setBindAddress(InetAddress.getLocalHost());
transport.setBindPort(9600);
TCPPING ping = new TCPPING();
ping.setInitialHosts(Collections.singletonList(new
IpAddress(transport.getBindAddress(), transport.getBindPort())));
JChannel channel = new JChannel(transport, ping);
assert !ping.getInitialHosts().isEmpty() : "No initial hosts!";
{code}
Side note: new JChannel(Collection<Protocol>) should really be new
JChannel(List<Protocol>), since the collection should be ordered.