Best way to assign timestamp in coherence?

What is the best way to assign a timestamp to an object when it is added to a cache? Should I just do this or is there something more efficient?
public class NewOrderTrigger implements MapTrigger {
    public NewOrderTrigger() {
    public void process(MapTrigger.Entry entry) {
        Order o = (Order)entry.getValue();
        o.setSubmittedTime(System.currentTimeMillis());
        entry.setValue(o);
    // ---- hashCode() and equals() must be implemented
    public boolean equals(Object o) {
        return o != null && o.getClass() == this.getClass();
    public int hashCode() {
        return getClass().getName().hashCode();
}Thanks,
Andrew

Hi Andrew,
There are couple issues I would like to bring to your attention.
1. The System.currentTimeMillis() API does not guarantee the time going forward. It's theoretically possible (e.g. with Time Synchronization Service) that with two consequent calls the second one returns value less than the first one. You could compensate for this effect by either using System#nanoTime() or com.tangosol.util.Base#getSafeTimeMillis()
2. The MapTrigger's process always has to deserialize and re-serialize the value. If your object model is POF aware, you could use the PofUpdater instead, optimizing out both steps:
public void process(MapTrigger.Entry entry) {
    PofUpdater updater = new PofUpdater(PROP_SUBMITTED_TIME);
    updater.update(entry, new Long(Base.getSafeTimeMillis()));
    }3. Updates that come from a single client node but belong to different partitions and land on different servers could have significantly different timestamps. Whether or not this is a concern depends on your usage of the SubmittedTime property.
Regards,
Gene

Similar Messages

  • The Best Way to Assign an Enum to the Corresponds value of a String?

    I am reading from and xml file configuration file. The data being returned is stored as a String and corresponds to a Enum value. My question is - What is the best way to assign the enum the value that corresponds to value of the string?
    public enum Names { BOB, FRED, JIM, SAM }
    String name = "FRED";   // This is the data retuned from the xml file.
    Names n =              // I want to assign n the value of Names.FREDI know I could do an "if" statement. However, this is a contrived example with only a few enum values. In the real world, this enum list could be quite large.
    I have looked into reflection, but I don't know whether there is an easier way to achieve my objective?
    Thank you for your time,
    Harold Clements

    dcminter wrote:
    But for looking up "how do I do X with a subclass of type Y", I think the API documentation should be able to answer that.I think I disagree when it's a language feature.That's definitely a point worth observing.
    By that reasoning you'd expect to populate the API docs with definitions for class (and this and super) all over the place.I think you're exaggerate, and you know it ;-)
    If those were to be mentioned in the JavaDoc, they should obviously go into the documentation of java.lang.Object only.
    I suppose you could have a "synthetics" section to the docs in much the same way that the inherited methods and fields are defined but it doesn't seem very useful.It's not useful if it's just clutter that's the same everywhere, of course.
    But in this particular case a simple "note that enum classes have a syntetic valueOf() method that does foo bar baz" in the body of the class documentation would have been a nice guesture (especially since that part is pretty small here anyway).
    And yes, I also think that the length field of arrays should find some mention in the JavaDoc. I don't know how and where, 'though.

  • What is the best way to assign time stamps to counter input data?

    Compact DAQ
    NI 9411
      Hi Everyone,
      I am creating a chart recorder for collecting various engine data.  I need to plot engine speed, crank angle, and various analog data on an XY graph.  I am using a counter and a mag pickup to continuously measure the frequency of the flywheel teeth.  From this data I create an array of timestamps based on accumulated periods for each frequency measurement.  My problem is, how do I determine the absolute timestamp for the first frequency of the buffered data?  I need to sync the frequency data with the analog data so I can plot it all vs time on an XY graph.  The flywheel has 201 teeth and the engine runs at 600 RPM.
      I am using a second mag pickup and counter to measure a single index pulse on the flywheel.  This will be used to determine the crank angle.  I also need to create a timestamp for each index pulse.  What is the best way to do this?
      Is it possible to treat the two mag pickups as an encoder and not use the B phase (direction) pulse? 
      I am fairly new to LabView and any help would be greatly appreciated.
      Thanks in advance,
      Kris

    Hi Kris,
    With analog and digital input tasks in DAQmx, it is possible to acquire data of the type 'waveform'.This includes timestamp information for the acquired data. This example is a good one to reference to understand how this is done: http://decibel.ni.com/content/docs/DOC-3749 . 
    With counter tasks in DAQmx, however, your best bet would be to use the 'Get Date/Time in Seconds' VI to obtain the absolute time. You can set this up so that the absolute time value is obtained right before the DAQmx read function is called, as shown below:
    Are you trying to use the 9411 to read from the mag pickup? What type of data does it output?
    For information on programming with NI-DAQmx, please refer to the following webpage: http://zone.ni.com/devzone/cda/tut/p/id/5438 . It is a very useful resource to get started on DAQmx applications! I hope this helps. 
    Vivek Nath
    National Instruments
    Applications Engineer
    Machine Vision

  • What's The Best Way to Assign Keywords to Multiple Images?

    I'm finally starting to organize my photos with keywords, but something about the way it works in LR2 is driving me batty.
    I came back from a concert Saturday night with over 1,000 photos (double coverage by me and my wife).  I'm trying to use keywords to designate the 14 different performers who appeared on the stage at different times during the evening, when there could be anywhere from 1 to 7 performers on the stage at the same time.
    Now, it seems to me the easiest way to assign these keywords would be:
    1) select a series of photos in which one or more performers appear
    2) in either the "keyword suggestions" or "keyword set" panel, click on the keyword "buttons" I've already created from the performers names.
    But this doesn't always work.  I note that when I highlight a number of photos, ONE is more brightly highlighted than the others, and sometimes, that's the ONLY one that gets the keywords I just clicked on. Apparently, that one image is more "selected" than the others in the series I've highlighted.
    It would not be quite so infuriating if that approach didn't work at all, but the oddity seems to be that sometimes it works and sometimes it doesn't, and I don't know what I'm doing different when it does or doesn't work.
    What does work universally is to to the "Keyword List" panel and type in the name I need, and then right click when the name comes up and select "add keyword to selected photos."  That seems to work every time.
    Or, I can type "Click here to add keywords," type in the name I need, and hit return twice.  That assigns the keyword to all the selected images.  But then I have to do it again for every performer that appears in that series of frames.
    Like I say, the easiest scenario would be the 1-2 step I outlined above, but I cant seem to get that to work all the time.
    Anybody know the trick to getting that 1-2 scenario to work every time?
    Thanks,
    --PS

