Question

IFS query concurrency, multiple call to database

  • 19 February 2021
  • 5 replies
  • 201 views

Userlevel 2
Badge +5

Hi,

 

We set up an application with a Java backend (using Java Access Provider), front in JS/PHP, requests are sent via ajax and we noticed some curious things :

  • When a single user login, (all ajax requests are async), the application will sometimes throw an bad credentials (comming from IFS Web logic) when user making an action (saving, loading, ...).
  •  When a single user login, (all ajax [for testing] requests are sync), the application won’t throw any bad credentials (comming from IFS Web logic) when user making an action (saving, loading, ...).
  • When two users use the app at the same time (async and sync requests) one of the user will have a bad credentials (comming from IFS Web logic) .

We are 99% sure that those errors are due to a concurrency in Oracle or WebLogic. The error occurs when multiple users are making the same request. The problem is weird because IFS should handle multiple connections (hopefuly) :joy:

We checked the value of Server variable passed to all request made : it’s the same. Each user have a different server of course but they are not altered during the backend proccess.

 

Is it a configuration problem in Oracle or WebLogic?

Thanks !

Antoine


This topic has been closed for comments

5 replies

Userlevel 3
Badge +10

Are you connecting via the IFS application server?  If so are you using the same IFS user every time?

Userlevel 2
Badge +5

Hey,
Hmm I guess so, here is a sample of my backend code which retrieve the user organization code :

Server server = new Server();
server.setConnectionString(ifsProperties.getConnectionString());
server.setCredentials(username, password); // Connected user credentials

PlsqlSelectCommand cmd = new PlsqlSelectCommand(server,
"SELECT COMPANY_ID, ORG_CODE, VALID_FROM, VALID_TO FROM &AO.COMPANY_PERS_ASSIGN_ACT WHERE EMP_NO = :EMP_NO AND :DATE BETWEEN VALID_FROM AND VALID_TO");

Record params = cmd.getBindVariables();
params.add("EMP_NO", user.getIdentity());
params.add("DATE", DateUtil.asDate(monday));
RecordCollection result = cmd.executeQuery();
// ...

It seems to be close of what I found in the documentation :rolling_eyes: Are we doing something wrong?

Userlevel 3
Badge +10

I am not sure that answers my question as I don’t know what Server is.  My original question was asking if you are logging into the application server or the oracle database. 

If the application server you may be running into a websocket limit on the application server.  It is not expecting that many connections from one device/client.  Have you checked the Main server logs on the application server?

If logging into the database then you might have a connection pool issue where the connections are not getting closed.  Or if you do not have the password saved off somewhere the connection string will purposely remove it after a valid connection is made.

 

Userlevel 2
Badge +5

Server is an object from the Java library published by IFS (Access Java Provider) Documentation here.

The PHP app contact the Java backend which contacts the IFS webLogic which make operations on Orace database. So I guess we are connecting to the application server.

 

We are looking for logs in weblogics and Oracle. It’s in progress.

 

Thanks for your help

Userlevel 3
Badge +10

Sub directories to check are:

wls_domain\<instance name>\servers\MainServer1\logs

instance\<instance name>\logs