Project

General

Profile

Bug #5440

finish DatabaseManager refactoring for implicit/explicit connections

Added by Eric Faulhaber almost 3 years ago. Updated over 2 years ago.

Status:
New
Priority:
Normal
Assignee:
-
Target version:
-
Start date:
Due date:
% Done:

0%

billable:
No
vendor_id:
GCD
case_num:
version:

Related issues

Related to Database - Feature #3930: allow session level control over the database(s) which are auto-connected Closed

History

#1 Updated by Eric Faulhaber almost 3 years ago

Issue #3930 added session level control over database connections (in the 4GL sense, not the JDBC sense). These connections are similar to explicit connections made by the 4GL CONNECT statement, but they occur implicitly when a session (i.e., user context) begins, and are terminated implicitly when that session ends. Explicit connections and disconnections are still possible, as before. In fact, these two types of connections should be the same in every sense, except their implicit/explicit nature.

The new implementation left behind an internal distinction between implicit and explicit connections which needs to be cleaned up. Both types of connections should be accounted for the same way internally, and should be cleaned up properly, whether the disconnect occurs:

  • explicitly (via DISCONNECT statement);
  • implicitly by session termination, whether or not the original connection was made implicitly or explicitly (the latter case may occur if application code does not properly pair a DISCONNECT statement with its corresponding CONNECT statement).

#2 Updated by Eric Faulhaber almost 3 years ago

  • Related to Feature #3930: allow session level control over the database(s) which are auto-connected added

#3 Updated by Roger Borrello over 2 years ago

I had been attempting to configure a project for multiple databases, and had (incorrectly) configured the directory with:

    <node class="container" name="server">
      <node class="container" name="default">
        <node class="container" name="runtime">
          <node class="container" name="default">
            <node class="strings" name="database-connections.server">
              <node-attribute name="values" value="db1,db2,db3,db4,db5,db6,db7"/>
            </node>

I received the below... we should probably handle more gracefully.

[12/06/2021 10:25:52 EST] (com.goldencode.p2j.persist.DatabaseManager:INFO) Connecting to [db1,db2,db3,db4,db5,db6,db7]
[12/06/2021 10:25:52 EST] (ErrorManager:SEVERE) {0000000E:00000027:projAS1} stack trace follows
com.goldencode.p2j.persist.PersistenceException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
        at com.goldencode.p2j.net.RouterSessionManager.connectVirtual(RouterSessionManager.java:426)
        at com.goldencode.p2j.net.SessionManager.connectVirtual(SessionManager.java:730)
        at com.goldencode.p2j.persist.ConnectionManager.makeConnection(ConnectionManager.java:3492)
        at com.goldencode.p2j.persist.ConnectionManager.connect(ConnectionManager.java:3313)
        at com.goldencode.p2j.persist.ConnectionManager.connectDbImpl(ConnectionManager.java:2994)
        at com.goldencode.p2j.persist.ConnectionManager.connect_(ConnectionManager.java:663)
        at com.goldencode.p2j.persist.ConnectionManager.connect(ConnectionManager.java:564)
        at com.goldencode.p2j.persist.DatabaseManager.autoConnect(DatabaseManager.java:878)
        at com.goldencode.p2j.util.Agent.prepare(Agent.java:2555)
        at com.goldencode.p2j.util.Agent.listen(Agent.java:423)
        at com.goldencode.p2j.util.AgentPool.start(AgentPool.java:551)
        at com.goldencode.p2j.util.AppServerManager.startAppServer(AppServerManager.java:1482)
        at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:429)
        at com.goldencode.p2j.main.StandardServerMethodAccess.invoke(Unknown Source)
        at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:156)
        at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:783)
        at com.goldencode.p2j.net.Conversation.block(Conversation.java:422)
        at com.goldencode.p2j.net.Conversation.run(Conversation.java:232)
        at java.lang.Thread.run(Thread.java:748)
[12/06/2021 10:25:52 EST] (com.goldencode.p2j.persist.ConnectionManager:SEVERE) CONNECT failed
com.goldencode.p2j.util.ErrorConditionException: com.goldencode.p2j.persist.PersistenceException: java.lang.NullPointerException
Caused by: com.goldencode.p2j.persist.PersistenceException: java.lang.NullPointerException
Caused by: java.lang.NullPointerException
        at com.goldencode.p2j.net.RouterSessionManager.connectVirtual(RouterSessionManager.java:426)
        at com.goldencode.p2j.net.SessionManager.connectVirtual(SessionManager.java:730)
        at com.goldencode.p2j.persist.ConnectionManager.makeConnection(ConnectionManager.java:3492)
        at com.goldencode.p2j.persist.ConnectionManager.connect(ConnectionManager.java:3313)
        at com.goldencode.p2j.persist.ConnectionManager.connectDbImpl(ConnectionManager.java:2994)
        at com.goldencode.p2j.persist.ConnectionManager.connect_(ConnectionManager.java:663)
        at com.goldencode.p2j.persist.ConnectionManager.connect(ConnectionManager.java:564)
        at com.goldencode.p2j.persist.DatabaseManager.autoConnect(DatabaseManager.java:878)
        at com.goldencode.p2j.util.Agent.prepare(Agent.java:2555)
        at com.goldencode.p2j.util.Agent.listen(Agent.java:423)
        at com.goldencode.p2j.util.AgentPool.start(AgentPool.java:551)
        at com.goldencode.p2j.util.AppServerManager.startAppServer(AppServerManager.java:1482)
        at com.goldencode.p2j.main.StandardServer.standardEntry(StandardServer.java:429)
        at com.goldencode.p2j.main.StandardServerMethodAccess.invoke(Unknown Source)
        at com.goldencode.p2j.util.MethodInvoker.invoke(MethodInvoker.java:156)
        at com.goldencode.p2j.net.Dispatcher.processInbound(Dispatcher.java:783)
        at com.goldencode.p2j.net.Conversation.block(Conversation.java:422)
        at com.goldencode.p2j.net.Conversation.run(Conversation.java:232)
        at java.lang.Thread.run(Thread.java:748)

Also available in: Atom PDF