ゞ沉默是金ゞ

鱼离不开水,但是没有说不离开哪滴水.
posts - 98,comments - 104,trackbacks - 0
The util class to get the object that exists in object grid.
package org.duke.xs;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import com.fmr.pzn.bo.TagProfileData;
import com.fmr.pzn.bo.UserProfile;
import com.ibm.websphere.objectgrid.BackingMap;
import com.ibm.websphere.objectgrid.ClientClusterContext;
import com.ibm.websphere.objectgrid.ConnectException;
import com.ibm.websphere.objectgrid.ObjectGrid;
import com.ibm.websphere.objectgrid.ObjectGridManager;
import com.ibm.websphere.objectgrid.ObjectGridManagerFactory;
import com.ibm.websphere.objectgrid.ObjectGridRuntimeException;
import com.ibm.websphere.objectgrid.ObjectMap;
import com.ibm.websphere.objectgrid.Session;
import com.ibm.websphere.objectgrid.UndefinedMapException;
import com.ibm.websphere.objectgrid.security.config.ClientSecurityConfiguration;
import com.ibm.websphere.objectgrid.security.config.ClientSecurityConfigurationFactory;

/**
 * To retrieve tag from XS.
 
*/
public class XSUtil {
    
private static String connectionString = null;
    
private static String gridName = null;
    
private static String mapName = null;
    
private static String uniqueId = null;
    
private static ObjectGrid grid = null;

    
/**
     * 
@param args
     * 
@throws Exception
     
*/
    
public static void main(String[] args) throws Exception {       
        connectionString 
= "AAAtest1.fmr.com:17000,AAAtest1.fmr.com:17001";
        
        gridName 
= "volatileGrid";
//        gridName = "Grid";
        mapName = "XXXMap";
        uniqueId = "0001000001811";

        grid 
= getGrid(connectionString, gridName, "configs/pzn-int/ogClient.properties");
        System.out.println(grid.getMap(mapName).getTimeToLive());

//        System.out.println("**********Start to delete entry**********");
//        deleteEntry(grid, mapName, uniqueId);
//
//        System.out.println("**********Start to create entry**********");
//        createEntry(grid, mapName, uniqueId);

        System.out.println(
"**********Start to query entry**********");
        queryEntry(grid, mapName, uniqueId);
    }

    
/**
     * 
@param connectionString
     * 
@param gridName
     * 
@param csConfigFile
     * 
@return
     * 
@throws Exception
     * 
@throws ConnectException
     
*/
    
public static ObjectGrid getGrid(String connectionString, String gridName,
            String csConfigFile) 
throws Exception, ConnectException {
        
if (connectionString != null && connectionString.length() > 0
                
&& connectionString.indexOf(":"> 0) {
            
if (grid == null) {
                ClientClusterContext ccc 
= null;
                ObjectGridManager ogManager 
= null;
                
try {
                    ogManager 
= ObjectGridManagerFactory.getObjectGridManager();
                    System.out.println(
" >>> ObjectGridManager obtained, " + ogManager);

                    
// uncomment these lines to unable ORB/SSL tracing
                    
// ogManager.setTraceFileName("logs/client.log");
                    
// ogManager.setTraceSpecification("ObjectGrid*=all=enabled:ORBRas=all=enabled:SASRas=all=enabled:com.ibm.ws.security.*=all=enabled");

                    
//ccc = ogManager.connect(connectionString, null, null);
                    
                    ClientSecurityConfiguration clientSecurityConfig 
= null;
                    
if (csConfigFile != null) {
                        clientSecurityConfig 
= ClientSecurityConfigurationFactory.getClientSecurityConfiguration(csConfigFile);
                    }
                    ccc 
= ogManager.connect(connectionString, clientSecurityConfig, new File(
                                    
"objectGridClient.xml").toURI().toURL());
                    System.err.println(
" >>> ClientClusterContext obtained, " + ccc);
                    System.err.println(
" >>> Cluster name is " + ccc.getClusterName());
                } 
catch (ConnectException e) {
                    System.out.printf(
"Connection error: %s\n", e.getCause());
                    
throw new ConnectException(e);
                } 
catch (Exception e) {
                    System.out.printf(
"\nXSInit: Exception while getting the grid: %s\n", e.getCause());
                }

                
// Retrieve the ObjectGrid client connection and return it.
                try {
                    grid 
= ogManager.getObjectGrid(ccc, gridName);
                    System.out.println(
" >>> Grid '" + gridName + "' obtained, " + grid);

                } 
catch (ObjectGridRuntimeException e) {
                    System.out
                            .printf(
"\nXSInit: Exception while accessing the grid: '%s'. Check the validity of the grid name.\n",
                                    gridName);
                }
            }
        } 
else {
            System.out.println(
"Connection string format should be host:port[,host:port]");
        }
        
return grid;
    }

    
public static void createEntry(ObjectGrid grid, String mapName,
            String uniqueId) 
throws Exception {
        
// Get Backing Map
        BackingMap bm = grid.getMap(mapName);
        
if (bm == null) {
            System.out.printf(
                    
" Map '%s' does not exist on this grid. Exiting \n",
                    mapName);
            System.exit(
1);
        }
        
// Get a session
        Session sess = grid.getSession();
        
// Get the ObjectMap
        ObjectMap map1 = null;
        
try {
            map1 
= sess.getMap(mapName);

        } 
catch (UndefinedMapException e){
            System.out.printf(
                    
" Map '%s' does not exist on this grid. Exiting \n",
                    mapName);
            System.exit(
1);
        }

        UserProfile myUserProfile 
= null;

        myUserProfile 
= (UserProfile) map1.get(uniqueId);

        
if (myUserProfile == null) {
            String probeKey 
= uniqueId;
            
// UUID.randomUUID().toString();
            System.out
                    .printf(
"\nPLACING UserProfile OBJECT IN THE GRID with key as follows:[%s]\n",
                            probeKey);
            myUserProfile 
= getUserProfile(probeKey, 5);

            map1.insert(probeKey, myUserProfile);

            myUserProfile 
= (UserProfile) map1.get(probeKey);
            
if (myUserProfile == null) {
                System.out.printf(
                        
"\nCall support. Cannot allocate probe object in the following system:"
                                
+ "\nHost/port: '%s'" + "\nGrid     : '%s'"
                                
+ "\nMap      : '%s'\n", connectionString,
                        grid.getName(), map1.getName());
            }
        }
    }

    
public static void queryEntry(ObjectGrid grid, String mapName,
            String uniqueId) 
throws Exception {
        UserProfile myUserProfile 
= null;

        Session sess 
= grid.getSession();

        ObjectMap map1 
= null;
        
try {
            map1 
= sess.getMap(mapName);

        } 
catch (UndefinedMapException e){
            System.out.printf(
                    
" Map '%s' does not exist on this grid. Exiting \n",
                    mapName);
            System.exit(
1);
        }

        List
<UserProfile> upList = new ArrayList<UserProfile>();
        String[] mids 
= null;
        
if (uniqueId.indexOf(",">= 0) {
            mids 
= uniqueId.split(",");
        } 
else {
            mids 
= new String[] { uniqueId };
        }
        
for (String mid : mids) {
            myUserProfile 
= (UserProfile) map1.get(mid);

            
if (myUserProfile == null) {
                System.out
                        .printf(
"\nOops UserProfile with the MID '%s' has NOT been found in the following system:"
                                
+ "\nHost/port: '%s'"
                                
+ "\nGrid     : '%s'"
                                
+ "\nMap      : '%s'\n", mid, connectionString,
                                grid.getName(), map1.getName());

            } 
else {
                upList.add(myUserProfile);
                System.out.printf(
                        
"\nUserProfile object with the MID '%s' has been found at"
                                
+ "\nHost/port: '%s'" + "\nGrid     : '%s'"
                                
+ "\nMap      : '%s'\n",
                        myUserProfile.getUniqueId(), connectionString,
                        grid.getName(), map1.getName());
                System.out.printf(
"\nObject content is as follows:\n%s\n",
                        dumpUserProfile(myUserProfile));
            }
        }
    }

    
public static void deleteEntry(ObjectGrid grid, String mapName,
            String uniqueId) 
throws Exception {
        
// Get Backing Map
        BackingMap bm = grid.getMap(mapName);
        
if (bm == null) {
            System.out.printf(
                    
" Map '%s' does not exist on this grid. Exiting \n",
                    mapName);
            System.exit(
1);
        }

        
// Get a session
        Session sess = grid.getSession();
        
// Get the ObjectMap
        ObjectMap map1 = null;
        
try {
            map1 
= sess.getMap(mapName);

        } 
catch (UndefinedMapException e)

        {
            System.out.printf(
                    
" Map '%s' does not exist on this grid. Exiting \n",
                    mapName);
            System.exit(
1);
        }

        String[] mids 
= null;
        
if (uniqueId.indexOf(",">= 0) {
            mids 
= uniqueId.split(",");
        } 
else {
            mids 
= new String[] { uniqueId };
        }
        
for (String mid : mids) {
            
if (!map1.containsKey(mid)) {
                System.out
                        .printf(
"\nNOTHING HAS BEEN REMOVED-OBJECT WAS NOT FOUND\nUserProfile with the MID '%s' has not been found in the following system:"
                                
+ "\nHost/port: '%s'"
                                
+ "\nGrid     : '%s'"
                                
+ "\nMap      : '%s'\n", mid, connectionString,
                                grid.getName(), map1.getName());
            } 
else {
                
// lets remove this object
                map1.remove(mid);

                
if (!map1.containsKey(mid)) {

                    System.out.printf(
                            
"\nUserProfile object with the MID '%s' has been REMOVED AS REQUISTED from "
                                    
+ "\nHost/port: '%s'" + "\nGrid     : '%s'"
                                    
+ "\nMap      : '%s'\n", mid,
                            connectionString, grid.getName(), map1.getName());

                } 
else {
                    System.out.printf(
                            
"\nERROR: Cannot remove object with the MID '%s' from "
                                    
+ "\nHost/port: '%s'" + "\nGrid     : '%s'"
                                    
+ "\nMap      : '%s'\n", mid,
                            connectionString, grid.getName(), map1.getName());
                }
            }
        }
    }

    
private static UserProfile getUserProfile(String uniqueId, int numTags) {
        UserProfile up 
= new UserProfile();
        up.setUniqueId(uniqueId);
        up.setCustomerType(
"C");
        up.setRealmName(
"PI");
        up.setSegmentName(
"AO");
        
for (int i = 0; i < numTags; i++) {
            TagProfileData tpd 
= getTagProfileData(i);
            up.getTagProfileDataList().add(tpd);
        }
        
return up;
    }

    
private static TagProfileData getTagProfileData(int i) {
        TagProfileData tpd 
= new TagProfileData();
        tpd.setCategoryName(
"Sales");
        tpd.setCustInterest(
7);
        tpd.setLastEventDate(
new java.util.Date());
        tpd.setLastMaintenanceDate(
new java.util.Date());
        tpd.setSuppressionExpDate(
new java.util.Date());
        tpd.setSuppressionInd(
0);
        tpd.setTagCreationDate(
new java.util.Date());
        tpd.setType(
"Action");
        
if (i == 0) {
            tpd.setTagId(
"30");
            tpd.setTagName(
"AbandonedBundleEBNA");
            tpd.setSubCategory(
"Brokerage");
        }
        
if (i == 1) {
            tpd.setTagId(
"28");
            tpd.setTagName(
"AOAbandonedEBNA");
            tpd.setSubCategory(
"Brokerage");
        }
        
if (i == 2) {
            tpd.setTagId(
"29");
            tpd.setTagName(
"AOAbandoned529");
            tpd.setSubCategory(
"Education");
        }
        
if (i == 3) {
            tpd.setTagId(
"31");
            tpd.setTagName(
"AOAbandonedRetirement");
            tpd.setSubCategory(
"Retirement");
        }
        
if (i >= 4) {
            tpd.setTagId(
"32");
            tpd.setTagName(
"AOAbandonedRollover");
            tpd.setSubCategory(
"Retirement");
        }
        tpd.setTagPriority(
4/* tagPriority */);
        tpd.setTagScore(
12345.67F/* tagScore */);
        tpd.setTagSource(
"eDB");
        
return tpd;
    }

    
private static String dumpUserProfile(UserProfile up) {
        
if (up == null)
            
return "UserProfile is null";
        StringBuilder sb 
= new StringBuilder();
        
// ("UserProfile \n");
        sb.append("Customer Type   :["
                
+ (up.getCustomerType() != null ? up.getCustomerType() : "null")
                
+ "]\n");
        sb.append(
"Realm Name      :[" + up.getRealmName() + "]\n");
        sb.append(
"SegmentName     :[" + up.getSegmentName() + "]\n");
        
//sb.append("Reason          :[" + up + "]\n");
        if (null != up.getTagProfileDataList()) {
            sb.append(
"Number of Tags  :[" + up.getTagProfileDataList().size()
                    
+ "]\n");
            
for (int i = 0; i < up.getTagProfileDataList().size(); i++) {
                sb.append(
"Tag #" + i + ":\n");
                sb.append(dumpTagProfileData(up.getTagProfileDataList().get(i)));
            }
        }

        sb.append(
"\n");

        
return sb.toString();
    }

    
private static String dumpTagProfileData(TagProfileData tpd) {
        StringBuilder sb 
= new StringBuilder();
        
if (tpd == null)
            
return "TagProfileData is null";
        
// (" Tag Profile Data:\n");
        sb.append(" Tag Id               :[" + tpd.getTagId() + "]\n");
        
if (System.getProperty("xs.c"!= null) {
            sb.append(
" Tag Name             :[AOAbandonedTheFidelityAccount]\n");
        } 
else {
            sb.append(
" Tag Name             :[" + tpd.getTagName() + "]\n");
        }
        sb.append(
" Category Name        :[" + tpd.getCategoryName() + "]\n");
        sb.append(
" Sub Category Name    :[" + tpd.getSubCategory() + "]\n");
        sb.append(
" Business type        :[" + tpd.getType() + "]\n");
        sb.append(
" Reason               :[" + tpd.getReason() + "]\n");
        sb.append(
" Cust Interest        :[" + tpd.getCustInterest() + "]\n");
        sb.append(
" Last Event Date      :[" + tpd.getLastEventDate() + "]\n");
        sb.append(
" Last Maintenance Date:[" + tpd.getLastMaintenanceDate()
                
+ "]\n");
        sb.append(
" Suppression Exp Date :[" + tpd.getSuppressionExpDate()
                
+ "]\n");
        sb.append(
" Suppression Ind      :[" + tpd.getSuppressionInd() + "]\n");
        sb.append(
" Tag CreationDate     :[" + tpd.getTagCreationDate() + "]\n");
        sb.append(
" Tag Priority         :[" + tpd.getTagPriority() + "]\n");
        sb.append(
" Tag Score            :[" + tpd.getTagScore() + "]\n");
        sb.append(
" Tag Source           :[" + tpd.getTagSource() + "]\n");
        sb.append(
"\n");
        
return sb.toString();
    }
}

The ogClient.properties
# To enable client authentication, set the following two entries to
# Required. To disable client authentication, set both to Never.
# When SSL is disabled 
this file is not used at all.
credentialAuthentication
=Never
clientCertificateAuthentication
=Never

securityEnabled
=true
transportType
=SSL-Required
alias
=clientkey
contextProvider
=IBMJSSE2
protocol
=SSL
keyStoreType
=JKS
keyStore
=configs/pzn-acp/wxs-client.jks
keyStorePassword
=XXX
trustStoreType
=JKS
trustStore
=configs/pzn-acp/wxs-client.jks
trustStorePassword
=XXX
authenticationRetryCount
=3

example of objectGridClient.xml

<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation
="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
 xmlns
="http://ibm.com/ws/objectgrid/config">
    
<objectGrids>
        
<objectGrid name="Grid" >
            
<bean id="TransactionCallback" className=""/>
        
</objectGrid>
        
<objectGrid name="volatileGrid" >
            
<bean id="TransactionCallback" className=""/>
        
</objectGrid>
    
</objectGrids>
</objectGridConfig>



Server side;

<?xml version="1.0" encoding="UTF-8"?>
<objectGridConfig xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation
="http://ibm.com/ws/objectgrid/config ../objectGrid.xsd"
 xmlns
="http://ibm.com/ws/objectgrid/config">
    
<objectGrids>
        
<objectGrid name="Grid" txTimeout="10">
          
<bean className="com.fmr.pzn.xs.grid.ItemArbiter" id="CollisionArbiter">
          
</bean>
           
<bean id="TransactionCallback" className="com.ibm.issf.atjolin.wxsreloadgov.ReloadGovernorTransactionCallback">
                
<property name="estTimeToReload" type="long" value="3" />
                
<property name="slowdownFactor" type="long" value="2000" />
          
</bean>          
            
<backingMap name="TagData" lockStrategy="PESSIMISTIC" copyMode="COPY_TO_BYTES" />
            
<backingMap name="PznMap" lockStrategy="PESSIMISTIC" copyMode="COPY_TO_BYTES" />
        
</objectGrid>
    
</objectGrids>
<backingMapPluginCollections>
</backingMapPluginCollections>
</objectGridConfig>


package com.fmr.pzn.xs.grid;



import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import oracle.jdbc.pool.OracleDataSource;

import com.fmr.pzn.bo.UserProfile;

import com.fmr.pzn.db.DBTableWrapper;

import com.fmr.pzn.db.DSWrapper;

import com.ibm.websphere.objectgrid.KeyNotFoundException;

import com.ibm.websphere.objectgrid.ObjectGrid;

import com.ibm.websphere.objectgrid.ObjectGridException;

import com.ibm.websphere.objectgrid.ObjectMap;

import com.ibm.websphere.objectgrid.revision.CollisionArbiter;

import com.ibm.websphere.objectgrid.revision.CollisionData;

import com.ibm.websphere.objectgrid.revision.RevisionElement;



/*******************************************************************************/

/* Class Name: ItemArbiter                                                     */

/*                                                                             */

/* Description: This class is responsible for determining "winners" of         */

/*    collisions between multiple Item objects. The class implements the       */

/*    CollisionArbiter interface to do that. There are two methods on the      */

/*    interface - arbitrateCollision and initialize.                           */

/*                                                                             */

/*******************************************************************************/

public final class ItemArbiter implements CollisionArbiter {

    
private OracleDataSource ds = null;



    
/*******************************************************************************/

    
/* Method Name: arbitrateCollision */

    
/*                                                                             */

    
/* Description: This method gets control from WXS following a collision of */

    
/* Item objects (one from each domain). The method looks */

    
/* at the update source of the object to do determine which object */

    
/* should be kept. Please see the design documentation for more */

    
/* details. */

    
/*                                                                             */

    
/* Input: */

    
/*

     * CollisionData - This object gives us access to both parties of a

     * collision

     
*/

    
/* (Existing and Colliding), the key of the Existing object, */

    
/* and the map name. */

    
/*                                                                             */

    
/* Returns: */

    
/* Resolution.KEEP - WXS is to keep the Existing object */

    
/* Resolution.OVERRIDE - WXS is to keep the Colliding object */

    
/* Resolution.REVISE - The arbiter has decided to create a custom object */

    
/* and write it to the grid. */

    
/*******************************************************************************/

    @Override

    
public Resolution arbitrateCollision(CollisionData collisiondata) {

        ObjectMap map 
= null;

        String collisionKey 
= null;

        Object rowCollisionKey 
= null;

        Resolution resolution 
= Resolution.KEEP;

        System.out.println( 
"Arbiter: Processing Collision");



        



        
if (collisiondata != null) {

            RevisionElement newDataElement 
= collisiondata.getCollision();

            RevisionElement existingElement 
= collisiondata.getExisting();

            rowCollisionKey 
= collisiondata.getKey();

            collisionKey 
= collisiondata.getKey().toString();

            map 
= collisiondata.getMap();

            
// collisionSession = collisiondata.getSession();



            
// check to see if either are null or not of the expected instance

            
// type

            
if (newDataElement == null || newDataElement.getValue() == null) {

                resolution 
= Resolution.OVERRIDE;



                System.out.println( String.format(

                        
"Arbiter: Collision detected for key [%s], "

                                
+ "Incoming element OVERRIDES", collisionKey));

            } 
else if (existingElement == null

                    
|| existingElement.getValue() == null) {

                resolution 
= Resolution.KEEP;



                System.out.println( String.format(

                        
"Arbiter: Collision detected for key [%s], "

                                
+ "Existing element is KEPT", collisionKey));

            } 
else {

                
// Main branch



                
// UserProfile newUP = (UserProfile) newDataElement.getValue();

                
// UserProfile existingUP = (UserProfile) existingElement

                
// .getValue();

                String domainForNewElement 
= newDataElement.getDomainName();

                String domainForExistingElement 
= existingElement

                        .getDomainName();

                String message 
= String

                        .format(
"Arbiter: Collision detected for key [%s]."

                                
+ " Domains for existing obj: %s, for incoming obj: %s ",

                                collisionKey, domainForExistingElement,

                                domainForNewElement);



                System.out.println( message);



                
if (ds == null) {

                    System.out.println(

                            
"Arbiter: Data Source failed to initialize. Default policy - keep existing object");

                    
return Resolution.KEEP;

                }

                UserProfile userProfileFromDB 
= retriveObjectFromSystemOfRecord(rowCollisionKey);

                
// Check if we really got the object

                
// if not - return

                
if (userProfileFromDB == null) {

                    message 
= String

                            .format(
"Arbiter: Cannot retrive object from the data base. Data Source is not set. Object for key [%s] has been kept as is in the grid.\n",

                                    collisionKey);

                    System.out.println( message);

                    
return Resolution.KEEP;

                }



                
// Insert/update object in the map

                
try {

                    
if (map.containsKey(rowCollisionKey)) {

                        map.update(rowCollisionKey, userProfileFromDB);



                        message 
= String

                                .format(
"Arbiter: Object for key [%s] retrived from DB and replaced data in the grid.\n",

                                        collisionKey);

                    } 
else {

                        
// this should not be happening

                        map.insert(rowCollisionKey, userProfileFromDB);

                        message 
= String

                                .format(
"Arbiter: WARNING: Object from db for key [%s] has been inserted in the grid.\n",

                                        collisionKey);

                    }

                    
// below means object has been revised programmatically

                    resolution 
= Resolution.REVISE;



                    System.out.println( message);



                } 
catch (KeyNotFoundException e) {

                    
// e.printStackTrace();

                    message 
= String

                            .format(
"Arbiter: Key not found while processing collision for key [%s]. Existing object kept. Exception message is %s.\n",

                                    collisionKey, e.getMessage());



                    System.out.println( message);



                } 
catch (ObjectGridException e) {

                    message 
= String

                            .format(
"Arbiter: Object Grid exception while processing collision for key [%s]. Existing object kept. Exception message is %s.\n",

                                    collisionKey, e.getMessage());



                    System.out.println( message);

                }



            } 
// end Main branch

        } 
// if collisionData is null 

        
return resolution;

    }

/**

 * Retrieves object from the database . While doing this carefully tries 

 * to establish connection as it may become stale

 * 
@param collisionKey

 * 
@return

 
*/

    
public UserProfile retriveObjectFromSystemOfRecord(Object collisionKey) {

        
if (ds == null)

            
return null;

        UserProfile up 
= new UserProfile();

        Connection con 
= null;

        PreparedStatement stmt 
= null;

        String message 
= null;



        
// try get connection

        
boolean success = true;

        
try {

            con 
= ds.getConnection();

            stmt 
= con.prepareStatement("select 1 from dual");

            stmt.execute();

            stmt.close();

            stmt 
= null;

            success 
= true;

            
//System.out.println( "Arbiter: First attempt to select from dual executed fine.");

        } 
catch (SQLException e) {

            System.out.println( 
"Arbiter: select from dual failed");

            success 
= false;

        } 
finally {

            
if (stmt != null)

                
try {

                    stmt.close();

                } 
catch (SQLException e1) {}

                

            
if (!success && (con != null)) {

                
try {

                    con.close();

                    con 
= null;

                } 
catch (SQLException e) {

                }

                con 
= null;

                System.out.println(

                        
"Arbiter: First attempt to get connection failed. Will try again");

            } 
//if !success

        }    

                

        

        
//if there were an error lets refresh cache

        
if (!success)

            
try {

                DSWrapper.refreshCache();

            } 
catch (SQLException e1) {

                
// TODO Auto-generated catch block

                System.out.println(

                        
"Arbiter: refresh cache attempt failed with exception:"

                                
+ e1.getMessage());

            }

            

        
// if connection still null try again



        
if (con == null) {

            
try {

                con 
= ds.getConnection();

                stmt 
= con.prepareStatement("select 1 from dual");

                stmt.execute();

                stmt.close();

                stmt 
= null;

                System.out.println( 
"Arbiter: Second attempt to select from dual executed fine.");

            } 
catch (SQLException e) {

                System.out.println( 
"Arbiter: select from dual failed");

            } 
finally {

                
if (stmt != null)

                    
try {

                        stmt.close();

                    } 
catch (SQLException e) {

                    }

            }



        } 
// if con null



        
if (con == null) {

            
// we are giving up

            

            
// log error & leave, return null



            message 
= String

                    .format(
"Arbiter: ERROR. Cannot get Connection to process Object for key [%s]. Existing object kept. \n",

                            collisionKey);

            System.out.println( message);

            

            
return null;

        }



        up 
= DBTableWrapper.getUserProfile(con, collisionKey.toString());

        

        
//important! return connection to pool

        
if (con != null)

            
try {

                con.close();

            } 
catch (SQLException e) {}





        
return up;



    }



    
/*******************************************************************************/

    
/* Method Name: initialize */

    
/*                                                                             */

    
/*

     * Description: This method gets invoked when the containers come up. It

     * could be used for any purpose necessary at start up time. /* We use it to

     * cache Oracle Data Source in this OG container

     
*/

    
/*                                                                             */

    
/*******************************************************************************/

    @Override

    
public void initialize(ObjectGrid grid) {

        System.out.println(

                
"Arbiter: Init Collision Arbiter. Gettting Oracle Data Source ");

        
try {

            ds 
= DSWrapper.getInstance();



        } 
catch (SQLException e) {



            System.out.println(

                    
"Arbiter: Cannot initialize data source. SQLException :"

                            
+ e.getMessage());

            ds 
= null;

        }

    }



}

posted on 2012-06-26 19:12 ゞ沉默是金ゞ 阅读(832) 评论(0)  编辑  收藏 所属分类: eXtreme

只有注册用户登录后才能发表评论。


网站导航: