Version 1.5.0

1.5.0 (in old release notes format)

This is a new release of the SDK. There are various compliance improvements and fixes in here.

OPC Foundation Java Stack changes

  • Build 1.01.330.16
  • New: Multidimensional index ranges with NumericRange
  • New: DataValue.clone
  • Fixed: Handle empty server certificate (the same way as null)
  • Fixed: UnsignedLong constructor with BigInteger (equal to Long.MAX_VALUE)

Changes to both SDK Client and Server

  • Changed: MonitoredDataItem.get/setIndexRange(), datatype changed from String to NumericRange
  • Fixed: Enumeration DataType was not linked to Integer.class
  • Fixed: DataTypeConverter.convert to throw consistently ClassCastException also when values are out of range and cannot be converted

Changes to SDK Client

  • New: Subscription.getSetMaxMonitoredItemsPerCall()
  • Fixed: historyReadAll in case the server returns null with Good_NoData

Changes to SDK Server

  • Interface change: SubscriptionManager.createMonitoredDataItem(), data type of indexRange parameters changed from String to NumericRange
  • Interface change: SubscriptionManagerListener.onCreateMonitoredDataItem(), data type of indexRange parameters changed from String to NumericRange
  • Interface change: NodeManager.createMonitoredDataItem(), data type of indexRange parameters changed from String to NumericRange
  • Interface change: NodeManagerListener.onCreateMonitoredDataItem(), data type of indexRange parameters changed from String to NumericRange
  • Changed: PlainVariable/PlainInstanceVariable.setCurrentValue() to default to DateTime.currentTime instead of null for SourceTimestamp
  • New: IoManager.applyIndexRangeToReadValue()
  • New: IoManager.applyIndexRangeToWrittenValue()
  • New: IoManager.checkIndexRange()
  • New (overload): MonitoredDataItem.notifyDataChange(value, applyIndexRange)
  • ServiceHandler.set/getMaxOperationsPerRequest
  • SubscriptionServiceHandler.set/getMaxMonitoredItemsPerCall
  • AttributeServiceHandler.set/getMaxNodesPerRead
  • AttributeServiceHandler.set/getMaxNodesPerWrite
  • AttributeServiceHandler.set/getMaxNodesPerHistoryReadData
  • AttributeServiceHandler.set/getMaxNodesPerHistoryReadEvents
  • AttributeServiceHandler.set/getMaxNodesPerHistoryUpdate
  • NodeManagementServiceHandler.set/getMaxNodesPerBrowse
  • NodeManagementServiceHandler.set/getMaxNodesPerMethodCall
  • NodeManagementServiceHandler.set/getMaxNodesPerNodeManagement
  • NodeManagementServiceHandler.set/getMaxNodesPerRegisterNodes
  • NodeManagementServiceHandler.set/getMaxNodesPerTranslateBrowsePathsToNodeIds
  • Fixed: readAttribute was modifying the userAccessLevel that it got from user code - in effect reducing READWRITE to READONLY if it was provided.
  • Fixed: readAttribute was modifying the userWriteMask that it got from user code (similar to userAccessLevel)
  • Fixed: enumeration values could not be written (because of the linkage problem, see above)
  • Fixed: IoManager.checkAccessLevel, possible NPE
  • Fixed: Session.authenticationToken must be initialized uniquely, to avoid reconnect problems in server restart.
  • Some CTT-related (Compliance Test Tool) fixes


24.06.14

Version 1.4.8

1.4.8 (in old release notes format)

This is a new service release of the SDK. It fixes a few implementation details and provides some additional methods to improve existing functionality.

OPC Foundation Java Stack changes

Build 1.01.330.14
  • Fixed: Blocking service request handling will block other calls
  • Fixed: XmlDecoder, reading missing optional fields

Changes to both SDK Client and Server

Changes to SDK Client

  • Fixed: UaClient, improved reconnect in case the server changes in the background (and the previously used endpoint is not found)
  • New: UaClient.set/getPublishRequestTimeout - default is now UnsignedInteger.MAX_VALUE, instead of 0 ,which some servers have problems to use.

Changes to SDK Server

  • Fixed: IoManager.readAttribute AccessLevel, Executable & WriteMask
  • Fixed: SessionManager.activateSession did not change the secure channel to the session, if it was changed, leading to activations that could not be used
  • Fixed: SessionManager newSessions to timeout faster (New: Session.get/setActivationTimeout(), default 10 s), if they are not activated, to avoid DoS "attacks" filling the session count
  • Fixed: browse with maxReferences
  • Fixed: NodeManager.deleteReference() was called with typeId in place of sourceNodeId
  • New: HistoryManager.begin/endHistoryRead
  • Changed: HistoryManager.historyRead gets a dataset as param & continuationPoint provided as a HistoryContinuationPoint

Changes to the Sample applications

  • SampleConsoleClient: enable Subcription PublishingInterval to be changed
  • SampleConsoleServer: fixes to alarm & history handling
Plus some additional improvements to details as usual
26.11.13

Version 1.4.6

1.4.6 (in old release notes format)

This is a new service release of the SDK. It fixes several implementation details and provides some additional methods to improve existing functionality.

OPC Foundation Java Stack changes

Build 1.01.330.12
  • Fixed: Timeout used for async service calls
  • Fixed: UserNameIdentityToken.encryptionAlgorithm was not filled with the algorithm URI
  • Changed: SecureChannelTcp non-severe Warning messages changed to Info level
  • Fixed: Possible (rare) NPE in AsyncSelector.interestOps

Changes to both SDK Client and Server

  • Improved: DataTypeConverter to handle user-derived datatypes
  • Removed: Obsolete enum type UaNode.NodeType

Changes to SDK Client

  • Fixed: Subscription.removeItems() could fail, if subscription not connected
  • Fixed: UaClient.addSubscription() can be used to move a subscription from another UaClient object (session)
  • Changed: Non-severe Warning/Error messages changed to Info level
  • Changed: Internal listener lists of MonitoredItems created on-demand

Changes to SDK Server

  • New: References to method nodes from ShelvedStateMachineType
  • New: UaServer.failOnBindError
  • New (interface change!): UaServerListener.onRegisterServerError()
  • New: UaServer.create*ServiceHandler() methods enabling overriding the default ones with your own versions
  • Improved: Handle user-derived datatypes in ServiceManagerBase.variantDataTypeEquals()
  • Fixed: SessionManager was not using the algorithm URI defined in UserNameIdentityToken.encryptionAlgorithm, but the one defined by the selected SecurityPolicy (in practice these are normally the same, though)
  • Fixed: NPE in Subscription.close
  • Fixed: initialize Session.lastServiceRequestTime when the session is created
  • Fixed: SubscriptionManager.setMonitoringMode with EventItems
  • Fixed: Added missing UnshelveTime node of ShelvedStateMachineType
  • Fixed: PublishRequestQueue threads were not closing
  • Fixed: Check Subcription timeouts after handleNotificationData instead of before it (in queuePublishRequests)
  • Fixed: SessionManagerListener list was not thread safe
  • Fixed: When adding references to ServerNode do not require them to refer to ServerNodes - to allow implementations of custom UaNodes
  • Fixed: DataType check of IoManager.writeAttribute() did not validate the types properly
  • Fixed: TwoStateDiscreteType, DataType changed to Boolean (was UInteger)
  • Fixed: TwoStateDiscreteType.getTrue/FalseState() NPE
  • Updated NodeSet2 files

Changes to the Sample applications

  • SampleConsoleClient: Improved example for translateBrowsePathToNodeId
  • SampleConsoleClient files were missing from the Client SDK distribution
Plus some additional improvements to details as usual
12.09.13