    Oh, wow.  I have exactly the same problem of LR not assigning keywords to all my selected images.
    I will try the grid, select the grid and not the filmstrip, and look for the current image metadata checkbox as well.
    BTW, Adobe told me to delete the preferences file, which I did.
    They told me to optomize the catalog, which I did.
    And, lastly they told me to create a new catalog and import all the data from my old catalog, which I did not do.
    Stand by ...
    Wow, that is it.  You folks solved my problem.
    Library Mode, select in the grid OR filmstrip (yep-but harder to see in the filmstrip anyway),
    COULD NOT FIND-look for the current image metadata checkbox as well.
    Michael

  • Best way to assign multiple users security, privileges and workbook shares.

    Is there another way to assign multiple users to a single workbook other than using the workbook management option. Something that can be done from the command line? How about assigning security and privileges from the command line?

    You could consider altering the appropriate EUL tables directly - I'm sure someone has the code for this - but requires database interaction (and might not be supported by Oracle, etc.).
    However, the concept or Oracle responsibilities (in Oracle Apps EUL) or Oracle roles (in Oracle database) is what's usually done. In fact, I don't like using users directly as if they go, etc. it's a pain.
    Better to use pre-defined groupings that you probably already have (ie: Apps responsibility such as: AP Inquiry). You set the privs / security there and it takes effect for all users logging in with that responsibility / role.
    Russ

  • Which is the best way to assign cost center to cost element?

    Hi,
    I am getting the below error...
    569400- Gain/Loss Inventory Transfer account requires Cost Object Assignment
    which is best practice to assign cost center - either assign in KA02 or assign in OKB9-automatic account assignment?
    Please advise ...
    Thanks
    Kishore

    HI,
    assignment in KA02 is valid for the whole controlling area, assignment in OKB9 can be different on comp. code level (maybe thats an andvantage for you). Substitution (OKC9) is also possible and delivers more opportunities than OKB9.
    Best regards, Christian

  • Best way to store Timestamps in files/databases?

    Hi,
    I also need Timezone information for the timestamps - im sending the info in an xml-file between two servers, and finally insert information in a postgresql database. Best format for this? Maybe use long-values?
    Any help much appreciated!

    So, I can use a timestamp in the xml-files I don't know what this means. If you mean you take a Timestamp's long millis value and shove it in the XML, without regard to TZ, and then extract it in the same way, yes, you can do that.
    and also
    use timestamp in dbLike I said: Create a Timestamp, use PreparedStatement.setTimestamp to push it into a DATETIME column of the DB, and you're golden. You're just marking an instant in time. Like an announcer on global TV is going, "NOW".
    - and when displaying the
    timestamps, I can use a SimpleDateFormat to format
    the timestamp with any TimeZone I wish?Yup.
    Also (thanx again for your patience!), I have the
    log-file dates. Here I parse out a String like
    '2007-12-10 22:10:00 0200' for each file.Okay, so you probably want a SimpleDateFormat that knows how to parse the "0200" on the end into appropriate TZ information to give you a TZ-agnostic date.
    That is, that's +2 hrs from GMT, right? So when you parse that, you get a java.sql.Date that represents "that instant." It's 10:10 p.m. there, 5:10 p.m. somewhere else, 3:10 a.m. somewhere else, etc., but that doesn't matter. 10:10 p.m. here is exactly the same as 11:10 p.m. in the next TZ. Once I specify 10:10 p.m. here, I've also implicitly stated 00:10 CDT tomorrow in Chicago, etc.
    Remember, "now" == X:00 PDT == X+2:00 CDT == X+3:00 EDT == X+ 11:30 or something India TZ, etc.

  • Netpoint 5.96: Best way to force a theme/catalog to a B2B customer

    Hi,
    what will be best way to assign a B2B customer with a theme/catalog. login will be requierd as the first step which is setup in the installer and by the customer industry restrict to a specific theme/catalog
    thanks
    MM

    i setup the "ServerID" field in the Netpoint..User table to point to the assigned theme. which work as you described
    thanks for your help
    MM

  • Best way to create tasks and assign to sharepoint groups

    Hi everyone, I have a custom list which contains newsletter info that is to be seen by around 400 groups (they are stores) and then I need them to mark each list item as 'completed'
    I have been trying to figure out the best way to do this and decided to keep the custom list and somehow link it to a task for each item in the list. We have nintex so was thinking of creating a workflow to create a separate task for each group (store) so
    they can mark it as completed.
    Is this the best way to go about it or am I completely off track?
    Basically all I need is a list which contains around 30 items and around 400 groups (stores) which contain users (store staff) to be able to mark items on the list as completed so it recognises that each store has completed each task.
    Thanks

