16:59, EET
October 26, 2016
Hi,
I’m attempting to handle some program flow issues and am looking for some pointers for where should I should be looking.
(1) if my client application crashes after creating a subscription; how would I (a) determine if that subscription(s) are still active, and (b) terminate them? I’ll have lost my Client object.
(2) As an alternate path, is there a way to determine if the server already has a session with the same credentials and then kill that session (and one assumes its subscriptions) and restart it?
-Thanks
-Mark
17:55, EET
April 17, 2013
Hello Mark,
Are you aiming to delete the previous session and the associated subscriptions? Or is your aim to move the previous subscriptions to a newly created session?
Sessions are terminated by the OPC UA server automatically if the client fails to issue a service request within the timeout period. Also, each subscription has its own lifetime to protect against data loss in the case of a session termination. In Prosys OPC UA Java SDK, the default value of session timeout is one hour and the value can be set with UaClient.setSessionTimeout method. For Subscriptions, there’s a “requestedLifetimeCount” parameter that you can supply when creating the subscription. The default value is 60 meaning that 60 times publishing interval will be waited before subscription times out (relatively low value in my mind). For both parameters, the server actually decides what value it wants to use and returns the revised value as a response.
So, if you only want to delete the previous session and subscriptions, you can just set correct timeout values and let the server delete previous session and subscriptions.
On the other hand, if you would like to move the previous subscription to a new session, you can accomplish this with the TransferSubscriptions service. But if I understood correctly, this is not what you are looking for.
21:50, EET
October 26, 2016
Hi, thanks for the response.
I guess my first question is if my application is being restarted, is there any way to find a previous session?
If I can’t find it am I then relying on the subscription timing out?
Are there any issues with creating a second subscription that would basically replicate the first one?
-Thanks
-Mark
16:10, EET
April 17, 2013
Hi Mark,
No, in practice you won’t be able to use the previous session. That being said, I’m not completely sure if connecting to the previous session could be achieved in some ‘non-standard’ way by persisting the session data. Anyway, creating a new session is really what you should do in this situation.
You can rely on the fact that the server will remove the previous session once it timeouts.
As for the question “Are there any issues with creating a second subscription that would basically replicate the first one?”:
The short answer is that no, there’s no issues and you should do this. I would actually recommend that you just create new subscriptions if you have no special reason to do otherwise.
The longer answer is that the advantage of transferring subscriptions instead of creating new subscriptions is that notifications that the server sampled while client was unavailable are not lost. If the previous subscriptions are transferred to the new session and queues in the server were long enough, then the client can potentially be restarted without lost notification data.
However, if your application doesn’t need the notifications that were generated during the client restart, then you can just create new subscriptions. I guess this might use a little bit more resources in the server application as the server samples data for the old and new subscription simultaneously. This is however negligible and you can also influence this by setting a short timeout for subscriptions. The benefit in creating new subscriptions is that the client application will be simpler as you don’t have to persist the subscription id values that would be needed in the TransferSubscriptions service call.
Most Users Ever Online: 1919
Currently Online:
64 Guest(s)
Currently Browsing this Page:
1 Guest(s)
Top Posters:
Heikki Tahvanainen: 402
hbrackel: 144
rocket science: 88
pramanj: 86
Francesco Zambon: 83
Ibrahim: 78
Sabari: 62
kapsl: 57
gjevremovic: 49
Xavier: 43
Member Stats:
Guest Posters: 0
Members: 737
Moderators: 7
Admins: 1
Forum Stats:
Groups: 3
Forums: 15
Topics: 1524
Posts: 6450
Newest Members:
fannielima, kristiewinkle8, rust, christamcdowall, redaahern07571, nigelbdhmp, travistimmons, AnnelCib, dalenegettinger, howardkennerleyModerators: Jouni Aro: 1026, Pyry: 1, Petri: 0, Bjarne Boström: 1026, Jimmy Ni: 26, Matti Siponen: 346, Lusetti: 0
Administrators: admin: 1