Version 1.4.4

1.4.4 (in old release notes format)

This is a new service release of the SDK. It fixes several implementation details and provides some additional methods to improve existing functionality.

OPC Foundation Java Stack changes

Build 1.01.330.4
  • Changed: Communication error related logging to give warning level messages only (instead of errors).
  • Fixed: A possible NPE at comm.error handling
  • Fixed: A chunk timing issue, which may lead to comm.errors.

Changes to both SDK Client and Server

  • New: EventData.getFieldNames()
  • Fixed: DataTypeConverter omits non-UaDataType nodes in the DataTypes - instead of choking with an exception.

Changes to SDK Client

  • New: Subscription.removeItems()
  • New: Subscription.setMonitoringMode()
  • Fixed: URISyntaxError was not raised on all invalid Uris
  • Fixed: Subscription.removeItem() to reset MonitoredItemId instead of ClientHandle to 0
  • Fixed: MonitoredItem.setMonitoringMode() to trigger the change into the server as well.

Changes to SDK Server

  • Fixed: Thread-safety of previousNode-cache in ServiceManagerBase
  • Fixed: EventData was not including components of Object type in the event fields
  • Fixed: BrowseName of the LimitState and ShelvingState components of ExclusiveLimitAlarmType were using an incorrect namespaceIndex
  • Fixed: DiscoveryServer's endpoints unbound when the server is closed (matters if the same process keeps running after the server is closed)
  • Fixed: SessionManager.createSession & activateSession synchronized to ensure that the session count won't overcome maxSessionCount even when clients are connected simultaneously
  • Fixed: AccessLevel was not verified for MonitoredDataItems: Now the IoManager is used to check if the user is allowed to read the variable and this is even rechecked when the session is reactivated.
  • Fixed: UserAccessLevel, UserWriteMask & UserExecutable filtered to not include values unavailable from AccessLevel, WriteMask & Executabl, respectively
  • Changed: EventManagerListener.onConditionRefresh is called between RefreshStart- and RefreshEnd-events (not before)
  • Changed: internal design of EventManager.refreshStart, refreshEnd changed and new refreshItems added (to call refreshItem for each))
  • Changed: Opc.Ua.Nodeset2.xml updated
  • Changed: NodeManagerListener.onAfterModifyMonitoredDataItem & EventManagerListener.onAfterModifyMonitoredEventItem called also when MonitoringMode is changed.

Changes to the Sample applications

  • Fixed: SampleConsoleServer was not defining the LimitState for the alarms
  • Fixed: SampleConsoleServer was setting the TypeDefinition of analog items to the DataType
  • Fixed: SampleConsoleClient failed to display non-Variable attributes after read

10.04.13

Version 1.4.2

1.4.2 (in old release notes format)

This is a new minor release. The version includes Interoperability (IOP) Workshop fixes and also improves support for OPC UA Specification version 1.02. This release includes an updated version of the stack that fixes the Android support (which was broken in the previous release) and also includes the latest definitions for the base OPC UA type model.

The IOP results for the Prosys products are now available from http://www.opcfoundation.org/Products/Products.aspx?STX=prosys%23

OPC Foundation Java Stack changes

  • Build 330.0
  • Changed: Variant.toString() to not include the composite class in the string (see below)
  • Fixed: Android support
  • Fixed: ExpandedNodeId.equals() - use isLocal() internally to verify serverIndex==null||0
  • Fixed: PrivKey to load PEMs also without password (as generated by the OPC Foundation Global Discovery Server beta, for example)
  • New: DeadbandType.valueOf(UnsignedInteger)
  • New: Variant.toString(bool includeCompositeClass)
  • New: Variant.toStringWithType()

Changes to both SDK Client and Server

  • Fixed: SubscriptionBase.equals() and hashCode() implementation moved to server.Subscription - the client subscription does not have a unique, immutable SubscriptionId
  • Fixed: PkiFileBasedCertificateValidator was not using the RevocationDir (it can now also handle possible crl-files in there, in addition to just plain certificate files)
  • New: PKIFIleBasedCertificateValidator.get/setCrl()
  • New: PKIFIleBasedCertificateValidator.is/setStoreAcceptOnceCertificates

Changes to SDK Client

  • Changed: UaVariableImpl.getDataType to retrieve the node automatically if not assigned
  • New: GlobalServerList for retrieving application info from the OPC Foundation Global Discovery Server (which is still in beta); shares now a common base with ServerLIst via ServerListBase
  • Fixed: UaClient silently ignored dataChanges that came "too fast" after addSubscription. Changed addSubscription to add the subscription in the subscriptions list before calling createSubscription in the server
  • Fixed (mem leak): NodeCache did not remove old nodes from the cache reliably

Changes to SDK Server

  • New: PKIFIleBasedCertificateValidator.is/setStoreAcceptOnceCertificates
  • Update: Opc.Ua.Nodeset2.xml updated
  • Fixed: Use PKIFIleBasedCertificateValidator.revocationDir (to simply read certificates in the dir - no support for .crl files, yet)
  • Fixed: MonitoredItem.timestampsToReturn may be set to null by a client, which was unexpected
  • Fixed: Subscription sent the first DataChangeNotification too fast: it should wait for the first PublishingInterval
  • Fixed: DataChangeFilter.Status did not return changes in infoBits (such as SemanticChange)
  • Fixed: Deadband.Percent did not make EuRange set for MonitoredDataItem connected to an AnalogItemType
  • Fixed: ServerNode.removeComponent() failed because of the ExpandedNodeId issue in stack
  • Fixed: Changing PublishingInterval in onAddSubcription() event handler caused NPE

Changes to the Sample applications

  • SampleConsoleServer&SampleConsoleClient: Main class broken to parts so that the various anonymous member implementations are now in their own class definitions. classes also moved to new packages: ...samples.client/server
  • SampleConsoleServer: Implementation for History continuationPoints
  • SampleConsoleServer: Sample implementation of EventHistory & readEvents
  • SampleConsoleServer: Implementation of deleteRaw
  • SampleConsoleServer: Improved implementation of readRaw
  • SampleConsoleClient: Sample of initializing custom event fields (with namespaceIndex defined at run time)
  • Tutorials updated accordingly

26.11.12

Version 1.4.0

1.4.0 (in old release notes format)

This is a new minor release, with some important changes and improvements.

Highlights

  • The most important new feature is support for importing information models from XML files that adhere to the new UaNodeSet.xsd schema defined in UA Spec. v.1.02 (Part 5). UaServer is now initialized by default with the types in the Opc.Ua.NodeSet2.xml, which is defined by the OPC Foundation and included in the setup. The information model definitions are still being worked on. The latest published NodeSet files are available at http://www.opcfoundation.org/UA/schemas/1.02/, but we have included a fixed version of the current draft of the basic information model (Opc.Ua.NodeSet2.xml), already.
  • History Access methods, both on the client and server side, are now supporting continuation points: this leads to interafce changes on the server side!
  • There are also several important performance improvements, especially to the Subscription management on the client side, which has a new implementation for incoming notification queue handling, but also on the server side.
  • Note also that the Variant will now decode ExtensionObjects and arrays of ExtensionObject automatically and it may break your client application, especially, if you have expected ExtensionObject data without checking it.

