Database Resident Connection Pooling (DRCP)

Hi there,
Im playing with DRCP on SLES but its not acting as I would expect. Given the lack of any hard info out there I thought I would check my understanding as its probably/possibly flawed!
I thought that with DRCP you would have lots of sessions in the database with a small pool of server processes (These are the "L000" processes).
If I set my pool to have a max-size of 3 for example then I can create TWO sessions (via SQLPLUS11g) using the POOLED processes (SERVER=POOLED).
The third process is used for "Authenitication". Ok. Fine. Good. All sessions are sat idle doing nothing and I can see in v$session and v$process that the sessions have picked up one of the "Lnnn" processes..
Now when I come to add another session , the create-session/connect from SQLplus hangs and waits for one of the other sessions to either time-out or be closed.
I thought DRCP would allow multiple sessions to share the same processes. Ie if session A is idle then its pooled server-process is released back to the pool - and hence would be available to be used by another session. IE a bit like shared-servers in well, Shared Server I guess!
If the above isnt the case then is this really "Pooling" or just a case of there being pre-spawned server processes knocking about to speed up connection requests?
Yours,
Bob

Hi,
I can't believe no-one else on this forum was not able to jump in while I was busy!
I wasn't aware of that OTN article I merely read the docco. However, having read this now and read your comments, I still don't get where you are coming from as (to me) the article just backs up what I think. But I could be wrong.
In fact to quote exactly what you've posted:
"Clients are persistently connected and authenticated to the Broker. Clients
request the Broker to provide pooled servers when they need to perform some database activity, use them, and then release them back for reuse by other clients."
I read this as clients get a connection from the broker, uses it and releases it. With emphasis on the client. So if the client hasn't released it, it's still got it.
"...The pooled server is handed back to the broker when the client releases it."
I mean again, emphasis on the client releasing it. If the client doesn't release it, it's still got it and so can't be used by any other client.
I do believe the diagram is misleading, it seems to imply that an idle (grey) client is just 'connected' to the broker, implying for a pooled connection to be back in the pool then the client just has to be merely idle rather than releasing it. The Busy/Idle w.r.t. DB activity doesn't help either as we all know a client can be connected but not doing anything with that connection. So I see how that can cause confusion.
The noddy little graph just shows to me a linear correlation between memory and pooled connections. What a suprise. This is exactly what I would expect. The more connections in your pool, the more memory you need.
Lastly, if the DRCP didn't work this way, it would work differently to every other connection pool I've ever met. With a connection pool governed by the mid tier, it opens a bunch of dedicated connections to the DB with a common username. The mid tier language (java, .nyet, whatever) makes it transparent that a connection is coming from this pool and normally makes it transparent to release them back (the developers never need know).
But as I said I could be wrong and I'm interested in what you find from the SR.