    Hi  ,
    According to your description, you want to find the best way for creating tasks for 30 list items and assigning the task to around 400 groups.
    For the workflow, it is heavy  that  you need to create around 12000 (30*400) tasks .  In my opinion, the best way is to do with a custom timer job. For more information, you can refer to the
    blog:
    http://www.splessons.com/2013/12/create-a-timer-job-in-sharepoint-2013/
    Thanks,
    Eric
    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support,
    contact [email protected]
    Eric Tao
    TechNet Community Support

  • Best way to determine insertion order of items in cache for FIFO?

    I want to implement a FIFO queue. I plan on one producer placing unprocessed Orders into a cache. Then multiple consumers will each invoke an EntryProcessor which gets the oldest unprocessed order, sets it processed=true and returns it. What's the best way to determine the oldest object based on insertion order? Should I timestamp the objects with a trigger when they're added to the cache and then index by that value? Or is there a better way? maybe something coherence automatically saves when objects are inserted? Also, it's not critical that the processing order be precisely FIFO, close is good enough.
    Also, since the consumer won't know the key value for the object it will receive, how could the consumer call something like this so it doesn't violate Constraints on Re-entrant Calls? http://wiki.tangosol.com/display/COH34UG/Constraints+on+Re-entrant+Calls
    Thanks,
    Andrew

