ゞ沉默是金ゞ

          魚離不開水,但是沒有說不離開哪滴水.
          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 ゞ沉默是金ゞ 閱讀(845) 評論(0)  編輯  收藏 所屬分類: eXtreme
          主站蜘蛛池模板: 南丹县| 太保市| 新和县| 疏附县| 本溪市| 赤壁市| 惠来县| 梅州市| 博乐市| 梁河县| 竹溪县| 五寨县| 桃园县| 濮阳县| 敖汉旗| 红原县| 探索| 东至县| 威信县| 馆陶县| 大余县| 靖远县| 余江县| 轮台县| 海城市| 响水县| 三亚市| 台北县| 西青区| 晋江市| 汝南县| 文登市| 平原县| 滨州市| 横峰县| 明水县| 特克斯县| 定襄县| 合川市| 宁阳县| 天津市|