[
https://issues.jboss.org/browse/JGRP-1827?page=com.atlassian.jira.plugin....
]
Jim Thomas commented on JGRP-1827:
----------------------------------
This is all the program you need:
JChannel ch = new JChannel("main.xml");
ForkChannel fch = new ForkChannel(ch, "main",
"fork-channel");
fch.connect("N/A");
ch.connect("main-channel");
Using the main.xml and fork-stacks.xml you attached to this ticket this should throw an
exception on the new ForkChannel saying it can't find udp.xml. If you copy the
standard distribution udp.xml to your directory then it should run to the end.
The reason why it fails when udp.xml is not available is because ForkChannel does not call
super so it is using the default constructor for JChannel which for all intents and
purposes is like saying new JChannel("udp.xml"). Maybe that is OK but it scares
me that ForkChannel is being built on a JChannel that is being initialized by a completely
different xml file than the JChannel that ForkChannel was passed in its constructor. The
workaround is to always have a udp.xml available. Not knowing the details of how all this
works exactly, my fear is that if main.xml and udp.xml differed significantly this could
lead to some odd or undesired behavior. Even if that is not the case it seems like an
unintended requirement that ForkChannel requires udp.xml to exist.
Forked channel requires udp.xml file
------------------------------------
Key: JGRP-1827
URL:
https://issues.jboss.org/browse/JGRP-1827
Project: JGroups
Issue Type: Bug
Affects Versions: 3.4.1
Environment: Android
Reporter: Jim Thomas
Assignee: Bela Ban
Priority: Minor
Fix For: 3.4.4, 3.5
Attachments: bla2.java, fork-stacks.xml, main.xml
An exception is thrown when creating a fork channel if the stack file name is something
other than udp.xml (in my case main.xml):
final JChannel mainChannel = new JChannel("main.xml");
final ForkChannel mbChannel = new ForkChannel(mainChannel,
"main", "fork-mb");
4-09 17:33:38.270: W/System.err(5478): java.io.FileNotFoundException: JGRP000003: file
"udp.xml" not found
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.conf.ConfiguratorFactory.getXmlConfigurator(ConfiguratorFactory.java:211)
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.conf.ConfiguratorFactory.getStackConfigurator(ConfiguratorFactory.java:102)
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.JChannel.<init>(JChannel.java:172)
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.JChannel.<init>(JChannel.java:123)
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.fork.ForkChannel.<init>(ForkChannel.java:75)
04-09 17:33:38.270: W/System.err(5478): at
org.jgroups.fork.ForkChannel.<init>(ForkChannel.java:118)
04-09 17:33:38.270: W/System.err(5478): at
com.novawurks.jgroupstest.JGroupsTestActivity$JGroupsSetupThread.run(JGroupsTestActivity.java:119)
If I have the stack named udp.xml then the exception is not thrown and everything works
as expected. If I make a copy of main.xml named udp.xml (so both files are present) the
exception is not thrown and everything works as expected.
Contents of main.xml / udp.xml :
{code:xml}
<config
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:org:jgroups"
xsi:schemaLocation="urn:org:jgroups
http://www.jgroups.org/schema/JGroups-3.3.xsd" >
<UDP
enable_diagnostics="true"
ip_mcast="true"
ip_ttl="${jgroups.udp.ip_ttl:8}"
loopback="true"
max_bundle_size="1400"
max_bundle_timeout="5"
mcast_port="${jgroups.udp.mcast_port:45588}"
mcast_recv_buf_size="200K"
mcast_send_buf_size="200K"
oob_thread_pool.enabled="true"
oob_thread_pool.keep_alive_time="5000"
oob_thread_pool.max_threads="8"
oob_thread_pool.min_threads="1"
oob_thread_pool.queue_enabled="false"
oob_thread_pool.queue_max_size="100"
oob_thread_pool.rejection_policy="discard"
thread_naming_pattern="cl"
thread_pool.enabled="true"
thread_pool.keep_alive_time="5000"
thread_pool.max_threads="8"
thread_pool.min_threads="2"
thread_pool.queue_enabled="true"
thread_pool.queue_max_size="10000"
thread_pool.rejection_policy="discard"
timer.keep_alive_time="3000"
timer.max_threads="10"
timer.min_threads="4"
timer.queue_max_size="500"
timer_type="new3"
tos="8"
ucast_recv_buf_size="200K"
ucast_send_buf_size="200K" />
<PING />
<MERGE2
max_interval="30000"
min_interval="10000" />
<FD_SOCK />
<FD_ALL />
<VERIFY_SUSPECT timeout="1500" />
<BARRIER />
<pbcast.NAKACK2
discard_delivered_msgs="true"
max_msg_batch_size="500"
use_mcast_xmit="false"
xmit_interval="500"
xmit_table_max_compaction_time="30000"
xmit_table_msgs_per_row="2000"
xmit_table_num_rows="100" />
<UNICAST3
conn_expiry_timeout="0"
max_msg_batch_size="500"
xmit_interval="500"
xmit_table_max_compaction_time="60000"
xmit_table_msgs_per_row="2000"
xmit_table_num_rows="100" />
<pbcast.STABLE
desired_avg_gossip="50000"
max_bytes="4M"
stability_delay="1000" />
<pbcast.GMS
join_timeout="3000"
print_local_addr="true"
view_bundling="true" />
<UFC
max_credits="2M"
min_threshold="0.4" />
<MFC
max_credits="2M"
min_threshold="0.4" />
<FRAG frag_size="1000" />
<pbcast.STATE_TRANSFER />
<FORK>
<fork-stack id="main" >
<config>
<CENTRAL_LOCK num_backups="2" />
</config>
</fork-stack>
<fork-stack id="lock" >
<config>
<CENTRAL_LOCK num_backups="2" />
<STATS />
</config>
</fork-stack>
</FORK>
</config>
{code}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:
http://www.atlassian.com/software/jira