Similar Messages

  • Using Database Resident Connection Pooling

    Hi all,
    <br><br>
    In trying to use Database Resident Connection Pooling in Oracle 11g, here is what I have done:
    <br><br>
    SQL> conn / as sysdba
    Connected.
    SQL> exec DBMS_CONNECTION_POOL.START_POOL();
    PL/SQL procedure successfully completed.
    SQL> SELECT STATUS,MINSIZE,MAXSIZE,INCRSIZE,SESSION_CACHED_CURSORS,INACTIVITY_TI
    MEOUT
      2  FROM DBA_CPOOL_INFO;
    STATUS              MINSIZE    MAXSIZE   INCRSIZE SESSION_CACHED_CURSORS
    INACTIVITY_TIMEOUT
    ACTIVE                    4         40          2                     20
                   300<br>
    <br>
    In tnsnames.ora file, here is what I have put:<br>
    ORA11G =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = winxp)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = ora11g)
    ORA11GP =
      (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = winxp)(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = POOLED)
          (SERVICE_NAME = ora11g)
      )<br>
    <br>
    Now, in sqlplus in attempt to use DRCP, here is what I got:<br>
    SQL> CONN HR/HR@ORA11G
    Connected.
    SQL> CONN HR/HR@ORA11GP
    ERROR:
    ORA-28547: connection to server failed, probable Oracle Net admin error
    Warning: You are no longer connected to ORACLE.<br>
    <b>Is there anything I missed to properly use DRCP.</b>
    <br>
    Thanks in advance.

    According to Metalink note:
    Subject: Using DRCP and NTS Authentication Results in ORA-28547
    Doc ID: Note:563943.1 Type: PROBLEM
    Last Revision Date: 19-MAY-2008 Status: MODERATED
    this is a bug on Windows and you should configure client sqlnet.ora so that SQLNET.AUTHENTICATION_SERVICES=NONE.

  • DRCP Data resident connection pooling

    Hi,
    I have a quesiton form SR
    Please confirm do you use DRCP "database resident connection pooling" ?
    How do I determine if DRCP is enabled in my environment
    Could someone help. This is urgent
    Thanks,
    Prasad

    1. "select status from dba_cpool_info" (as SYSDBA)
    If it is 'ACTIVE', it means the DRCP on the server is up.
    Also, 'ps -ef | grep ora_l0', 'ps -ef |grep ora_n0' show you the pooled servers and connection brokers respectively
    2. lsnrctl services
    Instance "orcl11", status READY, has 2 handler(s) for this service...
    Handler(s):
    "N000" established:0 refused:0 current:0 max:5697 state:ready
    CMON <machine: abc386, pid: 8468>
    (ADDRESS=(PROTOCOL=tcp)(HOST=abc386.xyz.com)(PORT=28232))
    "DEDICATED" established:70 refused:0 state:ready
    LOCAL SERVER
    Shows the DRCP has registered with the listener and is ready for taking requests.
    3. Look at the connect string the application is using:
    poolstr = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = abc386.xyz.com)(PORT = 1522))) (CONNECT_DATA = (SERVICE_NAME = orcl11)(SERVER=POOLED)))
    4. While the application runs, see the DRCP stats: (as sysdba)
    select num_requests, num_hits, num_misses, num_authentications from v$cpool_stats
    a) if the num_requests is going up, the application is using the DRCP. Otherwise it is not.
    b) If num_misses is going up and not the num_hits, DRCP is being used, but the pooled servers are not being reused. Please check for PURITY and CONNECTION_CLASS attributes.
    For PHP, the purity is always SELF (reuse mode) and hence the num_hits should go up if oci_pconnect is repeated (for the same user from the same PHP.ini that has oci8.connection_class)
    For OCI application, please check the attributes being used or not.
    c) If NUM_AUTHENTICATIONS is going up, same as above. Please check the PURITY or if you are using oci_new_connect in PHP.
    5. See the rows from v$cpool_conn_info for all the connections from the clients to DRCP. Check documentation.

  • Database Resident Connection

    I was reading on Database Resident Connection pooling,
    http://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc002.htm
    it says,
    You cannot perform the following activities with pooled servers:
    Shut down the database
    But i enable the pooled with dbms_connection_pool.start_pool() and i was able to shutdown the database.
    Database 11.2.0.3 32bit...
    Any comment..

    842638 wrote:
    I was reading on Database Resident Connection pooling,
    http://docs.oracle.com/cd/E11882_01/server.112/e25494/manproc002.htm
    it says,
    You cannot perform the following activities with pooled servers:
    Shut down the database
    But i enable the pooled with dbms_connection_pool.start_pool() and i was able to shutdown the database.
    Database 11.2.0.3 32bit...
    Any comment..You should file a Bug Report.

  • How to access database from applet using connection pooling.

    Hi,
    I am using tomcat 4.1, JRE 1.4.2_10, MySQL 5.0, and IE 6.0. I can access the database using connection pooling from JSP without problems. But, if I try to acess from the applet, I get the following exception (related to JNDI.):
    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.lookup(Unknown Source)
    I know what this acception means, but I don't know how to fix it. I set up connection pooling in my Tomcat 4.1 that talks to MySQL 5.0. As I said, when I access from jsp, JNDI works. But, applet complains. Please help. In my applet, the following code accesses the database:
    ArrayList toolTipData =
          access.getToolTipData (projectName,interfac);This is the snipet of my Access class:
    public ArrayList getToolTipData (String projectName, String interfac) {
        System.out.println("In getToolTipData");
        ArrayList toolTipData = new ArrayList();
       try{
        Context ctx = new InitialContext();
        if(ctx == null )
            throw new Exception("No Context");
        DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/interfacesDB");
        if (ds != null) {
          Connection conn = ds.getConnection();
          if(conn != null)  {
              Statement s = conn.createStatement();
              //For some reason paramtized queries don't work, so I am forced
              //to this in slighly less eficient way.
              ResultSet rst = s.executeQuery("select * from interfaces");
              while (rst.next()) {
                 if (rst.getString("Project_Name").equals(projectName) &&
                     rst.getString("Interface").equals(interfac)) {
                   System.out.println("getToolTipData: ITG #" + rst.getString("ITG"));
                   toolTipData.add("ITG #: " + rst.getString("ITG"));
                   toolTipData.add("SPNE Prime Name: " +
                                   rst.getString("SPNE_Prime_Name"));
                   toolTipData.add("PD Prime Name: " +
                                   rst.getString("PD_Prime_Name"));
                   toolTipData.add("IT Prime Name: " +
                                   rst.getString("IT_Prime_Name"));
                   toolTipData.add("MLC Priority: " +
                                   rst.getString("MLC_Priority"));
                   toolTipData.add("Gary's Prime: " + rst.getString("Garys_Prime"));
                   toolTipData.add("QA Prime: " + rst.getString("QA_Prime"));
                   toolTipData.add("Brief Description: " +
                                   rst.getString("Brief_Description"));
                   toolTipData.add("Project_Status: " +
                                   rst.getString("Project_Status"));
              conn.close();
      }catch(Exception e) {
        e.printStackTrace();
      return toolTipData;
    ....

    The jsp runs on the server, whereas the applet runs on the client so
    you must package with your applet any jndi implementation specific classes
    and
    Properties props = new Properties();
    props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory" );
    props.setProperty("java.naming.provider.url", "url:1099");
    Context ctx = new InitialContext(props);
    Object ref = ctx.lookup("...");

  • Jdbc-odbc-bridge connection pool

    I got a problem with odbc connection pool in my Sun App Server 7.
    When i try to connect to the odbc database (msaccess or conzept16), i got a SQLException : com.sun.enterprise.repository.J2EEResourceException
    java.lang.NoSuchMethodException: setdatabaseName .....
    It seems that i cant set any propertys like url, user or password. The exception throws every time NoSuchMethodException: setURL or ... NoSuchMethodException: setUser
    I tried this with pointbase database and pointbase drivers and there was no problem. Also when i connect direct from jsp page to the odbc database without connection pool it works.
    How can i set a propper connection pool with the jdbc-odbc-bridge? Please Help. There is no jdbc driver for that database available.
    Is that right using sun.jdbc.odbc.JdbcOdbcDriver for that?
    here my server.xml
    <resources>
    <jdbc-resource enabled="true" pool-name="access-pool" jndi-name="jdbc/AccessDB"/>
    <jdbc-connection-pool steady-pool-size="2" max-pool-size="6" max-wait-time-in-millis="60000" pool-resize-quantity="2" idle-timeout-in-seconds="300" is-isolation-level-guaranteed="false" is-connection-validation-required="false" connection-validation-method="auto-commit" fail-all-connections="false" datasource-classname="sun.jdbc.odbc.JdbcOdbcDriver" name="access-pool" validation-table-name="TAB_NAME">
    <property value="jdbc:odbc:testdb" name="databaseName"/>
    </jdbc-connection-pool>
    </resources>

    AFAIK the bridge driver does not support multipleopen
    connections (which is what connection pooling
    requires).Wrong.
    It might be the case that the bridge AND ms access
    does not support that but I seriously doubt that as
    well.
    Yesterday I didn't want to test this. Today I did.
    So I can state that it is completely wrong.
    There might be some other reason preventing the usage in a pool, but it isn't the number of open connections.

  • Connection pool types

    Hi gurus,
    how many types of connection pool? i heard about some connection pool like super user,mega user,general but am not aware of that if any one please explain it what is it?
    Regards,
    Prabhu

    Basically, a connection pool is used to connect the OBIEE RPD to a database. It could be any data source varying from a database to a flat file. In more detail below:
    The connection pool is an object in the Physical layer that describes access to the data source. It contains information about the connection between the Oracle BI Server and that data source.
    The Physical layer in the Administration Tool contains at least one connection pool for each database. When you create the Physical layer by importing a schema for a data source, the connection pool is created automatically. You can configure multiple connection pools for a database. Connection pools allow multiple concurrent data source requests (queries) to share a single database connection, reducing the overhead of connecting to a database.
    For each connection pool, you must specify the maximum number of concurrent connections allowed. After this limit is reached, the connection request waits until a connection becomes available.
    Increasing the allowed number of concurrent connections can potentially increase the load on the underlying database accessed by the connection pool. Test and consult with your DBA to make sure the data source can handle the number of connections specified in the connection pool. Also, if the data sources have a charge back system based on the number of connections, you might want to limit the number of concurrent connections to keep the charge-back costs down.
    In addition to the potential load and costs associated with the database resources, the Oracle BI Server allocates shared memory for each connection upon server startup. This raises the number of connections and increases Oracle BI Server memory usage.
    868844 wrote:
    how many types of connection pool? i heard about some connection pool like super user,mega user,general but am not aware of that if any one please explain it what is it?Comming back to your question regarding different type of users in the connection pool, I believe you are talking about the user of the database and his priviliges. You will need to use a database account with create priviliges, if you want to be able to create tables, write back etc in the database. If it is all about reading the data from the database then all you need a regular database account with read priviliges.
    Hope your question is answered.
    Please award points if helpful.
    Thanks,
    -Amith.

  • How database connection pooling works in a application

    Hi Guys,
    I am new to Java and looking into best way of doing J2ee database conectivity. I am using Eclipse galileo3.5 J2EE with Mysql database and Tomcate 6.0.
    I am developing an email application where I need to implement MVC model for my webapplication, using jsp for presentation, servlet for control and java beans for model.
    I came across two tutorial for database connection pooling as given below.
    Eclipse Corner Article: Creating Database Web Applications with Eclipse - In this tutorial connection pooling is configure in Tomcate 6.0
    It says Copy and paste the following into your context.xml file (you may have to click on the Source tab at the bottom of the editor to be able to paste). This defines a DataSource with the name "jdbc/SampleDB". Our application will retrieve database connections from the pool using this name.
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
    <Resource name="jdbc/SampleDB" auth="Container"
    type="javax.sql.DataSource"
    username="app" password="app"
    driverClassName="org.apache.derby.jdbc.ClientDrive r"
    url="jdbc:derby://localhost:1527/sample"
    maxActive="8" />
    </Context>
    Where as in second tutorial - http://www.roseindia.net/answers/viewanswers/2838.html
    It uses java bean for connection pooling and then use straight way in JSP and no Servlet used.
    conpool.jsp
    <%@page import="java.sql.Connection"%>
    <jsp:useBean id="pl" class="com.CoreJava.ConnectionPooling"/>
    <% Connection con = pl.getConnection(); %>
    //do something using con
    connectionPooling.java
    import com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolD ataSource;
    public class ConnectionPooling
    static Connection con=null;
    public static Connection getConnection()
    try
    MysqlConnectionPoolDataSource po=new MysqlConnectionPoolDataSource();
    po.setServerName("localhost");
    po.setPortNumber(3306);
    po.setDatabaseName("mydatabase"); //changeur database name
    po.setUser("root");//ur username
    po.setPassword("");//ur password
    con = po.getConnection();
    catch(Exception e)
    System.out.println("Exception Connection :"+e);
    return con;
    Please some one explain which is the best way of doing connection pooling to the database by using MVC pattern
    Please if some one advise me how to use MVC architecture for simple email application and database connectivty.
    Thanks

    >
    >
    Where as in second tutorial - http://www.roseindia.net/answers/viewanswers/2838.html
    Never EVER use roseindia. It is terrible shit.
    [http://balusc.blogspot.com/2008/06/what-is-it-with-roseindia.html]
    The correct answer is what you found in the eclipse article. And you can read the Tomcat docs for more.
    As per usual the code you have posted from Roseindia is a big pile of rubbish that was written by a complete idiot. I mean the person who wrote it apparently doesn't know much Java at all. Let alone JDBC. Or Connection pools. Or J2EE. It's not the worst I've seen from them but it's pretty bad.

  • Proxy functionality in the database connection pool

    Hi,
    I am scouring the internet and forums looking for a way to connect to my database from the .rpd connection pool using proxy authetication. NOT Act-As proxy that is a BIEE feature, but RDBMS proxy authentication with BIEE acting as the middle-tier connecting on behalf of many users and authenticating to the RDBMS AS THE INDIVIDUAL USER. I haven't had any luck, and am hoping someone here has set up this same kind of access.
    We have a requirement to use SSO with BIEE to integrate with our portal and discoverer apps. We also have a requirement to use EUS (Enterprise User Security). EUS allows you to login to the database using the userids/password from OID. Note that the database doesn't support the SSO token, but it uses the same userid/password stored in OID for authenticating to the database. You still must initiate a connection to the database, but the authentication goes to LDAP. Every connection to BIEE may be using a different userid - we will not have a shared login.
    So the issue I see is:
    - We configure SSO
    - In the BI Server the :USER session variable is set (but NOT :PASSWORD, since BI Server didn't authenticate you it doesn't have the password)
    - We create a connection pool - This is where we hit the issue - we need each connection to BI Server to connect down to the database as the SSO user. Since we aren't using a shared account we can't enter a userid/password in this connection. We also can't user :USER and :PASSWORD since SSO doesn't set the :PASSWORD session variable. What I would hope to find is a checkbox "Proxy Authentication" (around where "Shared Logon" checkbox is located) that would connect to the database as the proxy user and then switch to the SSO user.
    This is what happens with BI Publisher. On the JDBC connection screen there is a "Proxy Authentication" checkbox.
    So, has anyone already solved this problem? Thanks!

    Hello, is there anyone knows what this program does
    and how this program is executed? There is nodatabase
    mentioned.That's because it's expecting the URL (which contains
    the database type, hostname, and so on) to be passed
    in on the command line (argv[0]), as well as the
    username and password (argv[1] and argv[2]).
    Thank you very much for your help.
    Regards,
    Lucas

  • Problem in getting the database connection from a connection pool

    Hai All,
    I am facing a problem in getting the database connection from a connection pool created on weblogic server 8.1.
    I am using the Oracle database 8.1.7.
    I have configured my connection pool, datasource and JNDI in weblogic.
    In my java program i have the following code to retrieve the connection.
    import java.sql.*;    
    import java.util.Hashtable;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    class jdbcshp1 {
        public static void main(String[] args) {
         Connection connection = null;
         try {
               Hashtable ht = new Hashtable();
               ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");  // Wanna get rid of this.
               ht.put(Context.PROVIDER_URL,"t3://localhost:7001"); // wanna get rid of this.
               // Get a context for the JNDI look up
               Context ctx = new InitialContext(ht);
            javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("myjndi1");
              //Create a connection object
              connection = ds.getConnection();
         The above code is working fine but, the two ht.put statements are creating problem.
    The problem is, after converting the application into WAR file it can be deployed
    on any machine or different port on same machine. My application fails if its deployed on
    weglogicserver which is at different port.
    Is there any way that i can get rid of those ht.put statements or any other way to solve the problem.
    any help is appreciated.
    Thanks in advance
    Pooja.

    Hai All,
    Firstly, thanks for ur reply.
    Even i have seen some code which uses context constructor with out any parameter and works fine.
    i dont understand why its not working for my code.
    When i remove those ht.put code and use context constructor with out any parameter, it giving an error.
    Context ctx = new InitialContext();
    javax.sql.DataSource ds = (javax.sql.DataSource) ctx.lookup ("ocjndi");
    connection = ds.getConnection();The error is as follows:
    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    the above error is forcing me to include those code but if the port number is changed the code will not work. Plz let meknow if some setting have to be made.
    I appreciate all ur valuable help.
    Thanks once again.
    Pooja.

  • Database log switch and WLS connection pool relation

    Hi,
    We have been facing WLS JDBC connection pool disable and suspension issue very frequently in our environment and as a work around have implemented multi-datasource configuration (fail over method).
    But we need to know the root cause for the same and want to fix the issue too.
    We have tried many options like increasing no. of processes and transaction on Database, fine tune the weblogic datasource but still we could not isolate the issue.
    Recently we have been advised to minimize the log switch on database front and increase the redo log size. Not sure if this will help in isolating the issue or not.
    So we are Looking forward for the comments and suggestions on what would be the relationship b/w datasource and log switch be and if someone have faced this issue and resolved the same by fine tuning the database and minimizing the log switch.
    We are using WLS 10.3.3.0
    -Rohit

    turn on jdbc logging. The server log should be showing the troubles WLS is having
    while testing connections and trying/failing to make replacement connections.

  • Connection pooling and auditing on an oracle database

    Integration of a weblogic application with an oracle backend,
    Connection pooling, and auditing ,2 conflicting requirements ?
    Problem statement :
    We are in the process of maintaining a legacy client server application where
    the client is
    written in PowerBuilder and the backend is using an Oracle database.
    Almost all business logic is implemented in stored procedures on the database.
    When working in client/server mode ,1 PowerBuilder User has a one-to-one relation
    with
    a connection(session) on the oracle database.
    It is a requirement that the database administrator must see the real user connected
    to the database
    and NOT some kind of superuser, therefore in the PowerBuilder app each user connects
    to the database
    with his own username.(Each user is configured on the database via a seperate
    powerbuilder security app).
    For the PowerBuilder app all is fine and this app can maintain conversional state(setting
    and
    reading of global variables in oracle packages).
    The management is pushing for web-based application where we will be using bea
    weblogic appserver(J2EE based).
    We have build an business app which is web-based and accessing the same oracle
    backend app as
    the PowerBuilder app is doing.
    The first version of this web-based app is using a custom build connector(based
    on JCA standard and
    derived from a template provided by the weblogic integration installation).
    This custom build connector is essentially a combination of a custom realm in
    weblogic terms
    and a degraded connection pool , where each web session(browser) has a one-to-one
    relation
    with the back end database.
    The reason that this custom connector is combining the security functionality
    and the pooling
    functionality , is because each user must be authenticated against the oracle
    database(security requirement)
    and NOT against a LDAP server, and we are using a statefull backend(oracle packages)
    which would make it
    difficult to reuse connections.
    A problem that surfaced while doing heavy loadtesting with the custom connector,
    is that sometimes connections are closed and new ones made in the midst of a transaction.
    If you imagine a scenario where a session bean creates a business entity ,and
    the session bean
    calls 1 entity bean for the header and 1 entity bean for the detail, then the
    header and detail
    must be created in the same transaction AND with the same connection(there is
    a parent-child relationship
    between header and detail enforced on the back end database via Primary and Foreing
    Keys).
    We have not yet found why weblogic is closing the connection!
    A second problem that we are experincing with the custom connector, is the use
    of CMP(container managed persistence)
    within entity beans.
    The J2EE developers state that the use of CMP decreases the develoment time and
    thus also maintenance costs.
    We have not yet found a way to integrate a custom connector with the CMP persistence
    scheme !
    In order to solve our loadtesting and CMP persistence problems i was asked to
    come up with a solution
    which should not use a custom connector,but use standard connection pools from
    weblogic.
    To resolve the authentication problem on weblogic i could make a custom realm
    which connects to the
    backend database with the username and password, and if the connection is ok ,
    i could consider this
    user as authenticated in weblogic.
    That still leaves me with the problem of auditing and pooling.
    If i were to use a standard connection pool,then all transaction made in the oracle
    database
    would be done by a pool user or super user, a solution which will be rejected
    by our local security officer,
    because you can not see which real user made a transaction in the database.
    I could still use the connection pool and in the application , advise the application
    developers
    to set an oracle package variable with the real user, then on arrival of the request
    in the database,
    the logic could use this package variable to set the transaction user.
    There are still problems with this approach :
    - The administrator of the database can still not see who is connected , he will
    only see the superuser connection.
    - This scheme can not be used when you want to use CMP persistence , since it
    is weblogic who will generate the code
    to access the database.
    I thought i had a solution when oracle provided us with a connection pool known
    as OracleOCIConnectionPool
    where there is a connection made by a superuser, but where sessions are multiplexed
    over this physical pipe with the real user.
    I can not seem to properly integrate this OCI connectionpool into weblogic.
    When using this pool , and we are coming into a bean (session or entity bean)
    weblogic is wrapping
    this pool with it's own internal Datasource and giving me back a connection of
    the superuser, but not one for the real user,
    thus setting me with my back to the wall again.
    I would appreciate if anyone had experienced the same problem to share a possible
    solution with us
    in order to satisfy all requirements(security,auditing,CMP).
    Many Thanks
    Blyau Gino
    [email protected]

    Hi Blyau,
    As Joe has already provided some technical advice,
    I'll try to say something on engineering process level.
    While migrating an application from one technology to
    other, like client-server to n-tier in you case, customers and
    stakeholders want to push into the new system as many old
    requirements as possible. This approach is AKA "we must
    have ALL of the features of the old system". Mostly it happens
    because they don't know what they want. Ad little understanding
    of abilities of the new technology, and you will get a requirement
    like the one you have in you hands.
    I think "DBA must see real user" is one of those. For this
    type of requirements it can make sense to try to drop it,
    or to understand its nature and suggest alternatives. In this
    particular case it can be a system that logs user names,
    login and logout times.
    Blind copying of old features into an incompatible new architecture
    may endanger the whole project and can result in its failure.
    Hope this helps.
    Regards,
    Slava Imeshev
    "Blyau Gino" <[email protected]> wrote in message
    news:[email protected]...
    >
    Integration of a weblogic application with an oracle backend,
    Connection pooling, and auditing ,2 conflicting requirements ?
    Problem statement :
    We are in the process of maintaining a legacy client server applicationwhere
    the client is
    written in PowerBuilder and the backend is using an Oracle database.
    Almost all business logic is implemented in stored procedures on thedatabase.
    When working in client/server mode ,1 PowerBuilder User has a one-to-onerelation
    with
    a connection(session) on the oracle database.
    It is a requirement that the database administrator must see the real userconnected
    to the database
    and NOT some kind of superuser, therefore in the PowerBuilder app eachuser connects
    to the database
    with his own username.(Each user is configured on the database via aseperate
    powerbuilder security app).
    For the PowerBuilder app all is fine and this app can maintainconversional state(setting
    and
    reading of global variables in oracle packages).
    The management is pushing for web-based application where we will be usingbea
    weblogic appserver(J2EE based).
    We have build an business app which is web-based and accessing the sameoracle
    backend app as
    the PowerBuilder app is doing.
    The first version of this web-based app is using a custom buildconnector(based
    on JCA standard and
    derived from a template provided by the weblogic integrationinstallation).
    This custom build connector is essentially a combination of a custom realmin
    weblogic terms
    and a degraded connection pool , where each web session(browser) has aone-to-one
    relation
    with the back end database.
    The reason that this custom connector is combining the securityfunctionality
    and the pooling
    functionality , is because each user must be authenticated against theoracle
    database(security requirement)
    and NOT against a LDAP server, and we are using a statefull backend(oraclepackages)
    which would make it
    difficult to reuse connections.
    A problem that surfaced while doing heavy loadtesting with the customconnector,
    >
    is that sometimes connections are closed and new ones made in the midst ofa transaction.
    If you imagine a scenario where a session bean creates a business entity,and
    the session bean
    calls 1 entity bean for the header and 1 entity bean for the detail, thenthe
    header and detail
    must be created in the same transaction AND with the same connection(thereis
    a parent-child relationship
    between header and detail enforced on the back end database via Primaryand Foreing
    Keys).
    We have not yet found why weblogic is closing the connection!
    A second problem that we are experincing with the custom connector, is theuse
    of CMP(container managed persistence)
    within entity beans.
    The J2EE developers state that the use of CMP decreases the develomenttime and
    thus also maintenance costs.
    We have not yet found a way to integrate a custom connector with the CMPpersistence
    scheme !
    In order to solve our loadtesting and CMP persistence problems i was askedto
    come up with a solution
    which should not use a custom connector,but use standard connection poolsfrom
    weblogic.
    To resolve the authentication problem on weblogic i could make a customrealm
    which connects to the
    backend database with the username and password, and if the connection isok ,
    i could consider this
    user as authenticated in weblogic.
    That still leaves me with the problem of auditing and pooling.
    If i were to use a standard connection pool,then all transaction made inthe oracle
    database
    would be done by a pool user or super user, a solution which will berejected
    by our local security officer,
    because you can not see which real user made a transaction in thedatabase.
    I could still use the connection pool and in the application , advise theapplication
    developers
    to set an oracle package variable with the real user, then on arrival ofthe request
    in the database,
    the logic could use this package variable to set the transaction user.
    There are still problems with this approach :
    - The administrator of the database can still not see who is connected ,he will
    only see the superuser connection.
    - This scheme can not be used when you want to use CMP persistence , sinceit
    is weblogic who will generate the code
    to access the database.
    I thought i had a solution when oracle provided us with a connection poolknown
    as OracleOCIConnectionPool
    where there is a connection made by a superuser, but where sessions aremultiplexed
    over this physical pipe with the real user.
    I can not seem to properly integrate this OCI connectionpool intoweblogic.
    When using this pool , and we are coming into a bean (session or entitybean)
    weblogic is wrapping
    this pool with it's own internal Datasource and giving me back aconnection of
    the superuser, but not one for the real user,
    thus setting me with my back to the wall again.
    I would appreciate if anyone had experienced the same problem to share apossible
    solution with us
    in order to satisfy all requirements(security,auditing,CMP).
    Many Thanks
    Blyau Gino
    [email protected]

  • Database connection pooling with weblogic 8.1.

    Hai All,
    I am new to weblogic database connection pooling.
    I am using Weblogic8.1 and want to use connection pooling to get a jdbc connection. my database server is Oracle 8.1.7.
    Things which i have done using the weblogic admin console.
    I have created a Jdbc connection pool named myconnectionpool.
    I have created a datasource named mydatasource.
    and named the JNDI as myjndi.
    Is the above process correct to create the connection pool in the weblogic8.1.
    I am not aware of the java code to get the database connection object from the connection pool which i have created.
    can any one please let me know the java code to get the connection from the pool.
    Any help is appreciated
    Thanks in advance
    pooja.

    Hai
    I have tried using the code u have mentioned but it returned me
    an error which is below.
    C:\javaexamples\Javaprograms\JDBC>java jdbcexampleconnectionpool
    javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
    I have added the following lines code, which i read in some weblogic documentation. The code i added is below and it worked fine.
    ht.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
    ht.put(Context.PROVIDER_URL,"t3://localhost:7001");
    Context ctx = new InitialContext(ht);I am not sure what the above code does.
    Can anyone let me know what does the above code do.
    Thanks a lot and i appreciate ur help,
    Pooja.

  • Database connection Pooling in TOMCAT

    I am trying Database connection Pooling in TOMCAT
    I am getting the following error
    org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class '' for connect URL 'null'
    My Web.xml in $CATALINA_HOME\conf\web.xml
    <resource-ref>
    <res-ref-name>WMSPREF</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    and my server.xml in
    $CATALINA_HOME\conf\server.xml
    <ResourceParams name="WMSPREF">
    <parameter>
    <name>factory</name>
    <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
    <name>driverClassName</name>
    <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
    <parameter>
    <name>url</name>
    <value>jdbc:oracle:thin:@10.94.100.148:1521:WMSPREF</value>
    </parameter>
    <parameter>
    <name>username</name>
    <value>wmsmigrate</value>
    </parameter>
    <parameter>
    <name>password</name>
    <value>abnwms</value>
    </parameter>
    <parameter>
    <name>maxActive</name>
    <value>20</value>
    </parameter>
    <parameter>
    <name>maxIdle</name>
    <value>10</value>
    </parameter>
    <parameter>
    <name>maxWait</name>
    <value>-1</value>
    </parameter>
    </ResourceParams>
    And my database.jsp : code
         Context ctx = new InitialContext();
         Context envContext = (Context)ctx.lookup("java:comp/env");
         DataSource ds = (DataSource)envContext.lookup("WMSPREF");
         conn = ds.getConnection();

    What version of Tomcat do you have? 4? 5? 5.5?
    Have you defined a Resource entry in server.xml as well as the ResourceParams?
    I have never had any luck configuring a datasource in the server.xml file.
    What HAS worked for me is putting the config into a myWebApp.xml file.
    My web context is "myWebApp"
    The name of the file is "myWebApp.xml"
    For Tomcat4 for this goes in the webapps directory
    For Tomcat5 this goes in the [TOMCAT_HOME]/conf/Catalina/localhost directory
    <?xml version='1.0' encoding='utf-8'?>
    <Context path="/myWebApp" docBase="myWebApp" debug="1" reloadable="true" crossContext="true" >
    <Resource name="WMSPREF" auth="Container"
                  type="javax.sql.DataSource">
    </Resource>
    <ResourceParams name="WMSPREF">
    <parameter>
      <name>factory</name>
      <value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
    </parameter>
    <parameter>
      <name>driverClassName</name>
      <value>oracle.jdbc.driver.OracleDriver</value>
    </parameter>
    <parameter>
      <name>url</name>
      <value>jdbc:oracle:thin:@10.94.100.148:1521:WMSPREF</value>
    </parameter>
    <parameter>
      <name>username</name>
      <value>wmsmigrate</value>
    </parameter>
    <parameter>
      <name>password</name>
      <value>abnwms</value>
    </parameter>
    <parameter>
      <name>maxActive</name>
      <value>20</value>
    </parameter>
    <parameter>
      <name>maxIdle</name>
      <value>10</value>
    </parameter>
    <parameter>
      <name>maxWait</name>
      <value>-1</value>
    </parameter>
    </ResourceParams>
    </Context>Cheers,
    evnafets

  • Connection Pool and Database Sessions

    Hi,
    Is there any way to use the connection pool or Datasource while connecting to database?If I am using a stateless sesssion bean and using a Data Access layer which just creates a database session to write the persistence toplink objects how I can make use of application server connection pool?
    Thanks,
    Vinod

    Hi,
    Is there any way to use the connection pool or Datasource while connecting to database?If I am using a stateless sesssion bean and using a Data Access layer which just creates a database session to write the persistence toplink objects how I can make use of application server connection pool?Hi Vinod,
    Yes, TopLink allows you to use the app server's connection pooling and transaction services. Chapter 2 of the Oracle9iAS TopLink Foundation Library Guide provides details as do the TopLink examples. The easiest way to set this up is by using the sessions.xml file. The sample XML below is from the file <toplink903>\examples\ias\examples\ejb\sessionbean\sessions.xml. Here we are adding the datasource defined in OC4J and specifying that we are using the OC4J transaction controller also.
    <login>
    <user-name>sa</user-name>
    <password></password>
    <datasource>java:comp/env/jdbc/ejbJTSDataSource</datasource>
    <uses-external-transaction-controller>true</uses-external-transaction-controller>
    <uses-external-connection-pool>true</uses-external-connection-pool>
    </login>
    <external-transaction-controller-class>oracle.toplink.jts.oracle9i.Oracle9iJTSExternalTransactionController</external-transaction-controller-class>
    When using this approach you need to change your TopLink code slightly in the EJB methods:
    a. Acquire the ACTIVE unit of work from the server
    session (again, see the EmployeeSessionEJB code
    example) with something like:
    UnitOfWork uow = clientSession.getActiveUnitOfWork();
    b. Calls to uow.commit() can be ommitted or commented out
    because the EJB will handle this. Note that of course
    the methods you create in the EJB that are using this
    approach must have TX Required (default).
    Hope this helps.
    Pete

Maybe you are looking for