Hi,
we are running a Tango Server on small ARM device (with Debian9 distribution)
with a file-db, such that we do not need the MySQL server installed on this device.
When trying to connect to attributes of this server from a custom written
Tango ATK application, we encounter ConnectionErrors. The same fully qualified
attribute name works with a tango.AttributeProxy in python, though.
I also noticed that the atkpanel can connect. The difference in that case is that
the atkpanel asks for a device name and thus probably derives all attribute objects
from the device object.
The underlying problem seems to be code in the AEntityFactory.java in ATKCore.
I have managed to patch the functions extractDeviceName, extractDeviceNameAdvanced,
and extractEntityName to be aware of a possible “#dbase=no” substring and ran a
succesful test afterwards, where I was able to connect to the attributes of this
device via AttributeList.add(String attrname) (as recommended in the ATK tutorials).
If you specify an attribute as
tango://host:port/dev1/dev2/dev3/attrname#dbase=no
then the corresponding device string must be
tango://host:port/dev1/dev2/dev3#dbase=no
However, the original extractDeviceName function simply discards everything
after the last slash, so the #dbase=no part is lost and the device is not
found.
The attached file is a patched version of AEntityFactory.java where the original
source code was downloaded from github on 2018-02-28.