    Ok, I think I can see where you are coming from now...
    By using a queue for each for each FIX session then you will be experiencing some latency as data is pushed around inside the cluster between the 'owning node' for the order and the location of the queue; but if this is acceptable then great. The number of hops within the cluster and hence the latency will depend on where and how you detect changes to your orders. The advantage of assiging specific orders to each queue is that this will not change should the cluster rebalance; however you should consider what happens if the node controlling a specific FIX session is lost - do you recover from FIX log? If so where is that log kept? Remember to consider what happens if your cluster splits, such that the node with the FIX session is still alive, but is separated from the rest of the cluster. In examining these failure cases you may decide that it is easier to use Coherence's in-built partitioning to assign orders to sessions father than an attribute of order object.
    snidely_whiplash wrote:
    Only changes to orders which result in a new order or replace needing to be sent cause an action by the FIX session. There are several different mechanisms you could use to detect changes to your orders and hence decide if they need to be enqueued:
    1. Use a post trigger that is fired on order insert/update and performs the filtering of changes and if necessary adds the item to the FIX queue
    2. Use a cache store that does the same as (1)
    3. Use an entry processor to perform updates to the order object (as I believe you previously mentioned) and performs logic in (1)
    4. Use a CQC on the order cache
    5. A map listener on the order cache
    The big difference between 1-3 and 4, 5 is that the CQC is i) a SPOF ii) not likely located in the same place as your order object or the queue (assuming that queue is in fact an object in another cache), iii) asynchronously fired hence introducing latency. Also note that the CQC will store your order objects locally whereas a map listener will not.
    (1) and (3) will give you access to both old and new values should that be necessary for your filtering logic.
    Note you must be careful not to make any re-entrant calls with any of 1-3. That means if you are adding something to a FIX queue object in another cache (say using an entry processor) then it should be on a different cache service.
    snidely_whiplash wrote:
    If I move to a CacheStore based setup instead of the CQC based one then any change to an order, including changes made when executions or rejects return on the FIX session will result in the store() method being called which means it will be called unnecessarily a lot. It would be nice if I could specify the CacheStore only store() certain types of changes, ie. those that would result in sending a FIX message. Anything like that possible?There is negligible overhead in Coherence calling your store() method; assuming that your code can decide if anything FIX-related needs to be done based only on the new value of the order object then this should be very fast indeed.
    snidely_whiplash wrote:
    What's a partitioned "token cache"?This is a technique I have used in the past for running services. You create a new partitioned cache into which you place 'tokens' representing a user-defined service that needs to be run. The insertion/deletion of a token in the backing map fires a backing map listener to start/stop a service +(not there are 2 causes of insert/delete in a backing map - i) a user ii) cluster repartitioning)+. In this case that service might be a fix session. If you need to designate a specific member on which a service needs to run then you could add the member id to the token object; however you must be careful that unless you write your own partitioning strategy the token will likely not live on the same cache member as the token indicates; in which case you would want a ful map listener or CQC to listen for tokens rather than a backing map listener
    I hope that's useful rather than confusing!
    Paul

  • Best way for Java/C++/C# to share data in a cache?

    I have an order processing application which listens for Order objects to be inserted in a cache. If I want Java, C# and C++ apps to be able to submit orders to that cache, what's the best way to set up that Order object? Orders currently have many Enum member variables. What happens when a C# or C++ app needs to put an Order object in the cache? how would it set those java enums? Also, the java Enum classes have a lot of Java specific code in 'em for convenience. I imagine for cross platform simplicity it might have been best if the Order object were just an array of Strings or a Map of Strings to values but I have too much code depending on the Order object being how it is currently. Should I extract an Order Interface? What about the Enums? My java enums aren't simple {RED,GREEN,BLUE} type enums, they contain references to other Enums, etc. - see below...
    A portion of my Order class looks like:
    public class Order implements Cloneable, Comparable, java.io.Serializable {
      private static Logger logger = Logger.getLogger(Order.class);
      private boolean clearedFromOpenOrdersTable = false; 
      private boolean trading_opened = false;
      private static Random generator = new Random();
      private static int nextID = generator.nextInt(1000000); //just for testing
      private int quantity = 0;
      private int open = 0;
      private int executed = 0;
      private int last = 0;
      private int cancelPriority = 0;
      private Integer sendPriority = 0;
    //enums
      private OrderSide side = OrderSide.BUY;
      private OrderType orderType = OrderType.MARKET;
      private OrderTIF tif = OrderTIF.DAY;
      private OrderStatus orderStatus = OrderStatus.PENDING_NEW;
      private OrderExchange orderExchange = null;
      private OOType ooType = OOType.NOTOO;
      private OOLevel ooLevel = OOLevel.NONE;
      private Float limit = new Float(0);
      private Float stop = null;
      private float avgPx = 0.0f;
      private float lastPx = 0.0f;
      private String account = null;
      private String symbol = null;
      private long submitTimestamp;
      private long fillTime = 0;
      private long ackTime = 0;
      private Timestamp submitSqlTimestamp;
      public /*final*/ static NamedCache cache;
      private ArrayList<OrderStatusChangeListener> statusChangeListeners =
        new ArrayList<OrderStatusChangeListener>();
      transient private Format formatter = new SimpleDateFormat("hh:mm:ss a");
      public static void connectToCache() {
        cache = CacheFactory.getCache("orders");
      public void send() {
        this.submitTimestamp = System.currentTimeMillis() ;
        this.submitSqlTimestamp = new Timestamp(submitTimestamp);
        cache.put(this.ID, this);
      public void setCancelCount(int i) {
        cancelCount = i;
      public int getCancelCount() {
        return cancelCount;
      public static class CancelProcessor extends AbstractProcessor {
        public Object process(InvocableMap.Entry entry) {
          Order o = (Order)entry.getValue();
          if (o.cancelCount == 0) {
            o.cancelCount = 1;
          } else {
            logger.info("ignoring dup. cancel req on " + o.symbol + " id=" + o.ID);
          return o.cancelCount;
      public void cancel() {
          // cache.invoke(this.ID, new CancelProcessor() ); // must this be a 'new' one each time?
          Filter f = new EqualsFilter("getCancelCount", 0);
          UpdaterProcessor up = new UpdaterProcessor("setCancelCount",new Integer(1) );
          ConditionalProcessor cp = new ConditionalProcessor(f, up);
          cache.invoke(ID, cp);
      NumberIncrementor ni1 = new NumberIncrementor("CancelCount", 1, false);
      public void cancelAllowingMultipleCancelsOfThisOrder() {
        System.out.println("cancelAllowingMultipleCancelsOfThisOrder symbol=" + symbol + " id=" + ID);
        cache.invoke(this.getID(), ni1);
      public Timestamp getSubmitSqlTimestamp(){
        return submitSqlTimestamp;
      boolean isWorking( ) {
           // might need to write an extractor to get this from the cache atomically
           if (orderStatus != null &&
                (orderStatus == OrderStatus.NEW || orderStatus == OrderStatus.PARTIALLY_FILLED ||
                    // including PENDING_CANCEL breaks order totals from arcadirect
                    // because they send a pending cancel unlike foc
                    // os.getValue() == OrdStatus.PENDING_CANCEL ||
                    orderStatus == OrderStatus.PENDING_NEW ||
                    orderStatus == OrderStatus.PENDING_REPLACE)) {
              return true;
            } else {
              return false;
      public long getSubmitTimestamp(){
        return submitTimestamp;
      private void fireStatusChange( ) {
              for (OrderStatusChangeListener x:statusChangeListeners) {
                    try {
                         x.dispatchOrderStatusChange(this );
                    } catch (java.util.ConcurrentModificationException e) {
                         logger.error("** fireStatusChange: ConcurrentModificationException "+e.getMessage());
                         logger.error(e.getStackTrace());
                         e.printStackTrace();
      public Order() {
          ID = generateID();
          originalID = ID;
      public Object clone() {
          try {
            Order order = (Order)super.clone();
            order.setOriginalID(getID());
            order.setID(order.generateID());
            return order;
          } catch (CloneNotSupportedException e) {
          return null;
        class ReplaceProcessor extends AbstractProcessor {
          // this is executed on the node that owns the data,
          // no network access required
          public Object process(InvocableMap.Entry entry) {
            Order o = (Order)entry.getValue();
            int counter=0;
            float limit=0f;
            float stop=0f;
            int qty=o.quantity;
            boolean limitChanged=false, qtyChanged=false, stopChanged=false;
            for (Replace r:o.replaceList) {
              if (r.pending) {
                counter++;
                if (r.limit!=null) {limit=r.limit; limitChanged=true;}
                if (r.qty!=null) {qty=r.qty; qtyChanged=true;}
                if (r.stop!=null) {stop=r.stop; stopChanged=true;}
            if (limitChanged) o.limit=limit;
            if (qtyChanged) o.quantity=qty;
            if (stopChanged) o.stop=stop;
            if (limitChanged || qtyChanged || stopChanged)
            entry.setValue(o);
            return counter;
      public void applyPendingReplaces() {
         cache.invoke(this.ID, new ReplaceProcessor());
      private List <Replace>replaceList;
      public boolean isReplacePending() {
        if (replaceList==null) return false; 
        for (Replace r:replaceList) {
          if (r.pending==true) return true;
        return false;
      class ReplaceAddProcessor extends AbstractProcessor {
        // this is executed on the node that owns the data,
        // no network access required
        Replace r;
        public ReplaceAddProcessor(Replace r){
          this.r=r;
        public Object process(InvocableMap.Entry entry) {
          Order o = (Order)entry.getValue();
          if (o.replaceList==null) o.replaceList = new LinkedList();
          o.replaceList.add(r);
          return replaceList.size();
      public void replaceOrder(Replace r) {
          //  Order.cache.invoke(this.ID, new ReplaceAddProcessor(r));
          Order o = (Order)Order.cache.get(this.ID);
          if (o.replaceList==null) o.replaceList = new LinkedList();
          o.replaceList.add(r);
          Order.cache.put(this.ID, o);
      public boolean isCancelRequestedOrIsCanceled() {
        // change to cancelrequested lock, not ack lock
        if (canceled) return true;
    //  ValueExtractor extractor = new ReflectionExtractor("getCancelCount");
    //  int cc = (Integer)cache.invoke( this.ID , extractor );
        Order o = (Order)cache.get(this.ID);
        int cc = o.getCancelCount();
        return cc > 0 || o.isCanceled();
        class Replace implements Serializable{
        boolean pending=true;
        public Float limit=null;
        public Float stop=null;
        public Integer qty=null;
        public Replace() {
      }and then a portion of my OrderExchange.java Enum looks like this:
    class SymbolPair implements java.io.Serializable {
      String symbol;
      String suffix;
      SymbolPair(String symbol, String suffix) {
        this.symbol = symbol;
        this.suffix = suffix;
      public boolean equals(Object o) {
        SymbolPair x = (SymbolPair)o;
        return (this.symbol == x.symbol && this.suffix == x.suffix);
      public int hashCode() {
        return (symbol + "." + suffix).hashCode();
      public String toString() {
        if (suffix == null)
          return symbol;
        return symbol + "." + suffix;
    public enum OrderExchange implements java.io.Serializable {
      SIM("S", false, '.', OrderTIF.DAY) {
        public String getStandardizedStockSymbol(String symbol, String suffix) {
          return symbol + "." + suffix;
        public SymbolPair getExchangeSpecificStockSymbol(String symbol) {
          return new SymbolPair(symbol, null);
      TSX("c", false, '.', OrderTIF.DAY) {
        public String getStandardizedStockSymbol(String symbol, String suffix) {
          String x = externalSymbolPairToInternalSymbolMap_GS.get(new SymbolPair(symbol, suffix));
          return x == null ? symbol : x;
        public SymbolPair getExchangeSpecificStockSymbol(String symbol) {
          SymbolPair sa = internalSymbolToExternalSymbolPairMap_GS.get(symbol);
          return sa == null ? new SymbolPair(symbol, null) : sa;
      NYSE("N", false, '.', OrderTIF.DAY) {
        public String getStandardizedStockSymbol(String symbol, String suffix) {
          String x = externalSymbolPairToInternalSymbolMap_GS.get(new SymbolPair(symbol, suffix));
          return x == null ? symbol : x;
        public SymbolPair getExchangeSpecificStockSymbol(String symbol) {
          SymbolPair sa = internalSymbolToExternalSymbolPairMap_GS.get(symbol);
          return sa == null ? new SymbolPair(symbol, null) : sa;
      ARCA("C", false, '.', OrderTIF.GTD) {
        public String getStandardizedStockSymbol(String symbol, String suffix) {
          String x = externalSymbolPairToInternalSymbolMap_GS.get(new SymbolPair(symbol, suffix));
          return x == null ? symbol : x;
        public SymbolPair getExchangeSpecificStockSymbol(String symbol) {
          SymbolPair sa = internalSymbolToExternalSymbolPairMap_GS.get(symbol);
          return sa == null ? new SymbolPair(symbol, null) : sa;
      public abstract String getStandardizedStockSymbol(String symbol, String suffix);
      public abstract SymbolPair getExchangeSpecificStockSymbol(String symbol);
      private static Map<SymbolPair, String> externalSymbolPairToInternalSymbolMap_GS = new HashMap<SymbolPair, String>();
      private static Map<SymbolPair, String> externalSymbolPairToInternalSymbolMap_ARCA = new HashMap<SymbolPair, String>();
      private static Map<String, SymbolPair> internalSymbolToExternalSymbolPairMap_GS = new HashMap<String, SymbolPair>();
      private static Map<String, SymbolPair> internalSymbolToExternalSymbolPairMap_ARCA = new HashMap<String, SymbolPair>();
      private static Object[] toArrayOutputArray = null;
      static {
        String SQL = null;
        try {
          Connection c = MySQL.connectToMySQL("xxx", "xxx", "xxx", "xxx");
          SQL = "SELECT symbol, ARCASYMBOL, INETSYMBOL, ARCASYMBOLSUFFIX, INETSYMBOLSUFFIX from oms.tblsymbolnew";
          Statement stmt = c.createStatement();
          ResultSet rs = stmt.executeQuery(SQL);
          while (rs.next()) {
            String symbol = rs.getString("symbol");
            if (rs.getString("ARCASYMBOL") != null) {
              if (!symbol.equals(rs.getString("ARCASYMBOL")) || rs.getString("ARCASYMBOLSUFFIX") != null) {
                String suffix = rs.getString("ARCASYMBOLSUFFIX");
                SymbolPair sp = new SymbolPair(rs.getString("ARCASYMBOL"), suffix);
                internalSymbolToExternalSymbolPairMap_ARCA.put(symbol, sp);
                externalSymbolPairToInternalSymbolMap_ARCA.put(sp, symbol);
        } catch (Exception e) {
          System.out.println(SQL);
          e.printStackTrace();
          System.exit(0);
      static {
        populateSymbolToDestination();
      static Logger logger = Logger.getLogger(OrderExchange.class);
      private static HashMap<String, OrderExchange> symbolToDestination = new HashMap<String, OrderExchange>();
      private final String tag100;
      private final boolean usesSymbolSuffixTag;
      private final char symbolSuffixSeparator;
      private final OrderTIF defaultTif;
      private static final String soh = new String(new char[] { '\u0001' });
      private OrderExchange(String tag100, boolean usesSymbolSuffixTag, char symbolSuffixSeparator, OrderTIF defaultTif) {
        this.tag100 = tag100;
        this.defaultTif = defaultTif;
        this.usesSymbolSuffixTag = usesSymbolSuffixTag;
        this.symbolSuffixSeparator = symbolSuffixSeparator;
      public OrderTIF getDefaultTif() {
        return defaultTif;
      public String getTag100() {
        return tag100;
      public char getSymbolSuffixSeparator() {
        return symbolSuffixSeparator;
      public static OrderExchange getOrderExchangeByExchangeName(String name) {
        for (OrderExchange d : OrderExchange.values()) {
          if (d.toString().equalsIgnoreCase(name.trim())) {
            return d;
        return null;
      Thanks,
    Andrew

    Hi Andrew
    The only way to serialize object, so that they can be used by other languages than Java is to use the Portable Object Format.
    The implementation of this requires you to implement the PortableObject interface in Java. PortableObject defines two methods
    public void readExternal(PofReader reader);
    public void writeExternal(PofWriter writer);
    Also you need to add a POF config file that ties the type to a type id.
    In C++ each type needs two template methods implemented to seralize and deserialize. But first it needs to register the data type with the same type id as for the Java type using the COH_REGISTER_MANAGED_CLASS macro.
    Secondly analogs to Java implement the serializer stubs
    template<> void serialize<Type>(PofWriter::Handle hOut, const Type& type);
    template<> Type deserialize<Type>(PofReader::Handle hIn);
    For C# your serializable types need to implement IPortableObject, with it's two methods:
    void IPortableObject.ReadExternal(IPofReader reader);
    void IPortableObject.WriteExternal(IPofWriter writer);
    Similar to Java C# uses a POF configuration file, the same type id should bind to the corresponding C# type.
    For more information see
    POF Configuation: http://coherence.oracle.com/display/COH34UG/POF+User+Type+Configuration+Elements
    C++: http://coherence.oracle.com/display/COH34UG/Integrating+user+data+types
    C#: http://wiki.tangosol.com/display/COHNET33/Configuration+and+Usage#ConfigurationandUsage-PofContext
    Hope that helps!
    /Charlie
    Edited by: Charlie Helin on Apr 30, 2009 12:31 PM

  • What is the best way to scan and sort old photos in iPhoto

    What is the best way to scan and sort old photos in iPhoto?  They do not have digital dates.

    Hey Chicago Sue,
    Once you scan them and have them on your desktop. You should use Automator and assign the common IPTC tags to the images, so that when you do import them into iPhoto, they get recorded.
    Here is an example of an action in Automator:

  • What is the best way to create a SSRS 2005 Line Chart Report for a 12 month period?

    I'm looking for advice on how to create a SQL Server 2005 query and line chart report for SSRS 2005.
    I need to display the peak number of patients assigned to a medical practice each month for a 12 month period based on the end-user selecting a
    single month and year.
    I've previously created a report that displays all patients assigned to the practice for any single month but I’m looking for advice on how to
    how to produce a resultset that shows the peak number of patients each month for a 12 month period. I thought about creating a query that returns the peak count for each month (based on my previously created report which displays all patients assigned to the
    practice for any single month) and then use a UNION statement to join all 12 months but I'm sure that isn't the most efficient way to do this. The other challenge with this approach (twelve resultsets combined via a UNION) is that the end-user needs to be
    able to select any month and year for the parameter and the report needs to display the 12 month period based on the month selected (the month selected would be the last month of the 12 month period).
    For the report I’ve previously created that displays all patients assigned to the practice for any single month, the WHERE statement filters the
    resultset on two fields:
    Start Date - The date the patient was assigned to the practice. This field is never null or blank.
    End Date - The date the patient left the practice. This field can be null or blank as active patients assigned to the practice do not have an End Date. When the patient
    leaves the practice, the date the patient left is populated in this field.
    Using these two fields I can return all patients assigned to the practice during Nov 2012 by looking for patients that meet the following criteria:
    start date prior to 11/30/2012 (using the last day of the month selected ensures patients added mid-month would be included)
    AND
    end date is null or blank (indicates the patient is active) OR the end date is between 11/1/2012 -11/30/2012 (returns patients that leave during the month
    selected)
    Regarding the query I need to create for the report that displays the peak count each month for 12 months, I'm looking for advice on
    how to count patients for each month the patient is assigned to the practice if the patient has been assigned for several months (which applies to most patients). Examples are:
    John Doe has a start date of 6/01/2012 and an End Date of 10/07/2012
    Sally Doe has a start date of 8/4/2012 and no End Date (the patient is still active)
    Jimmy Doe has a  start of 7/3/2012 and an End Date of 9/2/2012
    Given these examples how would I include John Doe in the peak monthly count each month for May - October, Sally Doe in the peak monthly count for
    August - December and Jimmy Doe in the peak monthly count for July – Sept if the end-user running the report selected December 2012 as the parameter?
    Given the example above and the fact I'm creating a line chart I think the best way to create this report would be a resultset that looks like
    this:
    Patient Name              
    Months Assigned
    John Doe
    June 2012
    John Doe                     
    July012
    John Doe                     
    Aug 2012
    John Doe                     
    Sept 2012
    John Doe
    Oct 2012
    Sally Doe                     
    Aug 2012
    Sally Doe                     
    Sept 2012
    Sally Doe
    Oct 2012
    Sally Doe                     
    Nov 2012
    Sally Doe
    Dec 2012
    Jimmy Doe                  
    July 2012
    Jimmy Doe
    Aug 2012
    Jimmy Doe
    Sept 2012
    From the resultset above I could create another resultset that would count\group on month and year to return the peak count for each month:
    June 2012 - 1
    July 2012 – 2
    Aug 2012 - 3
    Sept 2012 - 3
    Oct 2012 - 2
    Nov 2012 - 1
    Dec 2012 - 1
    The resultset that displays the peak count for each month would be used to create the line chart (month would be the X axis and the count would
    be the y axis).
    Does this sound like the best approach?
    If so, any advice on how to create the resultset that lists each patient and each month they were assigned to the practice would be greatly appreciated.
    I do not have permissions to create SPs or Functions within the database but I can create temp tables.
    I know how to create the peak monthly count query (derived from the query that lists each patient and month assigned) as well as the line chart.
    Any advice or help is greatly appreciated.

    Thanks for the replies. I reviewed them shortly after they were submitted but I'm also working on other projects at the same time (hence the delayed reply).
    Building a time table and doing a cross join to my original resultset gave me the desired resultset of the months assigned between dates. What I can't figure out now is how to filter months I don't want. 
    Doing a cross  join between my original resultset that had two dates:
    08/27/2010
    10/24/2011
    and a calendar table that has 24 rows (each month for a two year period)
    my new resultset looks like this:
    I need to filter the rows in yellow as the months assigned for stage 3 that started on 8/27/2010 should stop when the patient was assigned to stage 4 on 10/24/2011.
    You'll notice that Jan - Sept 2011 isn't listed for Stage 4 assigned on 10/24/2011 as I included a filter in the WHERE clause that states
    the Months Assigned value must be greater than or equal to the date assigned value.
    Any advice would be appreciated.

  • What's the best way to (re)install Logic Studio? Need Help.

    I bought Logic Studio a few months ago and installed it on my new MacBook Pro 2.4Ghz with 2G Ram, 160G hard drive @ 7200 rpm. Being new to Logic, at install, I just put all 40+ gigs of content on the computer. After a while I considered putting the Apple Loops (roughly 12gigs) onto an external hard drive to save space on my computer, just to see if it would work, then consider moving more content over later. After doing this the Logic application couldn't find the Apple Loops, and I couldn't find a way to help it see the new path, so my Apple Loops were essentially rendered useless (since I had already deleted them from the computer). So I stopped right there, and haven't done anything else. Just worked with Logic without using Loops, which I have to say is still an incredible program.
    What also seemed strange was this: In moving the Apple Loops, the available disk space on the computer didn't seem to change much. It went down a few gigs, but not the 12 or so I was expecting. Not sure why that is. It seems like Logic and all the content is actually taking up around 50 gigs or so on my computer (and the Apple Loops are supposedly gone or not available). What is that about?
    Feeling like I had really fouled things up, I called Apple Care. They said that the content of Logic is stored in many places in the computer's libraries and system folders, but it was really confusing trying to locate all of it, because the info they sent was from Logic 7 and older versions of GarageBand. I guess Logic 8 is too new for them to have anything on it. There is no uninstall for Logic Studio. But they strongly recommended that I perform an Erase and Install, and then re-install all my software including Logic, and then assign the hard drive I wanted the content in. That would open up a lot of the computer's hard drive space, they said. It seemed like an extreme measure to take for such a small blunder, and I haven't tried it yet, but will if it's the best option.
    If I do this, is running Logic content (i.e. Loops, Impulse Responses, Jam Packs, etc.) from an external hard drive (and the one I have to use is 5400rpm--is that too slow or am I getting too picky?) the best way to go, or should I have all Logic material coming from the same machine? How do I get some of my hard drive space back?
    Ugh.
    Has anyone out there experienced this too? Is there anything documented about where the content is stored for Logic Studio? Is Erase and Install really the best thing to do in this situation?
    So many questions...
    Thanks.

    Hey Blue,
    Let me see if I can help you a bit.
    Logic Studio has 28+ gb of loops. Almost 23 for STP and 6 for the Jam Packs, etc. They should be located in /Library/Audio/Apple Loops/Apple (that's the default install loc.). Copy them to an external drive and then delete them from your main drive. Go to /Library/Audio/Apple Loops Indexes and delete those text files. Now go to /Library/Preferences/Soundtrack Pro and delete those text files, too (more Loop Indexes).
    Now open Logic Pro and it will say 'No Apple Loops found'. Click 'OK' and then open your Loop Browser. Drag all the Jam Pack folders, STP folder, etc. that you want to use onto the Loop Browser. Logic will ask you if you want to 'Copy to Loops Folder' or 'Current Location'. Choose 'Current Location'. Logic will now index the loop folders.
    NOTE: You can change the names of the folders to suit your liking. For example: I added the 2, 3, 4, 5 after the Jam Pack names to make it look smoother on the popup menu and changed iLife Sound Effects to Sound Effects - iLife and Apple Loops for STP to STP. Now the Jam Packs 1-5 come up first on the popup menu and the FX stay at the bottom. I likee!!
    Now, if you like you can take your EXS Factory Samples and Ultrabeat Samples, 3.35 & .889 gb respectively, and copy them to an external drive. I have mine in the same place as my Jam Packs, etc. You can find these files in /Library/Application Support/Logic. Toss out the originals and put ALIASES from the external drive back into the /Lib/App Sup/Logic folder.
    Also, if you open STP and click the Search tab in the right pane you will see a button that says 'Setup' next to it. Click that and you can use the checkboxes in the window to activate/deactivate any of the loop folders available.
    A clean install is the best IMO if you have a little time because a) you DO NOT have to install GB at all (that saves the .aif file size - Logic Studio uses .caf files at half the size of the originals) b) Logic Studio will install the extra GB or Logic 7 content if you need it at it's reduced size. It will basically get rid of all the old clutter that you do not need. Only install what JP's you want and move the bigger stuff to an external.
    Rock up Logic and it should all be in place. That procedure saved me 32.5 gb on my main drive.
    NOTE #2: You have another 12 gb (if you installed all Jam Packs) that reside in the /Library/Application Support/GarageBand/Instrument Library/Sampler. These are the Jam Pack Instruments & Sampler files for World, Symphony, etc. They cannot be moved from the startup HD (as far as I can tell). So keep that in mind if you don't want a certain JP.
    Hope that helps,
    Dave

  • What is the best way to import a graphic? & How do I create a text frame for a figure caption?

    Hello all! I've been working from the FM book for almost 2 hrs trying to figure this out, so now I need your help. I am almost to this point:
    Problem I: Importing a graphic
    First of all, which is the best way?
    -Insert an anchor frame and then import the graphic into the frame OR
    -Just insert the graphic and get the anchor frame by default
    Here’s my importing and sizing problem:
    I hit ENTER to make a new paragraph line (side note: the book says make a new paragraph by hitting ENTER, import the graphic, and then ESC m+p to shrink wrap so that you can avoid the graphic overlapping the above text. I do exactly this (I believe), but my graphic still overlaps the above text when I shrink wrap. What the...?)
    I insert an anchored frame with position Below Current Line and alignment CENTER (I chose to the insert anchor frame, since this way I have control over its alignment, correct?)
    Anchor frame is selected when I import my image file
    In the Imported Graphic Scaling box, what do I select if my file is HUGE (3072x2304)?
    -Fit in selected rectangle (when I choose this the image imports small and fits in the anchored frame with lots of white space around it)
    -72 dpi
    -75 dpi
    -150 dpi
    -300 dpi
    -Custom dpi: 96 (I’ve tried changing this to a smaller number (20) and I get a message that says “cannot handle a bitmap of that size.”)
    I’ve had the best luck with selecting FIT IN SELECTED RECTANGLE, and then I just scale the image with my shift+click. If I choose 72 dpi or Custom, my image imports HUGE, and I just can’t manage it. I don’t have a method for resizing these images outside of FM.
    Problem II: Creating a text frame for a caption
    Once I have chosen FIT IN SELECTED RECTANGLE, I try to insert a text box underneath the image (and inside the anchor frame) to type a caption in it.
    In Create New Text Frame box, the default is Number 1 and Gap 0.25. I click SET.
    Next, I double-click inside the text frame to begin typing, but the cursor is OUTSIDE and UNDERNEATH the text frame! What the heck??? I’ve done this before and it has worked just fine. Then I had another problem where when I did get the text inside the text frame, I would select the text frame to move it, and it left the text behind! (I moved the frame but the text was separated from it and left behind.)
    THANK YOU in advance for your help. I hope I wrote this out clearly enough. I appreciate those who respond. P.S. I'm in FM 10.

    My favorite method is to use a one-cell table for graphics and captions.
    Import the graphic by reference into the table cell. Create a "Caption"
    paragraph tag and assign it to the table title. (The title can be set
    for above or below the table cell. I prefer below.) Now, whenever you
    insert this table, it will be ready for graphic and caption. Another
    advantage of this method is that graphic and caption always stay
    together at page/column breaks.
    When you create the table format above, assign it to have a -2.0 space
    above. Then, create a paragraph tag, such as "TableAnchor" and assign it
    -2.0 pt font size and -2.0 space below. (You can substitute a different
    point size, but it must be the same in all three places. The TableAnchor
    paragraph will hold the table and these settings let tables fit against
    the top margin where necessary. Otherwise, they dip down a bit.
    I wrote this from memory, so I hope I remembered all the steps!

Maybe you are looking for

  • PO report with PO confirmations

    Is there a report that will inlcude the confirmed date/qty for a PO line? I tried ME2L, ME2N and the delivery date is the statistical one only... Thank you!

  • My iPhone4 gives the message This accessory may not be supported

    Phone has been working perfectly until three days ago, while charging the message 'This accessory may not be supported' appeared after two minutes and it then stops charging.  I have tried two different Apple chargers both into mains socket and into

  • Document window sizing/position on opening a file

    I use a custom workspace with all the CS5 apps that I use (InDesign, Illustrator, Photoshop, and Dreamweaver), with a dual monitor setup. I prefer to have the Control bar at the bottom instead of the top and the application bar always off, so that th

  • Rename Logical Schema / Logical Agent

    Hi, is it possible to rename a logical schema / logical agent? Thanks in advance & kr Michael

  • Managing Per Line Unblocking (*82) in Contacts

    After many years of waiting on Apple, and then my contract upgrade date, I now have an iPhone on VZW.  I'm fairly familiar with iOS from my iPod touch, but have a question on the phone side. I've got "Per Line Blocking" turned on to try to prevent my