
0
Started
OpenICE not working offline on Ubuntu
Hi again,
OK, one more problem with Ubuntu 14.04. We are trying to run openICE on a beagle board that will run on its own with no internet connection. However, it turns out there is an error when openICE is run on Ubuntu without internet connection (both on the laptop and on the beagle).
It is interesting that I get slightly different errors if I run this from eclipse and from the command line. On eclipse I get:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rtConfig' defined in class path resource [DriverContext.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.mdpnp.apps.testapp.RtConfig]: Factory method 'setupDDS' threw exception; nested exception is com.rti.dds.infrastructure.RETCODE_ERROR: error creating entity
From the command line, the error is:
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 6 in XML document from class path resource [DriverContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 95; cvc-elt.1: Cannot find the declaration of element 'beans'.
This doesn't happen under Windows or Mac. As far as I know, I performed the exact same installation steps. Also, the problem goes away if there is connection to the internet, in which case the spring-beans.4.1.xsd schema can be retrieved.
Do you guys know what the problem is? Any help would be greatly appreciated!
Thanks,
Rado
OK, one more problem with Ubuntu 14.04. We are trying to run openICE on a beagle board that will run on its own with no internet connection. However, it turns out there is an error when openICE is run on Ubuntu without internet connection (both on the laptop and on the beagle).
It is interesting that I get slightly different errors if I run this from eclipse and from the command line. On eclipse I get:
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'rtConfig' defined in class path resource [DriverContext.xml]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.mdpnp.apps.testapp.RtConfig]: Factory method 'setupDDS' threw exception; nested exception is com.rti.dds.infrastructure.RETCODE_ERROR: error creating entity
From the command line, the error is:
Exception in thread "main" org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 6 in XML document from class path resource [DriverContext.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 6; columnNumber: 95; cvc-elt.1: Cannot find the declaration of element 'beans'.
This doesn't happen under Windows or Mac. As far as I know, I performed the exact same installation steps. Also, the problem goes away if there is connection to the internet, in which case the spring-beans.4.1.xsd schema can be retrieved.
Do you guys know what the problem is? Any help would be greatly appreciated!
Thanks,
Rado
Customer support service by UserEcho
We recenting did some testing using offline Beaglebones and ran into a problem with DDS requiring a timestamp. Not sure if this is related but, like you, we are hoping to avoid internet connections.
Alistair
Thanks for the reply. If you got to that point, then presumably you were at least able to start openICE? What version of ubuntu and java are you using?
Thanks,
Rado
To provide some further information. The only OMG standard protocol for DDS communication is RTPS/DDSI and the only "Platform Specific Module" for RTPS that has been ratified for RTPS is over UDP/IP. Some vendors, including RTI, do offer proprietary transports using shared memory. We disable this transport in our DDS build to maintain inter-vendor compatibility but if you'd like to create your own build and experiment with that transport then please do. More info here. I'd love to hear how it works out. Also I haven't had much success using the local loopback adapter but that can also be further explored if you'd like. We can contact RTI for further information. For the RTI implementation we are using all these settings are rolled up into the XML QoS configuration. There's reference material on configuring the RTPS (UDPv4) transport available here. In principle the loopback can be used but I haven't personally had a lot of success with it.
Regarding clocks we were talking just this morning about this in the lab. This is a rich and complex issue. DDS specifies a source_timestamp for each sample indicating when it was written into the Writer. In the past we have examined this value to gauge the time related to a sample but we are moving away from that in favor of specifying timestamps within our domain specific model. The reason being that these source_timestamp values should remain a detail of the middleware. In fact DDS can be configured to use a monotonic clock where the source_timestamp values are no longer populated from the realtime clock. More information on clock selection here.
Adding insult to injury in our QoS settings we are asking DDS to guarantee that samples are delivered in the order they were emitted at the source per the DesinationOrderQos. This means that DDS cannot allow samples to be written on the sending side out of time order. As a consequence a dramatic change in realtime clock values causes failures to "write" samples. This means we must at least 1.) ensure that ntp clock adjustments will not exceed source_timestamp_tolerance and at most 2.) consider switching to monotonic clocks across the board. In this way big shifts in the RTC won't interfere with the middleware layer. Alternatively we could change the system to use the default "BY_RECEPTION" DestinationOrderQos but we'll need to document it heavily that anyone consuming the data must cope with the possibility (even if remote as a practical matter) of data being delivered to a reader in a different order than it was written to the writer.
All that said to assign wall clock time to data from a medical device that emits no time markers (or too-low resolution time markers) requires an adapter with its clock set. For an embedded device (like a beaglebone) without connectivity to the internet at large you could try setting up a local host as NTP server. We're also going to experiment with battery-backed RTC add-ons for our beaglebones and we'll report back on our experiences. Another critical need for some absolute synchronized time is the need to correctly interleave data after the fact. To meet that requirement we demand that participants all have the means to attach meaningful realtime clock values to data. This as opposed to a potentially more complex solution in the spirit of Lamport.
I hope this information is helpful. I'm excited to be engaged in this discussion and welcome more feedback as we continue o evolve OpenICE.
Thank you
Jeff Plourde
Thank you for the explanation. I believe we have a different problem, though, and hopefully simpler.
I'm pretty sure we have a compilation issue because we can get our laptops running Windows or Mac to connect to devices even when offline. But on Ubuntu it just crashes when there's no internet connection (even if we just use a laptop). As far as I understand, this is a problem with the spring framework of gradle where for some reason under ubuntu it goes online every time to download some beans schema. This may also be an eclipse-gradle bug under ubuntu (and may also be a java problem). So I was hoping you guys may have encountered this problem before or have some insight.
As for the problem you describe, for now we will solve it by collecting data locally on each board, since the devices we are interested in already provide enough measurements. We will worry about interoperability issues once we get this first step working smoothly.
Thanks,
Rado
I just reproduced this - you are absolutely right. Ubuntu without an internet connection will fail. This is a spring configuration error with how the application tries to locate XML schemas on the web. It's in the queue to be fixed ASAP.
Sorry for the inconvenience. And THANK YOU for helping by bringing errors like this our attention. We have a small team and limited resources to test everything everywhere at the pace we're moving. Every bit of help is appreciated.
Jeff
Thanks,
Rado
We are trying to reproduce the problems you are having. With respect to the XML related error it would be helpful to know the classpath with which you are launching the program. Is it derived from the gradle dependency tree?
Thank you
Jeff
I was actually looking at the classpaths yesterday. Under windows, where everything is fine, all the schemas are added to the eclipse classpath, whereas under ubuntu they just remain in some jars in a gradle dependency folder, which is never used, I'm guessing.
Rado
What's about this issue? How can I run OpenICE without internet connection?
I have this error:
2015-08-16 20:20:47,859|WARN|XmlBeanDefinitionReader.warning:48|Ignored XML validation warning|OpenICE-Main|139877|
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.warning(ErrorHandlerWrapper.java:99)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:433)
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.java:347)
Thank you so much!
As far as I know, it is not possible to use the current version of OpenICE on Ubuntu offline. Based on a conversation I had with Jeff in one of the other threads, the spring schemas are looking for a network connection (could be a local connection, not necessarily an internet connection).
The way I see it, there are two ways to proceed (unless OpenICE is somehow modified). The first is to strip down the OpenICE code so that it doesn't include the networking stuff. The downside here is that you'll have to do this every time OpenICE is updated.
The other option (I'm speculating here) is to try to simulate an open connection and see if that works. I haven't had time to try these things but we'll eventually get a Master's student to try.
Thanks,
Rado
I will try the second option.
Regards!
This is still an open issue unfortunately. As Rado said, Spring will try and use any network connection before proceeding. A work around is to have any network interface up when building. Even if Spring can't reach the web, simply providing an up interface for it to check will allow the build to proceed.
I will let you know when this is fixed as it is not an intended use. Sorry for the inconvenience,
Jeff
Hi Jeff.
We started a collaboration with RTI recently and asked them about this problem that DDS has with Ubuntu. They gave us the following response (copied below). Does this make sense? If it does, do you think you guys can fix this at some point?
Thanks,
Rado
------------------------------------------------------------------------------------------------------------------
I believe they might be running into this problem: https://research.rti. com/kb/what-causes-error-
- disable multicast discovery address.
Hi guys,
Any update on this?
Thanks,
Rado