Weston,

Thanks for the reply.

The AppHelper works like a ServiceLocator.  One place to call and get whichever 
ds is needed.  I added the Singleton thought it made sense. :)

I began caching the ds references early on and realized that was a bad choice, 
so, the reset is basically an old call that I never changed. 

Here's the AppHelper with the excluded methods:

  |    public static synchronized AppHelper getInstance() {     
  |     logger.debug("entering getInstance()");         
  |        appHelperInstance = (null == appHelperInstance) ? 
  |                new AppHelper() : appHelperInstance;
  |     logger.debug("leaving getInstance()");
  |        return appHelperInstance;
  |    }
  |    
  |    private AppHelper(){             
  |             logger.debug("creating the AppHelper Singleton");
  |             logger.debug("leaving AppHelper Singleton");
  |    }
  |    
  |    private DataSource initializeDataSource(String dataSourceJNDI) throws 
NamingException{
  |     logger.debug("entering initializeDataSource()");
  |         DataSource dataSource = null;
  |        try{
  |           InitialContext ic = new InitialContext();
  |           dataSource = (DataSource) ic.lookup(dataSourceJNDI);
  |        }catch (NamingException ne){
  |            throw new NamingException("NamingException while looking" +
  |                    " up DataSource Connection "
  |                    + ": \n" + ne.getMessage());
  |        }
  |     logger.debug("leaving initializeDataSource()");
  |         return dataSource;
  |    }     
  |       
  |    synchronized public Connection getConnection(String ds)throws 
NamingException, SQLException
  |    {
  |        logger.debug("entering getConnection()");       
  |        logger.info("get connection for "+ds);
  |        
  |        DataSource dataSource = initializeDataSource(ds);
  |              
  |        Connection conn = null;
  |        
  |        try {
  |                     conn = dataSource.getConnection();                      
        
  |                     logger.info("connection:"+conn.toString());
  |        } catch (NullPointerException e) {
  |             logger.error("caught np exception getting connection from 
cached resource!");
  |             logger.info("attempting to restart the datasource...");
  |                 /*
  |                  * If the dataSource has been shutdown or perhaps
  |                  * the database server has been restarted, then, these
  |                  * exception handlers will restart the datasource...
  |                  * NOTE: All works fine if a user is in the middle of using 
the app,
  |                  * however, since the Security relies on JBoss CMP then
  |                  * are unable to authenticate
  |                  */         
  |             conn = resetDataSource(ds);             
  |             logger.info("connection established!");
  |        } catch (SQLException e) {
  |             logger.error("caught sql exception getting connection from 
cached resource!");
  |                 logger.info("sql ex->"+e.getMessage());
  |             logger.info("attempting to restart the datasource...");
  |             /*
  |                  * If the dataSource has been shutdown or perhaps
  |                  * the database server has been restarted, then, these
  |                  * exception handlers will restart the datasource...
  |                  * NOTE: All works fine if a user is in the middle of using 
the app,
  |                  * however, since the Security relies on JBoss CMP then
  |                  * are unable to authenticate
  |                  */
  |             conn = resetDataSource(ds);             
  |             logger.info("connection established!");         
  |        }
  |        
  |     //conn.setAutoCommit(true);
  |     logger.debug("leaving getConnection()");
  |        return conn;
  |    }                 
  | 
  |    private Connection resetDataSource(String dataSourceJNDI)throws 
NamingException, SQLException{
  |             //      try and restart it
  |             DataSource ds = initializeDataSource(dataSourceJNDI);
  |             return ds.getConnection();
  |    } 
  | 
The data source's are:

  | <datasources>   
  |   <local-tx-datasource> 
  |       <jndi-name>DefaultDS</jndi-name>                
  | 
  | 
<connection-url>jdbc:microsoft:sqlserver://####:1433;DatabaseName=Main;SelectMethod=cursor</connection-url>
     
  |  <driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
  |         <user-name>reg</user-name>
  |         <password>****</password>    
  |         <check-valid-connection-sql>SELECT * FROM Site(NOLOCK) WHERE SiteID 
= 179</check-valid-connection-sql>
  |       <!-- pooling parameters -->  
  |       <min-pool-size>5</min-pool-size>  
  |       <max-pool-size>10</max-pool-size>      
  |     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml 
(optional) -->
  |     <metadata>
  |       <type-mapping>MS SQLSERVER2000</type-mapping>
  |     </metadata>
  |       <idle-timeout-minutes>0</idle-timeout-minutes>  
  |     </local-tx-datasource>  
  | </datasources>
  | 
And the other:

  | <datasources>     
  |   <local-tx-datasource>
  |     <jndi-name>CATS_DS_MAIN</jndi-name>        
  | 
  | 
<connection-url>jdbc:microsoft:sqlserver://####:1433;DatabaseName=Main;SelectMethod=cursor</connection-url>
     
  |  <driver-class>com.microsoft.jdbc.sqlserver.SQLServerDriver</driver-class>
  |     <!-- Use the security domain defined in conf/login-config.xml -->
  |     <security-domain>PortalCatsEncryptDBPassword</security-domain>
  |     <!-- ensures a valid connection -->
  |       <check-valid-connection-sql>SELECT * FROM Site(NOLOCK) WHERE SiteID = 
179</check-valid-connection-sql>
  |     <!--pooling parameters-->
  |     <min-pool-size>5</min-pool-size>
  |     <max-pool-size>10</max-pool-size>
  |     <idle-timeout-minutes>0</idle-timeout-minutes>     
  |     <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml 
(optional) -->
  |     <metadata>
  |       <type-mapping>MS SQLSERVER2000</type-mapping>
  |     </metadata>    
  |   </local-tx-datasource>
  | </data-sources>
  | 
and the login-config entry:

  | <application-policy name = "PortalCatsEncryptDBPassword">
  |        <authentication>
  |           <login-module code = 
"org.jboss.resource.security.SecureIdentityLoginModule"
  |              flag = "required">
  |                <module-option name = "username">portal</module-option>
  |                <module-option name = 
"password">-1c4fcf3f77be50b7</module-option>
  |                <module-option name = 
"managedConnectionFactoryName">jboss.jca:service=LocalTxCM,name=CATS_DS_MAIN</module-option>
  |          </login-module>      
  |       </authentication>
  |     </application-policy>
  | 

The trace is done using the SQL Profiler.  The expected login was reg, however, 
the trace shows the Insert and Updates performed by portal.

Thanks again.

Graham

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3973410#3973410

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3973410
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to