OPC Foundation Java Stack changes

  • Stack Build 324.4
  • Changed: Variant will decode ExtesionObject arrays automatically
  • Changed: NodeId & ExpandedNodeId hashCode() calculated when used, not in constructor (Performance issue)
  • Changed: UaTcpServer to use a shared (static) SecureChannelId for all server addresses
  • Changed: UaTcpConnection to use ConcurrentHashMap instead of synchronizedMap for SecureChannels (seemed to cause some minor issues)
  • Changed: ExpandedNodeId.serverIndex defaults to UnsignedInteger.ZERO instead of null
  • New: StatusCode.equalsStatusCode
  • New: XMLDecoder (used for parsing UaNodeSet2.xml and decoding xml enconded ExtensionObjects)
  • New: UriTable (common base for NamespaceTable & ServerTable (which was changed)
  • New: UriTable.addAll()
  • New: ServerTable.createFromArray()
  • New: NodeId & ExpandedNodeId implement Comparable
  • New: QualifiedName.parseQualifiedName()
  • Fixed: CreateSessionRequest did not include Timestamp
  • Fixed: Variant.toNumber() with Boolean values
  • Fixed: Memory leak in UATcpServer - connections were not released. The root cause was in TimerUtil

Changes to both SDK Client and Server

  • New: ModelParserBase; common implementation for both sides of the Nodeset XML reader
  • New: ModelException
  • Fixed: DataTypeConverter: use convertValue in parseVariant for boolean values to make string values work as defined by OPC UA

Changes to SDK Client

  • Changed: UaClient uses a PublishTask thread instead of a timer task to run the publish requests: this can be notified to proceed immediately, when new subscriptions are added or notification data becomes available, which leads to much faster response
  • Changed: The subscription notifications are now recorded in an internal buffer, which is emptied by the PublishTask thread (which sends the PubishRequests, checks server status and triggers automatic reconnect when necessary). This enables several synchronizations to be removed, making the client more reliable (reconnection could even lead to a deadlock) and more performant in general. However, if more data is coming in than the client can handle, the buffer may overflow. This is notified with the above mentioned new interface method.
  • Changed: 'final' keyword removed from UaClient
  • Changed: UaClient.autoReconnect defined as 'volatile' to enable changing on the fly
  • Changed: MethodCallStatusException.toString() to display the argument errors
  • Changed: Subscription keeps the MonitoredItems internally in a SkipList instead of HashMap, to ensure they are ordered by the Id, when retrieved from getItems()
  • Changed: UaClient.historyReadXxx to perform subsequent reads until no continuationPoint is returned
  • Changed: UaClient to also auto reconnect for Bad_SecureChannelIdInvalid (which should not normally occur, though)
  • New (INTERFACE CHANGE): SubscriptionNotificationListener.onBufferOverflow to notify the (new) internal notification buffer overflow
  • New: Subscription.readAll()
  • New: MonitoredEventItem.createBrowsePath()
  • New: MonitoredEventItem.get/setDefaultEventFields()
  • New: MonitoredEventItem to use a default filter (with the DefaultEventFields) by default - to ensure it will monitor events, not data changes.
  • New: Subscription.getAliveListeners()
  • New: Subscription.getNotificationListeners()
  • New: MonitoredDataItem.getDataChangeListeners()
  • New: MonitoredEventItem.getEventListeners()
  • New: UaClient.getServerTable()
  • New: AddressSpace.loadModel()
  • New: ModelParser (implementing the above mentioned loadModel() internally)
  • New: AddressSpace.getServerTable()
  • New: AddressSpace.addNode(),addNodes(),addReference(),addReferences() and the respective delete methods
  • Fixed: Do not send a new PublishRequest immediately if the response is not good (to avoid a busy loop)
  • Fixed: Bad_SessionClosed did not trigger reconnect attempt
  • Fixed: UaClient.connect() declared to throw ConnectException

Changes to SDK Server

  • INTERFACE CHANGE: HistoryManager & HistoryManagerListener to support userContinuationPoint of type Object instead of the "protocol" version of type byte[] and also enable returning any object; method parameters and return types changed accordingly. This will help dealing with the continuationPOints freely in the application
  • INTERFACE CHANGE: Method signature of NodeManager/IoManager.getVariableDataType(NodeId nodeId, UaVariable variable) changed (new param variable)
  • Changed: Data type of SessionManager.maxBrowseContinuationPoints from UnsignedShort to int
  • Changed: Session.getSessionTimeout() return type from Double to double
  • Changed: Session.getMaxBrowseContinuationPoints() returns int instead of UnsignedShort
  • Renamed: ContinuationPoint to BrowseContinuationPoint
  • Changed; NodeMapUaNode to use ConcurrentSkipListMap by default to keep the nodes in order
  • Changed: Default AccessLevel for UaVariableNode is now READWRITE (no history by default)
  • Changed: NO_LOCALE used for standard nodes (also when initialized out of the xml)
  • Removed: ServerType.updateServerArray and updateNamespaceTable from the public interface - use UaServer.addToServerArray() instead
  • New: Type data initialized from UaNodeSet2.xml, which is the new XML format defined by the OPC Foundation for data models
  • New: HistoryContinuationPoint & AbstractContinuationPoint (used internally)
  • New: SessionManager.get/setMaxHistoryContinuationPoints
  • New: ServiceContext.equals()
  • New: SubscriptionManager.get/setMaxNotificationsPerPublish()
  • New: MonitoredDataItem.get/setEuRange() & MonitoredDataItem.get/setEuRangeProperty() - for implementing support for Deadband.Percent
  • New: MonitoredDataItem sets the OverflowBit of DataValues, if the sampling queue overflows
  • New: MonitoredDataItem.notifyDataChange(DataValue) replacing the old onDataChange() which takes more arguments that were never used (it is marked deprecated now)
  • New: MonitoredEventItem.notifyEvent(EventData) replacing the old onEvent which takes more arguments that were never used (it is marked deprecated now)
  • New: MonitoredDataItem will do it's best to ensure SamplingInterval in case samples are actually provided at a faster rate
  • New: NodeManagerTable.getServerTable()
  • New: NodeManagerTable.loadModel() to enable loading information models according to the new UaNodeSet.xsd schema defined in UA Spec v.1.02 (Part 5)
  • New: ModelParser (implementing the above mentioned loadModel() internally)
  • Fixed: Subscription.MaxNotificationsPerPublish was not handled perfectly for Subscription notifications making it possible to miss some changes, if this parameter was defined by a client
  • Fixed: MethodManager.checkInputArguments to enable "null" as expected type (to omit the check)
  • Fixed: More 'volatile' keywords to Session & Subscription fields to improve possible threading issues
  • Fixed: NodeManager.browseNode NPE, if the NodeManager can return null for getReferences()
  • Fixed: MonitoredItem to initialize timestampsToReturn (just in case)
  • Fixed: SubscriptionManager to set other params of a new MonitoredDataItem before the queueSize is set
  • Fixed: HistoryManager.historyRead to verify the AccessLevel for HistoryRead
  • Fixed: activateSession was not checking the secureChannel correctly.
  • Fixed: Memory leak in Session -> diagnostics node is always added to the NodeManager but never removed, leading to increasing mem usage for a big number of sessions.

Changes to the Sample applications

  • Changed: SampleConsoleClient to be instantiated as a class, instead of using all static members - enables inheritance
  • Fixed: MyBigNodeManager.MyBigIoManager.readNonValue to define ArrayDimensions.Scalar instead of OneDimension for the DataItems
  • Fixed: SampleConsoleClient: Check AccessLevel instead of Historizing whether the node has history (Historizing is defined to tell if the node is currently collecting history, AccessLevel defined whether history is available)

05.10.12

Version 1.3.4

1.3.4 (in old release notes format)

This is an update release, with some fixes and improvements. It improves the compatitibility with other OPC UA stacks, based on version 1.02 of the specification.

OPC Foundation Java Stack changes

  • Stack Build 320.2
  • OPC UA service and type definitions regenerated from the latest "UA Defined Types.xml": History data changed, namely the ReadAtTimesDetail structure
  • New static properties: TcpConnection.set/getReceiveBufferSize() & TcpConnection.set/getSendBufferSize() (for client side)
  • New static properties: UaTcpServer.set/getReceiveBufferSize() (for server side)
  • Fixed: NPE at TcpConnection.ReadThread

Changes to both SDK Client and Server

  • Fixed: NPE from PkiFileBasedCertificateValidator.validate(null, ...)
  • Changed: DataTypeConverter.parseVariant to raise IllegalArgumentException or NullPointerException (and doc updated)

Changes to SDK Client

  • New (INTERFACE CHANGE): SubscriptionNotificationListener.onMissingData to notify of missing data packets
  • New: UaClient.hasServerStatusListener()
  • New: MonitoredDataItem.hasChangeListener()
  • New: MonitoredEventItem.hasChangeListener()
  • New: Subscription.hasAliveListener()
  • New: Subscription.hasNotificationListener()
  • New: MonitoredItem.getErrorCode()
  • Fixed: RequestHeader.Timestamp and RequestHandle are now set for UaClient messages (which use the internal getRequestHeader())
  • Fixed: UaClient.historyReadAtTimes overload to define the useSimpleBounds parameter added to the Stack structure (default is false)
  • Fixed: MonitoredDataItem.removeChangeListener parameter was incorrectly defined as MonitoredEventItem
  • Fixed: Subscription.addItems must add all items to the subscription first
  • Changed: Subscription.addItem does not remove the item from the subscription if createMonitoredItems call fails

Changes to SDK Server

  • Changed: Type data initialized from the latest "UA Defined Types.xml"
  • Changed: MonitoredDataItem.getNextSample() to not call initialValue() - it was triggering extra notifications
  • New: InitialValue implementation moved to IoManager.initializeMonitoredDataItem(), which can be overridden - by default it will call readAttribute t oprovide initial value for "non-UaNode nodes" as well via custom IoManager
  • New: listenerError to log errors in event handlers (in general)
  • New: NodeManager.hasListener()
  • New: SubscriptionManager.hasListener()
  • New: SessionManager.hasListener()
  • Fixed: Check for null listeners (in general)
  • Fixed: Use HasProperty reference for properties of type nodes (was using HasComponent)
  • Fixed: Types should be only readable
  • Fixed: UaVariableNode.setAttributes() to also handle AccessLevel (if called via AddNodes service, for example)
  • Fixed: SubscriptionManager.setPublishingMode() did not update queues of MonitoredItems leading to incorrect data changes (if set to false before adding items and returned to true after)

Changes to the Sample applications

  • New: historyReadAtTimes samples
  • New cmd line option: SampleConsoleClient '-m' to define monitoredItems from command line
  • New example of sending normal events in SampleConsoleServer - see the Tutorial for an updated description of events and conditions

01.06.12

Version 1.3.2

1.3.2 (in old release notes format)

This is an update release, with some fixes and improvements. It improves especially the reconnect handling on the client side and also timeout vs. memory handling on the server side.

A few important certificate issues are also improved (in the Java stack).

OPC Foundation Java Stack changes

  • Stack Build 314.2
  • New: ExpandedNodeId.parseExpandedNodeId()
  • New: UnsignedShort.parseUnsignedShort()
  • New: StackUtils.logStatus()
  • New: StackUtils.logStatus()
  • New: StackUtils.get/setDefaultMaxBlockingWorkerThreadPoolSize()
  • New: StackUtils.get/setBlockingWorkerThreadPoolCoreSize() & get/setBlockingWorkerThreadPoolTimeout()
  • New: StackUtils.get/setUncaughtExceptionHandler()
  • New: StackUtils.newNamedThreadPool()
  • Fixed: Support for 2048 bit keys
  • Fixed: EndpointUtil.select when endpointUrl==null
  • Fixed: Do not retry the reading of first value from socket
  • Fixed: BASIC256 KeyDerivationLength
  • Renamed: NodeId.parseNodeId() from decode() [deprecated],
  • Fixed: CertificateUtils.loadFromKeyStore to always try Sun provider first (may fail with others) and to use password for both key store and key (in case of BC, for example)
  • Fixed: EndpointUtil.createUserNameIdentityToken, when the server does not provide any Nonce
  • Changed: Enable alternate hostNames for the certificates

Changes to both SDK Client and Server

  • Fixed: NPE from PkiFileBasedCertificateValidator.validate(null, ...)
  • Changed: DataTypeConverter.parseVariant to raise IllegalArgumentException or NullPointerException (and doc updated)

Changes to SDK Client

  • Changed: UaClient.reconnect() to return true if the session could be reused
  • Changed: UaClient.addSubscription() returns Subscription instead of SubscriptionBase
  • New: ConnectException, raised from UaClient.connect() and reconnect() instead of ServerConnectionException
  • New: Subscription.set/getRetransmissionEnabled() - to optionally disable Republish altogether
  • Fixed: NullPointerException from UaClient.reconnect() if session did not exist (e.g. status read failed due to server error)
  • Fixed: UaClient.reconnect() did not always recreate the subscriptions properly
  • Fixed: Improved handling of Republish, in case the server no longer has the missing notifications - at some occasions the subscriptions stopped receiving data
  • Fixed: UaVariableImpl failed with array data - and contained some "invalid" server side code
  • Fixed: AddressSpace.setMaxReferencesPerNode() was not effective - changing default also to 1000 from 0
  • Fixed: historyRead must be called with releaseContinuationPoints=false for the first time (misinterpreted in all convenience methods)

Changes to SDK Server

  • New: UaServer.addEndpointHost() (published)
  • New: UaServer.is/setUseHostName()
  • New: UaServer.is/setUseCanonicalHostName()
  • New: UaServer.getEndpointSecurityLevel() (published)
  • New: SubscriptionManager.MaxRetransmissionQueueSize (default 10)
  • New: NodeManager.isOfType()
  • New: MonitoredItem.getServiceContext()
  • Fixed: ServiceManagerBase.checkDataType to check parent datatypes as well
  • Fixed: Synchronize access to MonitoredItem.node property
  • Fixed: NPE from ServerNode.registerOverridePlainMethod if the typeDefinition is not a "valid" node
  • Fixed: PublishRequestQueue & the handler thread were not removed at session close
  • Fixed: UaExternalNode to silently ignore access to SuperType property
  • Fixed: Session did not handle browse continuation points properly in all cases
  • Changed: Generation of InitialValue of monitored items (to always use IoManager)

Changes to the Sample applications

  • New: Another filter example to SampleConsoleClient
  • New: SampleConsoleClient -u userName -p passWord (from cmd line)
  • Fixed: SampleConsoleServer.eotsNode renamed back to myLevel
  • Fixed: MyBigNodeManager did not remove monitoredItems properly
  • New: SampleConsoleClient readHistory Sample
  • Changed: SampleConsoleServer to use all hostNames in the certificate

25.04.12

Version 1.3.0

1.3.0 (in old release notes format)

This is a new minor release, with some new features and improvements.

This release includes a lot of fixes due to interoperability testing, especially the Server SDK has a huge number of details which have been corrected while running the Compliance Test Tool (CTT) tests, defined by the OPC Foundation.

This release raises the level of compliance to a very high level and we hope to receive a full Tested status for the SDK later on. The CTT is still under development to finish the Base Profile tests and we will continue the tests as the tool and test scripts evolve.

On client side, communication breaks are now handled automatically with a proper reconnect sequence, which also ensures that all subscription notifications are handled and "republished" if some packets are missed.

This version of the SDK also supports Android development for the Android Dalvik virtual machine. Version 2.3.3 (Phone) and 3.0 (Tablet) onwards are supported, only without security, though.

OPC Foundation Java Stack changes

  • version 1.01.313.6
  • Fixed: EndpointDiscoveryService details
  • New methods: .parseXxx
  • Fixed: UnsignedInteger/UnsignedShort.compareTo
  • Encoding of a few StructureTypes, which were hard-coded
  • Useless SecurityMode constants removed
  • etc.

Changes to both SDK Client and Server

  • Improved: DataTypeConverter, parseVariant to support more types
  • New: Support for PEM files for private keys - new self-signed private keys are saved as PEM by default now - used internally in ApplicationIdentity.loadOrCreateInstanceCertificate, for example
  • Changed: various certificate related exceptions in SecureIndentity and ApplicationIdentity changed to SecureIdentityException (wrapping the original)
  • Changed: Subscription.MaxKeepAliveCount is now 20, was 5

Changes to SDK Client

  • Changed: UaClient.reconnect() to work according to the OPC Foundation specifications (first, try to renew the secure channel and reactivate the session. If it fails, recreate the session)
  • New: UaClient.set/getAutoReconnect() to automatically call reconnect, when the server status changes to CommunicationFault: this is ON by default!
  • New: UaClient and Subscription use republish internally to re-request notifications that were missed (tracking the SequenceNumber of the notifications)
  • New: UaClient.set/getStatusCheckTimeout() (Default 10 s)
  • Changed: Default value of UaClient.StatusCheckInterval to 1 s (was 30 s)
  • New: UaClient.getServerState()
  • Changed: Default value of Subscription.KeepAliveCount to 20 (was 5)
  • Changed: SubscriptionNotificationListener.onDataChange to use MonitoredDataItem parameters instead of MonitoredItem
  • Changed: SubscriptionNotificationListener.onEvent to use MonitoredEventItem parameter instead of MonitoredItem - and added Subscription as a parameter
  • Fixed: SubscriptionNotificationListener.onEvent was never called
  • Changed: SubscriptionNotificationListener to use the Subscription parameters of type Subscription instead of SubscriptionBase
  • Fixed: AddressSpace.BrowseNext to accept several continuationPoints
  • Fixed: MonitoredItem.equals failed to verify that the items are in the same subscription! + a number of smaller fixes

Changes to SDK Server

  • Changed: NodeManager.hasNode() made abstract
  • Changed: SubscriptionManager.getMaxSubscriptionCount limits the number of subscriptions per session- not the total number
  • Changed: SubscriptionManager.isClosed() renamed to isRunning(); start() and close() changed to protected
  • Changed: ShelvingState of AlarmConfditionNode instances is no longer exposing the coplete structure with new nodes. Instead it is referring just to the type and the structure should be used from the type.
  • Removed: NodeManagerUaNode.set/getNodeIdFormat()
  • New: NodeManagerUaNode.set/getNodeIdDelimiter()
  • New: SubscriptionManager.set/getMaxPublishingInterval()
  • New: SubscriptionManager.set/getMinPublishingInterval()
  • New: Session.getSubscriptionCount()
  • New: ExclusiveLimitStateMachineType & ExclusiveLimitAlarmType.LimitState property added
  • Hidden: Session members that are to be used internally only
  • Fixed: Handling of requested SamplingInterval=-1 (do not revise)
  • New: Absolute Deadband handling in MonitoredDataItem
  • New: DataChangeTrigger handling in MonitoredDataItem (enable data changes of plain timestamp changes, for example)
  • New: SessionManager.set/getMaxBrowseContinuationPoints()
  • Fixed: Details of DiscoveryServer registration - fixing an unterminated thread issue at server shutdown
  • Fixed: UaServer.removeEndpoint
  • Fixed a big number of compliance details to satisfy the Compliance Test Tool, this includes a lot of error code changes for various incorrect input + a big number of smaller fixes

Changes to the Sample applications

  • New: SampleConsoleClient can take a "CmdSequence" from the command line
  • Do not disconnect at onShutdown
  • Changed: SampleConsoleServer reorganized to enable inheritance (static methods and members changed to non-static)
  • Renamed: DataItemsFolder to MyBigNodeManager in the sample
  • Fixed: DataType of the DataItems in MyBigNodeManager was not set
  • Fixed: UaServer.DiscoveryServerUrl updated to the actual one after success, to prevent additional warnings of the "changed" Url
  • New: StaticData folder including static data nodes to enable compliance testing

16.11.11

Version 1.2.2

1.2.2 (in old release notes format)

This is a new bug fix release, which also improves the performance of both the Client SDK and Server SDK with bigger amounts of data.

The Server SDK Tutorial includes a new chapter describing the custom NodeManager approach for providing data from a background system without using UaNode objects (see Chapter 11. MyBigNodeManager).

Changes to UA Java Stack

  • Build 311.2
  • Fixed: User/Password authentication without security (do not encrypt the password)
  • Fixed: AsyncResult.Listener must be reset when the result is ready
  • Fixed: SecureChannelTcp details to improve occasional errors under heavy load
  • New: NamespaceTable.nodeIdEquals to compare ExpandedNodeIds of different styles (namespaceIndex vs namespaceUri)

Changes to SDK Client

  • Changed: UaClient.disconnect() to use timeout of 60 s
  • New: UaClient.disconnect(timeout)
  • Changed: MonitoredEventItem to use UnsignedInteger.MAXVALUE and MonitoredDataItem to use 1 for default QueueSize, instead of 0. Fixes Interoperability with .NET SDK up to build 329.
  • Fixed: MonitoredItemNotifications were never released (due to the stack issue with AsyncListener)
  • Fixed: Add items to Subscription before calling createMonitoredItems (in case the first PublishResponse arrives before the call finishes)
  • Fixed: UaClient to read BuildInfo elements from servers that do not support the status structure
  • Fixed: Correctly define timeout with updateServerStatus to not interfere with other calls
  • Improved handling of monitoredItems: do not echo a modifyItems call when the server returns, for example a revised SamplingInterval
  • Fixed: UaClient.getSubscriptionById & hasSubscription when called with null
  • Fixed: UaClient.getSubscriptionId made thread safe

Changes to SDK Server

  • New: Overridable NodeManager.getBrowseName() & getDisplayName() & getTypeDefinition()
  • New: SampleConsoleServer includes MyBigNodeManager, which provides a sample implementation of a node manager that does not use UaNode objects
  • Fixed: Last sample was resent, if the subscription went to keepAlive mode.
  • Fixed: translateBrowsePaths to NodeIds with target in a non-UaNode NodeManager
  • Fixed: MonitoredEventItem robustness for handling the internal field data
  • Fixed: Subscription publishQueue logic refined.
  • Fixed: Last sample was resent, if the subscription went to keepAlive mode. + a number of smaller fixes

05.07.11

Version 1.2.0

1.2.0 (in old release notes format)

This is a new minor release, with some new features and improvements.

The SDK can now be used for server development without using the UaNode implementations. This enables more flexible and efficient design, especially when the server needs to serve a big number of node data.

Also filtering is now added to the server's MonitoredEventItem and creation of event filters is improved also on the client side with the ContentFilterBuilder

OPC Foundation Java Stack changes

  • version 1.01.310.6
  • Stack classes regenerated, updating especially the Historical Access types according to [UA Spec. Part 11 RC v1.01]
  • EndpointDiscoveryService to return a default URL, if no specific ones are found - enabling usage through NAT gateways/firewalls
  • New method: DateTime.parseDateTime
  • New members to Variant: isNumber, valueEquals, isComparable, compareTo
  • New static property: SecureChannelTcp.maxThreadPoolSize (if you wish to limit the max number of simultaneous threads used by the client stack)
  • etc.

Changes to both SDK Client and Server

  • Renamed DataTypeConverter.parseDateType to parseVariant
  • New: DataTypeConverter.convert & parseVariant versions which take Class as argument for the target type
  • The DataTypeConverter handles most of the type conversions, according to the Conversion Rules in [UA Spec. Part 4, Table 113]
  • New: EventData.setFieldValue
  • New: Support for UserIdentity with user certificates

Changes to SDK Client

  • Improved threading support with internal changes
  • Fixed: UaClient.updateServerStatus to handle ServerStatus=Null;StatusCode.GOOD
  • Fixed: UaClient.call, in the case that the server returns an empty array for diagnosticInfos
  • New: UaClient.historyDeleteAtTimes, historyDeleteEvents, historyDeleteModified, historyDeleteRaw, historyReadAtTimes, historyReadEvents, historyReadModified, historyReadProcessed, historyReadRaw, historyUpdateData, historyUpdateEvent, historyUpdateStructureData
  • New: ContentFilterBuilder, to enable event filter construction on the client side

Changes to SDK Server

  • Interface change!: CallableListener.onCall
  • Interface change!: MethodManagerUaNode.onCall
  • Interface change!: NodeManagerListener.onCreateMonitoredDataItem to take MonitoringFilter instead of AggregateFilter (which is a subtype)
  • Changed: NodeManager internals
  • Changed: CacheVariable.value initialized to Bad_WaitingForInitialData instead of Bad_NoCommunication
  • Changed: HistoryManager updated according to [UA Spec. Part 11 RC v1.01]
  • Interface change: HistoryManagerListener according to HistoryManager
  • Sample of the HistoryManager in SampleConsoleServer
  • Changed: UaVariableNode.updateValue to set SourceTimestamp=ServerTimestamp, if not defined
  • Changed: BaseEventType.SourceName equals to the DisplayName instead of BrowseName of Source by default
  • Changed: Variables initialized to StatusCodes.Bad_WaitingForInitialData instead of Bad_NoCommunication
  • Fixed: Added InputArguments to methods of the types
  • Fixed: ArrayDimensions and ValueRanks of inputArguments of methods
  • Fixed: ShelvingStateMachine.TimedShelve
  • New: MonitoredEventItem.filter() made public (so you can check whether an event would be filtered)
  • New: static property MonitoredEventItem.MaxQueueSize (which defaults to Integer.MAX_VALUE, instead of a fixed 100)
  • New: ContentFilterDefinition & FilterOperation, which implement basic ContentFiltering for MonitoredEventItem
  • New: ShelvedStateMachineType.timedShelveResetEnabled
  • New: AlarmConditionType.get/setInput
  • New: (NonExclusiveDeviationAlarmType.get/setSetpointt
  • New: SubscriptionManagerListener & SubscriptionManager.add/removeListener
  • New: UaServer.get/setDiscoveryServerRegistrationPeriod: defines how often the server will register itself to the DiscoveryServer if DiscoveryServerUrl is defined + a number of other internal optimizations to the server nodes + a number of smaller fixes

15.04.11

Version 1.1.2

1.1.2 (in old release notes format)

This is a new bug fix release, with some new features and optimizations. Memory consumption of a typical alarm node structure, for example, is reduced by 95%.

The SDK was also tested in the OPC Foundation Interoperability (IOP) Workshop - and fixed accordingly.

Changes to both SDK Client and Server

  • Interface change!: return type of UaNode.removeComponent() changed from void to UaNode
  • Interface change!: New: UaNode.addComponent
  • ApplicationIdentity.loadOrCreateCertificate to read private key from .pfx file (if present)
  • Fixed: MethodCallStatusException to include DiagnosticInfo

Changes to SDK Client

  • Fixed: Do not use SoftReferences for permanent nodes in NodeCache (caused DataTypeConverter to fail occasionally)
  • Fixed: UaNodeImpl.addReference was not creating inverse references correctly
  • Fixed: Changes in client.MonitoredItem trigger modifyMonitoredItem requests to the server
  • Changed: Log browse errors with Bad_NodeIdUnknown in AddressSpace.ReadReferences as warnings, instead of errors - some servers seem to return that for property nodes
  • Changed: return type of UaClient.historyRead to HistoryReadResult[]
  • New: UaClient.historyUpdate
  • New: UaClient.get/setSessionName
  • New: set/getMaxResponseMessageSize

Changes to SDK Server

  • Interface change!: NodeManagerListener.onModifyMonitoredDataItem takes a parameter of type MonitoredDataItem, instead of MonitoredItem
  • Changed: method nodes of all ConditionTypes point to the method defined in the type, instead of creating a new node for every instance
  • Changed: state and transition nodes of ShelvedStateMachineType point to the method defined in the type, instead of creating a new node for every instance
  • Changed: NodeManager internals changed to better enable custom node manager implementations without UaNode objects (requires still a bit more work)
  • Changed: MethodManager.checkInputArguments to return Bad_ArgumentsMissing + diagnosticInfo, if nr of inputArguments is incorrect - and Bad_TypeMismatch for arguments with incorrect datatype (used to return Bad_InvalidArgument for all errors)
  • Changed: ServerNode.addReference will add the target node of any hierarchical reference to the respective NodeManager, if it is not there already, releasing you from the need to call NodeManager.addNode or addNodeAndReference (see the sample code & tutorial)
  • Fixed: NodeManagerUaNode.browseNode did not use includeSubtypes parameter
  • Fixed: Discovery service did not work
  • Fixed: UaServer with empty ServerName did not work
  • Fixed: Missing parts of ServerType added
  • Fixed: Default array dimensions in variables
  • Fixed: MonitoredDataItem.SamplingInterval was not considered
  • Fixed: ModifySubscription did not work properly (i.e. publish time checks)
  • Fixed: Confirm method was not handled on EventManager level -> argument types were not checked
  • Fixed: AcknowledgableConditionType.Acknowledge & Confirm (which are the default implemntations) to return an error if eventId does not match with the latest eventId. Also Confirm cannot be called if the condition is not Acked
  • New: ServerNode, the new base class of all nodes, without any attribute data
  • New: InstanceVariable + descendants to reduce memory consumption of structural nodes
  • Tuned: ConcurrentHashMaps used to keep references in nodes, replaced by CopyOnWriteArrayLists to reduce memory consumption
  • Tuned: LocalizedTextMap
  • Tuned: fully using ReflectiveInstanceVariable/Property nodes instead of the heavy weight Cache or Plain versions
+ a number of other internal optimizations to the server nodes + a number of smaller fixes
30.11.10

Version 1.1.0

1.1.0 (in old release notes format)

This is a new major release. It completes the SDK Server development and includes the first official SDK Server.

The SDK Client also has some new minor features and some changes that may affect project code.

Changes to both SDK Client and Server

  • Interface change!: property UaInstance.TypeDefinition renamed to TypeDefinitionId and Type to TypeDefinition
  • Interface change! New: UaNode.removeComponent, getComponents, getForwardReferences, getInverseReferences
  • Fixed (feature introduced in 1.0.10): 'localhost' in ApplicationUri replaced with CanonicalHostName or HostName (incl. domain name): recreate your server certificate as well (just remove the old files)!

Changes to SDK Client

  • Changed: UaClient.getServerStatus() throws ServerConnectionException instead of returning null, if not connected
  • New: UaClient.sessionlessRequest
  • New: UaClient.getEndpoint
  • Fixed: MonitoredItem.QueueSize & MonitoredDataItem.SamplingInterval were not revised according to the results from the server
  • Fixed: New PublishRequests were not sent to replace the received notifications, causing problems with faster than 1 sec publishingIntervals
  • Changed: AddressSpace.getNode will always call readReferences

Changes to SDK Server

  • New: ServerCapabilitiesType, available from UAServer.getNodeManagerRoot().getServerData().getServerCapabilities()
  • New: ServerDiagnosticsType and all the related types, as well as basic information about these
  • New: ServerType.Auditing & ServiceLevel
  • New: SubscriptionManager.max/minPublishInterval
  • New: SessionManager.max/minSessionTimeout
  • New: ServiceManagerBase
  • New: UaServerListener
  • New: HistoryManager (capability moved from IoManager)
  • New: UaServer.registerServer & discoveryServerUrl
  • New: Shelving support to AlarmConditionType
  • Refactoring: NodeManager inherits from ServiceManagerBase, instead of ServiceHandler - and it is constructed with UaServer, instead of NodeManagerTable & SessionManager
  • Renamed: NodeManagerUaNodeListener to NodeManagerListener and made it available from NodeManager. Also modified method signatures, to include NodeId parameters, in addition to UaNode ones, and to use MonitoredDataItem type, instead of MonitoredItem, where applicable.
  • Fixed: ModelParser issues related to the initialization of standard types
  • Fixed: DiscoveryService
  • Fixed: UaTypeNode.setSuperType assured from afterAddReference
  • Fixed: UaServerReference.equals()
  • Fixed: onModifyMonitoredItem listeners can now throw a StatusException to prevent modification
  • Fixed: Disconnecting clients now properly removes the MonitoredItems
  • Fixed: Limit states are now properly added for NonExclusiveLimitAlarmType
  • Fixed: Revised values for MonitoredItem.QueueSize & MonitoredDataItem.SamplingInterval were not returned to the clients
  • Tuned: ConcurrentHashMap of BaseNode to reduce memory consumption

+ a number of smaller fixes


03.09.10

Version 1.0.10

1.0.10 (in old release notes format)

This is a new minor release, including minor changes to the SDK Client.

This is also the final beta release of the SDK Server.

Changes affecting both SDK Client and Server

  • UaNode interface changes!
  • Changed: UaNode.addReference, addProperty & deleteReference return UaReference
  • Removed: UaNode.getComponent(String), getMethod(String), getProperty(String) - better to use the QualifiedName-versions of these
  • New: UaNode.getAttributes
  • Fixed: UaTypeImpl is abstract

Changes to SDK Client

  • Changed: UaClient does not validate certificates if SecurityMode=None
  • New: UaClient.set/getSessionTimeout
  • Fixed: Default queueSize of MonitoredEventItem

Changes to SDK Server

  • New package: server.nodes.opcua
  • MOVED: All type implementation that refer to UA types defined in the UA specification (e.g. everything from server.conditions & server.events) moved to server.nodex.opcua package
  • Changed: 'localhost' in ApplicationUri replaced with CanonicalHostName (incl. domain name): recreate your server certificate as well (just remove the old files)!
  • Changed: BaseNode.createNodeId uses '_' instead of '.' as the separator - affecting nodeIds of condition properties and components, for example: 'myAlarm_AckedState' instead of 'myAlarm.ActiveState'
  • Changed: MethodManager is an abstract class, instead of interface
  • Changed: UaVariableNode sets typeDefinition to PropertyType, if the node implements UaProperty
  • Changed: NodeManagerUaNodeListener
  • Changed: EventManagerListener
  • Renamed: NodeManagerUaNodeListener.onModifyMonitoredItem to onModifyMonitoredDataItem
  • Renamed: NodeManagerUaNodeListener.onDeleteMonitoredItem to onDeleteMonitoredDataItem
  • New: EventManagerListener.onAfterCreate/Modify/DeleteEventItem
  • New: NodeManagerUaNodeListener.onAfterCreate/Modify/DeleteDataItem
  • Removed: EventManagerUaNode.hasMonitoredEventItems (it never worked; use BaseEventType.isMonitoredForEvents)
  • Moved: UaObjectNode.getComponent to BaseNode
  • Renamed: EventManager.getMonitoredConditions to getConditions
  • Removed: UaNodeFactory.createNode(, ...); use the NodeClass versions instead
  • Renamed: UaNodefactory.registerNodeClass(typeDefinitionId) to registerTypeDefinition
  • New: PlainVariable & PlainProperty
  • New: MethodManager.checkInputArguments - used by the EventManager(s)
  • New: BaseNode.getForwardReferences & getInverseReferences
  • New: BaseNode.initNodeVersion (must use this before incNodeVersion)
  • New: SessionManager monitors session timeouts
  • New: UaServer will add an endpoint using the CanonicalHostName (incl. domain name) as well (always)
  • New: DataAccess types as predefined nodes, see DataItemType, etc.
  • Fixed: queueSize of MonitoredEventItem
  • Performance improvements
+ a number of smaller fixes
16.07.10

Version 1.0.8

1.0.8 (in old release notes format)

This is a new minor release, including minor changes to the SDK Client. The SDK Server is still going through heavier changes, and continues the beta development cycle. Most of the server functionality is now in place, but there are still some changes and missing issues that are waiting to get solved before the final SDK Server release.

Changes affecting both SDK Client and Server

  • Tutorials updated!
  • Separated client and server node hierarchies, also applies to node factories and references
  • DataTypeConverter access changed from static to instance based, on client side it is available as UaClient.getAddressSpace().getDataTypeCoverter(), and on server side as NodeManagerRoot.getDataTypeConverter() - so it is using the infomation of the available address space for conversion, instead of a statically initialized hierarchy
  • PkiFileBasedCertificateValidator Only return Bad_CertificateUntrusted, if other checks succeed.
  • PkiFileBasedCertificateValidator Only add the certificate to the rejected folder (and list) if it is not already in in trusted (=certs) folder (and list)
  • Fixed: UaView extends UaNode
  • EventListener.onEvent(UaInstance, EventData) changed to onEvent(UaNode, EventData) - events can be triggered for any node
  • Changed: UaNodeFactory changed to interface (with implementations in UaClientNodeFactory & UaServerNodeFactory)

Changes to SDK Client

  • Node implementations moved to com.prosysopc.ua.client.nodes (interfaces are still in com.prosysopc.ua.nodes)
  • New: UaClient.getEndpointConfiguration
  • New: UaClient.getSecureChannel
  • New: UaServer.ServerData.ServerStatusData.setState
  • New: UaClient.getLastResponseTimestamp
  • Removed: DataChangeListeners and EventListeners removed from UaInstanceImpl (used only on the server side)

Changes to SDK Server

  • New node model on the server side: server side node implementations are now in package com.prosysopc.ua.server.nodes
  • New interface ServerNode, which all server side nodes implement
  • All server side nodes require a valid NodeManager reference (already) in the constructor
  • Reduced number of convenience constructors in server nodes
  • Server references now require both source and target nodes (if no actual node available, UaExternalNode must be used)
  • HasNotifier reference added to Server object automatically for every top-level event notifier node
  • SubscribeToEvents set automatically in EventNotifier
  • Subscription handling reworked: performance issues tackled and functionality improved
  • Improved implementation of the Discovery service
  • ServiceContext properties added + isTimeout method
  • Renamed standard types (mainly the consition types) according to specification, e.g. UaFolder to FolderType, UaConditionType to ConditionType, etc.
  • UaBaseEventType moved to package com.prosysopc.ua.events & renamed to BaseEventType (see previous)
  • BaseEventType.setSource accepts UaView or UaObject
  • New: BaseModelChangeEventType, GenericModelChangeEventType, SemanticChangeEventType
  • New: NodeManagerRoot.beginModelChange, endModelChange, getModelChangeEvent, addModelChange
  • UaVariableNode initialized to StatusCode=BAD
  • Fixed: EventManagerUaNode handles method calls with the common NodeIds, e.g. Identifiers.AcknowledgeableConditionType_Acknowledge
  • New: BaseEventType.isMonitoredForEvents()

UA Stack changes

  • Fixed: ServerChannel renewal (did not work)

17.06.10

Version 1.0.6

1.0.6 (in old release notes format)

This is a new minor release, including minor changes to the SDK Client. The SDK Server is still going through heavier changes, and continues the beta development cycle.

Changes affecting both SDK Client and Server

  • Fixed (internal): PkiFileBasedCertificateValidator to use the thumbprint of certificates as hash key - enabling different implementations of Cert/PublicKey to be compared
  • EventData moved to com.prosysopc.ua package

Changes to SDK Client

  • Fixed: UaClient did not send the ApplicationDescription correctly to the server (also affects the verification of Client certificates - the applicationURI - in servers)
  • Changed: UaClient.certificateValidator moved to UaApplication

Changes to SDK Server

  • Removed: UserValidator.onSupportsIdentityChange
  • Fixed: Events are now also sent to nodes up in the hierarchy (via inverse HasNotifier/HasEventSource/HasCondition references), instead of just the triggered node
  • Fixed: Condition commands did not define InputArguments
  • Fixed: CacheProperty did not initialize TypeDefinition
  • Fixed: UaOffNormalAlarmType did not expose NormalState property - and could not be used
  • New: UaApplication.certificateValidator available for UaServer as well
  • New: validationListener - to override problems with applicationUri checks for client certificates
  • New: SessionManagerListener (renamed from SessionCloseListener + improved)
  • Changed: IoManager reworked
  • New: IoManagerListener, IoManager.HistoryListener
  • New: EventManagerUaNode.getMonitoredConditions
  • New: EventManager.hasMonitoredEventItems
  • New: EventManager.addListener changed to setListener (single-cast)
  • Changed: Several EventManagerListener methods changed to return boolean result
  • New: UaServer.getEndpoint
  • New: UaServer.addEndpoint
  • New: UaServer.removeEndpoint
  • New chapters in Tutorial for IoManager & MethodManager + changes to EventManager - all are described using listeners instead of derived classes

UA Stack changes

  • Server side error handling: sending the ServerFault's correctly on internal errors, enabling the client side to report the error without waitinng for the timeout
  • TcpConnection/Read fixed for BigEndian systems
  • New: UaConditionType.get/setComment

18.05.10

Version 1.0.4

1.0.4 (in old release notes format)

This is a new minor release, including minor changes to the SDK Client. The SDK Server is still going through heavier changes, and continues the beta development cycle.

Changes affecting both SDK Client and Server

  • New (overload): UaNode.deleteReference(UaNode, ..., ...)
  • Fixed: UaNode.deleteReference(NodeId, ..., ...)
  • Fixed: UaNodeMap.remove
  • New constructor (overload): PkiFileBasedCertificateValidator(String baseDir)
  • Changed: UaReference has now both SourceNode & TargetNode (and the respective Ids) - enables sharing the same object being used and thus better tracking of the references in both ends
  • Changed: UaReference.getIsInverse(...) takes now a node parameter, which gives the direction from which you are looking at the reference (since that is no longer implicit)
  • New: UaExternalNode (still somewhat experimental, mostly on the server side)

Changes to SDK Client

  • Changed: UaClient(string) and UaClient.setUri() throw URISyntaxException
  • Fixed: UaNodeCache.remove
  • Changed: Check that the server certificate is provided if using security
  • Fixed: Do not use the certificate validator, if the server certificate is not provided and raise an error if other than None security is used (the stack also fixed to not check the certificate with None security)
  • Improved: UaClient internal members (most important) to use thread-safe atomic references, etc.
  • The removeItem methods in SubscriptionBase & Subscription were all mixed up, and Subscription.removeItem was not called at all, if the incorrect version (any from SubscriptionBase) was used. Also modified the signatures of these methods. Sample of removing also available in SampleConsoleClient.
  • New: AddressSpace.readReferences
  • New: AddressSpace.readComponents
  • New: UaNode.getComponent
  • New: UaNode.getMethod
  • SampleConsoleClient requests the URI, if you run it without parameters

Changes to SDK Server

There are quite heavy changes in several aspects of the server SDK. The common interface and the SampleConsoleServer have only gone through minor changes, though. Most of the changes are related to making the event subscriptions work

  • Changed: NodeManagerRoot folder properties are of type UaObject (was UaNodeImpl)
  • New (overload): NodeManagerUaNode.addReference(NodeId, ExpandedNodeId, ...)
  • New: UaConditionType.triggerEvent works now - the type changed remarkably
  • New: Handles MonitoredEventItems
  • New: PlainMethod
  • New: CallbackVariable & CallbackProperty
  • New: ReflectiveVariable & ReflectiveProperty
  • Changed: EventManager, EventManagerUaNode, EventManagerListener - major changes
  • Changed: MethodManager, MethodManagerUaNode, major changes
  • Changed: NodeManagerUaNode, major changes
  • New: NodeManagerUaNodeListener
  • SampleConsoleServer simulates an alarm and shows how to validate users and check user rights with NodeManagerUaNodeListener

30.03.10

Version 1.0.2

1.0.2 (in old release notes format)

This is the first version to include both Client and Server development capabilities in Prosys OPC UA Java SDK.

SDK Server is now at first official BETA. SDK Client has a couple of important updates.

SDK SERVER!

There is also a Server Tutorial, which will help you to the beginning, with a SampleConsoleServer application that demonstrates how the SDK is designed to help you creating your own server applications.

There are still plenty of things to do in the server side, but we are very happy with the current status already, and you can start designing your own servers based on that. Be prepared to changes coming along - and note that not all of the features are there yet, even if it looks like it :)

SDK CLIENT updated!

SDK Client release 1.0 has also been updated, and we recommend that you switch to the new release. The changes are mostly minor, but there are some breaking changes. See the list below.

The Client Tutorial has also been updated accordingly.

* Changes in SDK Client:

  • UaClient.getSubscription(UnsignedInteger) renamed to getSubscriptionById to distinguish from getSubscription(int) which has a different meaning
  • NodeMap.getNodeFactory made available
  • MAJOR: UaClient verifies the server certificate against the ApplicationURI of the server (automatically) - version 1.0 required you to define the EndpointUrl for the validator - and that was not the correct URL
The certificates are also created with the URL and therefore the initialization of the ApplicationIdentity has changed - BE SURE TO MODIFY your application initialization according to the new SampleConsoleClient.

Note that a similar fix is also coming to other UA SDKs and products. For example, Unified Automation applications will use ApplicationURI in the March releases. So the currentversions of other application may complain about your certificates and your applications will not accept certificates of other applications (if you are using the validator similar to SampleConsoleClient) . But nevertheless, things will settle and we are on the right track now.

  • New: UaCertificateValidator (which extends the default CertificateValidator)
  • Changed: UaClient.certificateValidator is of type UaCertificateValidator (was CertificateValidator)
  • New: ApplicationIdentity.loadOrCreateCertificate takes ApplicationDescription
  • Changed: PkIFileBasedCertificateValidator.validate takes ApplicationDescription or even ApplicationIdentity
  • Changed: CertificateValidationListener.onValidate signature changed, ApplicationDescription included as parameter

22.02.10

Version 1.0.0

First release version