1. Tom Mills
  2. PowerBuilder
  3. Thursday, 17 August 2017

Hi,

I posted this on the SAP forums, but this looks like the place to be.

We're in the process of refactoring a large PowerBuilder application with the goal of keeping our business logic in PB and exposing it as an API for .NET developers by using the .NET assembly target.  We are currently working in PowerBuilder 12.6 Classic, but have played around with the trial for PowerBuilder 2017.

The environments we need to support include multi-threaded environments like IIS and xUnit. In using xUnit (which defaults to running tests in parallel), we've encountered an issue where database connections made on separate threads are interfering with each other. We've also reproduced this issue from a multi-threaded .NET console application, so we're expecting it to be an issue under IIS as well.

We've created a very simple .NET assembly that just exposes a connection nvo that wraps a native PB transaction stored as an instance variable in the class. We are not using SQLCA or any global variables. The connection object just has connect and disconnect methods. We import this assembly into a .NET xUnit project, create three separate test classes where each runs a test that instantiates a local connection instance and loops ten times, just connecting and disconnecting with each iteration.

If we force xUnit to run tests serially, we can repeatedly run all tests without issue. If we let xUnit parallelize the execution of the three test classes, we get random errors. Sometimes after connecting we'll get a "transaction not connected" exception when immediately trying to disconnect or when attempting to connect we'll get a "transaction already connected" exception. Sometimes everything works fine.

We've tried this with different database interfaces - SNC, ODBC, ADO.Net - and they all exhibit the same behavior.  We've tried this in PB 12.5 Classic, PB 12.6 Classic, and PB 2017.  All show the same problem.

I guess our first question is: this should be possible correct? I'd imagine others have successfully used PB Classic's .NET assemblies from within an environment like IIS?

Assuming this should be possible, I have a sample that demonstrates the issue (didn't see an option to upload here) or I can provide the main source files to demonstrate the issue.


Thanks for any insight or help you can give.
Tom

Chris Pollach Accepted Answer Pending Moderation
0
Votes
Undo

Hi Tom;

  Suggestion:  Could you upload your example APP to something like Google Drive and then post the download link for that here on the forum?

Thanks ... Chris

Comment
Hi Chris,



I put a folder containing the project here:



https://drive.google.com/open?id=0B-5Zv2IK2M0GcG9ma0h2OXUzWVk



The primary project I've worked with is the xUnit one.  One of our other developers created a multi-threaded VS console app that demonstrates the issue also just to rule out xUnit.  I placed that up there as well.



The PB app in the xUnit project is a PB12.6 Classic project, but it migrates cleanly to PB 2017 and shows the same issue there.  The Visual Studio project is for Visual Studio 2017.



This took me a while to figure out, so I'll mention it here: To get xUnit to run tests serially, you need to add some stuff to your app.config file:











These are already in the app.config file for the xUnit project but are commented out. If you uncomment them, you can "Run All" the tests serially again and again without issues.



Also, in the Tests.cs file, there is a static ConnectionInfo class where you can specify a database server and credentials.



Finally, note that on a fast machine the issue is hard to reproduce.  I had to use a program called Prime95 to slow down my machine enough to be able to see the issue.  I just repeatedly click the "Run All" button in VS's Test Explorer to get the behavior to surface.  On slower machines here though it could be easily reproduced without any extra load on the processor.



This is becoming a showstopper for us, so any help you can give us is greatly appreciated.  We're submitting a case to SAP shortly, and are in the process of acquiring PB 2017 (I've been using the trial so far) to get on active maintenance so we can submit one to Appeon as well.  I'm hoping its just something we're doing incorrectly though.



Let me know if you need anything else,



Tom  



 

  1. Tom Mills
  2. Friday, 18 August 2017
There are no comments made yet.
  1. Friday, 18 August 2017
  2. PowerBuilder
  3. # 1
Lars Mosegaard Accepted Answer Pending Moderation
0
Votes
Undo

I have absolutely no idea...  but it could be a test configuration setting that causes the conflicting level of parallelism between instances:

https://xunit.github.io/docs/running-tests-in-parallel.html

 

Comment
Hi Lars,



Thanks for the reply.  Since we see the same issue under a threaded .NET console application though, it doesn't seem to be something specific to xUnit, but threaded applications in general.



Tom

  1. Tom Mills
  2. Friday, 18 August 2017
There are no comments made yet.
  1. Friday, 18 August 2017
  2. PowerBuilder
  3. # 2
  • Page :
  • 1


There are no replies made for this question yet.
However, you are not allowed to reply to this question.