We have four gateways in our gateway network. DAS01 and DAS02 are running version 7.9.10. They have OPC and Modbus connections to field devices and database connections for historizing data to two databases via a Tag History Splitter. Each is a Realtime Remote Tag Provider to PROD01, which is also running 7.9.10 and is directly connected to the databases. The History Access Mode for each Remote Tag Provider is Database, and the History Datasource is set to one of the database connections. PROD01 successfully queries historical data for each remote tag provider to support UI chart components.
WEB01 is running version 8.0.0-beta0 (b2019011802). It has an outgoing gateway network connection to PROD01 that uses SSL. It is not connected to DAS01 or DAS02, and proxying is disabled on PROD01. Two Realtime Remote Tag Providers are configured on WEB01, one for each Realtime Remote Tag Provider on PROD01. History Access Mode for each is GatewayNetwork. WEB01 gets realtime data from the tag providers, but it cannot access historical data. Within a Vision designer, the Historical Range configuration slider of a Historical Easy Chart seems to render density properly, but no data is pulled back. I observe the same behavior from a Remote Historical Tag Provider on WEB01 that points to one of PROD01ās database connections. I also observe the same behavior when I connect WEB01 to a development gateway thatās running version 7.9.10 as an incoming connection with SSL disabled, and I configure remote realtime and historical tag providers on WEB01 that point to a tag provider and a database connection on the development gateway.
When querying a Remote Historical Tag Provider from WEB01 I get the following error in the console:
GatewayNetwork.Local.Encoders.Dataset - Error deserializing streaming dataset.
java.lang.ClassCastException: cannot assign instance of [Lcom.inductiveautomation.ignition.common.sqltags.model.types.DataQuality; to field com.inductiveautomation.ignition.common.StreamingDataset$Row.quality of type [Lcom.inductiveautomation.ignition.common.model.values.QualityCode; in instance of com.inductiveautomation.ignition.common.StreamingDataset$Row
at java.base/java.io.ObjectStreamClass$FieldReflector.setObjFieldValues(Unknown Source)
at java.base/java.io.ObjectStreamClass$FieldReflector.checkObjectFieldValueTypes(Unknown Source)
at java.base/java.io.ObjectStreamClass.checkObjFieldValueTypes(Unknown Source)
at java.base/java.io.ObjectInputStream.defaultCheckFieldValues(Unknown Source)
at java.base/java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.base/java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
at java.base/java.io.ObjectInputStream.readArray(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject0(Unknown Source)
at java.base/java.io.ObjectInputStream.readObject(Unknown Source)
at com.inductiveautomation.metro.impl.codecs.JavaSerializationCodec.decode(JavaSerializationCodec.java:41)
at com.inductiveautomation.ignition.gateway.gan.codecs.StreamingDatasetCodec$DataReader.readObject(StreamingDatasetCodec.java:181)
at com.inductiveautomation.ignition.gateway.gan.codecs.StreamingDatasetCodec$DataReader.run(StreamingDatasetCodec.java:207)
When querying a Remote Realtime Tag Provider from WEB01 I additionally get two instances of the following error:
Tags.History.Query - Error when retrieving history provider setting from tag
java.util.concurrent.ExecutionException: java.lang.NullPointerException
at java.base/java.util.concurrent.CompletableFuture.reportGet(Unknown Source)
at java.base/java.util.concurrent.CompletableFuture.get(Unknown Source)
at com.inductiveautomation.ignition.gateway.sqltags.history.TagHistoryManagerImpl.normalizeHistoricalPath(TagHistoryManagerImpl.java:325)
at com.inductiveautomation.ignition.gateway.sqltags.history.TagHistoryManagerImpl.queryDensity(TagHistoryManagerImpl.java:488)
at com.inductiveautomation.ignition.gateway.sqltags.history.TagHistoryManagerImpl.queryHistoryDensity(TagHistoryManagerImpl.java:461)
at com.inductiveautomation.ignition.gateway.tags.model.ProjectDefaultTagManagerFacade.queryHistoryDensity(ProjectDefaultTagManagerFacade.java:421)
at com.inductiveautomation.ignition.gateway.servlets.gateway.functions.QueryTagDensity.invoke(QueryTagDensity.java:40)
at com.inductiveautomation.ignition.gateway.servlets.Gateway.doPost(Gateway.java:405)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:86)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:190)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.rewrite.handler.RewriteHandler.handle(RewriteHandler.java:335)
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:61)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
at org.eclipse.jetty.server.Server.handle(Server.java:530)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:382)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
at java.base/java.lang.Thread.run(Unknown Source)
java.lang.NullPointerException: null
at com.inductiveautomation.ignition.gateway.sqltags.distributed.server.TagProviderServiceImpl.read(TagProviderServiceImpl.java:212)
at com.inductiveautomation.ignition.gateway.sqltags.distributed.server.TagProviderServiceImpl.read(TagProviderServiceImpl.java:203)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at com.inductiveautomation.metro.impl.services.ServiceManagerImpl.invokeService(ServiceManagerImpl.java:397)
at com.inductiveautomation.metro.impl.services.ServiceManagerImpl$ServiceInvocationIntent.receive(ServiceManagerImpl.java:847)
at com.inductiveautomation.metro.impl.CentralManagerImpl.handleLocal(CentralManagerImpl.java:453)
at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:419)
at com.inductiveautomation.metro.impl.ConnectionWatcher.handle(ConnectionWatcher.java:42)
at com.inductiveautomation.metro.impl.protocol.AbstractHttpConnection.forward(AbstractHttpConnection.java:1187)
at com.inductiveautomation.metro.impl.protocol.AbstractHttpConnection.onDataReceived(AbstractHttpConnection.java:1078)
at com.inductiveautomation.metro.impl.protocol.AbstractDataChannelServlet.doPost(AbstractDataChannelServlet.java:180)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.inductiveautomation.ignition.gateway.bootstrap.MapServlet.service(MapServlet.java:85)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:837)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:583)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1160)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1092)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:134)
at org.eclipse.jetty.server.Server.handle(Server.java:518)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:308)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:244)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:186)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:273)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95)
at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:93)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:246)
at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:156)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572)
at java.lang.Thread.run(Unknown Source)
The Easy Chart also fails to browse tags in the Remote Historical Tag Provider. The following error is returned within the Choose Tag selector:
āclass com.inductiveautomation.ignition.common.browsing.BrowseResults cannot be cast to class com.inductiveautomation.ignition.common.browsing.Results (com.inductiveautomation.ignition.common.browsing.BrowseResults and com.inductiveautomation.ignition.common.browsing.Results are in unnamed module of loader āappā)ā
Iām sorry if Iāve simply configured something incorrectly. Though Iām speculating that queries are successfully initiated by WEB01 and executed by PROD01, but the results dataset isnāt being transmitted successfully from PROD01 to WEB01. Is it possible to execute queries over the gateway network between these different versions of Ignition?
Thank you for your time and help.