Synchronizing Data

Problem: When two different web applications are running and one person inserts a record, the other person doesn't see the record unless they reload the application. How do I permit one user to enter information and on the next action of the second user to see the information.
Basically I have a "users" table. If we are both editing this table or viewing it, we should be able to see any and all changes that have been made.
Thanks in advance for your help.
Joe

One possibility.....
Create a timer to re-execute the query on the RowSetInfo object at a given time interval. This will retrieve any changes that the other person has made.
(I would setup the timer to only re-execute the query if the current session/rowset is NOT dirty (i.e. no changes pending))
If a user tries to modify a record that was changed by another user, the built in error trapping will pick this up. I am not sure if this automatically queries on not. If not, you can try to trap this error and re-execute the query programatically. (I am not sure how to do thi, but there have been previous posts on customizing/trapping JBO errors)
Hope this helps

Similar Messages

  • Synchronous data exchange over JCaps without TCP/IP or WebService...

    Hi all,
    the subject may sound like a little crazy request, but that is what we actually need.
    Just to explain: we have a SAP R/3 system running (v. 4.72) which is not able to call Web Services and is also not able to open a TCP/IP-connection to a foreign host to exchange data.
    But what we need is a synchronous data exchange as, after pressing a button in SAP, we should query some database tables of another sub-system with JCaps and send back the received information to SAP.
    Do you have any ideas out there how this synchronous request from SAP to JCaps can be fullfilled with JCaps (our version is 5.1.3)?!
    We thought about using a HTTP server on the JCaps side, where SAP just sends a HTTP-request on the specified address and then we could use the data received from this call, to get data from the sub-system and then send it back to SAP over an RFC or something similar - that is the easier part (sending data back to SAP). The harder part, in my opinion, is to create a possibility for SAP to call JCaps immediately - so not asynchron, which we already implemented over a file export...
    So, is it possible to use HTTP-server from JCaps for our needs?! Or is there another, easier possibility?!
    Any help highly appreciated...
    Regards
    Bernhard Böhm

    Hi Chris,
    thanks for the input - we also have a similar thing running, also using our BW-Server (SAP ERP 6.0) as the "web service engine"....
    But now, we want a solution without another server (like the BW in the upper case) involved!
    So, we thought about using HTTP-server on the JCaps-side which should be invoked by a simple HTTP-request from SAP (also possible in 4.72).
    Now I tried to setup a simple HTTP-Server project in JCaps 5.1.3 and it is making me crazy right now...
    I just do not get it to work - all I would do is a simple JCD that just print a line in the log-file when started. The JCD has just a "processRequest"-method from HTTPS-Server-eWay. In the connectivity map I did set up the connection to the HTTP-Server with the servlet-url-name - property:
    http://localhost:18001/dpListenHTTP_servlet_HttpServerServlet (like described in the userGuide).
    But when trying to build the project I get this error:
    com.stc.codegen.framework.model.CodeGenException: code generation error at = HTTP_Listen_cmListenHTTP_jcListenHTTP1 - HTTP Server e*Way Code GeneratorProblem creating war: C:\temp\dpListenHTTPprj_WS_serTestHTTP\12217262314811\WEB-INF\classes\..\dpListenHTTP_servlet_http:\localhost:18001\dpListenHTTP_servlet_HttpServerServlet.war (The filename, directory name, or volume label syntax is incorrect) (and the archive is probably corrupt but I could not delete it)
         at com.stc.codegen.frameworkImpl.model.CodeGenFrameworkImpl.process(CodeGenFrameworkImpl.java:1569)
         at com.stc.codegen.frameworkImpl.model.DeploymentVisitorImpl.process(DeploymentVisitorImpl.java:405)
         at com.stc.codegen.frameworkImpl.model.DeploymentVisitorImpl.process(DeploymentVisitorImpl.java:308)
         at com.stc.codegen.frameworkImpl.model.DeploymentVisitorImpl.traverseDeployment(DeploymentVisitorImpl.java:268)
         at com.stc.codegen.driver.module.DeploymentBuildAction.loadCodeGen(DeploymentBuildAction.java:923)
         at com.stc.codegen.driver.module.DeploymentBuildAction.access$1000(DeploymentBuildAction.java:174)
         at com.stc.codegen.driver.module.DeploymentBuildAction$1.run(DeploymentBuildAction.java:599)
         at org.openide.util.Task.run(Task.java:136)
         at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:599)
    Caused by: Problem creating war: C:\temp\dpListenHTTPprj_WS_serTestHTTP\12217262314811\WEB-INF\classes\..\dpListenHTTP_servlet_http:\localhost:18001\dpListenHTTP_servlet_HttpServerServlet.war (The filename, directory name, or volume label syntax is incorrect) (and the archive is probably corrupt but I could not delete it)
         at org.apache.tools.ant.taskdefs.Zip.executeMain(Zip.java:509)
         at org.apache.tools.ant.taskdefs.Zip.execute(Zip.java:302)
         at com.stc.codegen.frameworkImpl.model.util.AntTasksWrapperImpl.war(AntTasksWrapperImpl.java:404)
         at com.stc.connector.codegen.httpserveradapter.HSEWCodelet.generateFiles(HSEWCodelet.java:608)
         at com.stc.codegen.frameworkImpl.model.CodeGenFrameworkImpl.processCodelets(CodeGenFrameworkImpl.java:640)
         at com.stc.codegen.frameworkImpl.model.CodeGenFrameworkImpl.process(CodeGenFrameworkImpl.java:1546)
         ... 8 more
    Caused by: java.io.FileNotFoundException: C:\temp\dpListenHTTPprj_WS_serTestHTTP\12217262314811\WEB-INF\classes\..\dpListenHTTP_servlet_http:\localhost:18001\dpListenHTTP_servlet_HttpServerServlet.war (The filename, directory name, or volume label syntax is incorrect)
         at java.io.FileOutputStream.open(Native Method)
         at java.io.FileOutputStream.<init>(FileOutputStream.java:179)
         at java.io.FileOutputStream.<init>(FileOutputStream.java:131)
         at org.apache.tools.zip.ZipOutputStream.<init>(ZipOutputStream.java:252)
         at org.apache.tools.ant.taskdefs.Zip.executeMain(Zip.java:407)
         ... 13 moreAnyone any idea how to set up a HTTP-server-project?!
    Thanks and regards
    Bernhard Böhm

  • Synchronous data collection using pci-6143's

    I can set up synchronous data collection across the analog inputs of my three PCI-6143's using a separate task for each board and explicitly sharing the master timebase from board 1 (the one receiving the trigger to start data collection) to the other 2.  Then I need 3 read channel VI's etc. 
    The DAQ Assistant will configure all the AI channels to work inside one task across the three boards, which is very convenient, but I lose the synchronicity.  Specifically, the device triggering the data collection (board 1), leads the other two boards by a few microseconds.  How can I use a single task for all three boards for analog input (voltages) while retaining completely synchronous data collection?  Thanks!

    Hi Brian_g,
    You should be able to synchronize your SMIO cards by including them in the same task this way. You will have to type in the names, ie "Dev1\ai0:7, Dev2\ai0:7, Dev3\ai0:7" and still specify the start trigger off of your master device. I would work from the "Cont Acq & Graph Int Clk.vi" example and add in the digital trigger.
    Please post back if this does not resolve your issue or I didn't answer your question.
    Cheers,
    Andrew S.
    National Instruments
    Getting Started with NI-DAQmx
    Measurement Fundamentals

  • Can I take synchronous data from 2 NI9215/USB-9162's using VI-Logger Lite

    I am a total noob, so this may be posted (although I have done a search and can not find the direct answer)
    We have 2 NI-9215 / USB-9162 devices that we want to take synchronous
    data from using VI Logger.  When these devices were sold to us, we
    were told that this was possible, but it appears as if it is not. 
    Both devices appear in the Devices and interfaces pull down, and I can
    operate either one of them separately, but not together.
    Thanks

    Hi Ted,
    Since you have to run the two acquisitions in different tasks, they are run independently and cannot be synchronized.  Is there a way for you to specify a start trigger for the task?  Also, what do you mean that "it doesn't like running two tasks at once"?  Does it slow down your computer performance?  What are the specs of your computer?
    Regards,
    Nicholas B, National Instruments

  • Indesign CS4 - Error Synchronizing Data Panels

    I have a user who is trying to synchronize their data panels which are stored on a file server. This has worked for the past few months, but yesterday she suddenly got the error that says 'Error writing data panel.' That is the only information given in the error message. The user has permission for full control over all files and folders where the data panels are located. Indesign has the correct path in its settings to the panels. Any ideas would be much appreciated.

    I don't actually know waht a "data panel" is in ID? Could you explain it to me? is that the EXACT error message that you receive?

  • Missing Sync vs. PocketMac For Synchronizing Data between Blackberry and MAC

    I'm looking for software to synchronize contacts, events, appointments, notes, tasks, etc., between my Blackberry Curve (8330 Series) and my iMac (MAC OS X 10.5.5).  I've investigated Missing Sync and it certainly would work.  Today I was advised that PocketMac will accomplish the same thing.  So, I'm looking for a recommendation on the advantages/disadvantages of either or both packages.
    Regards - rockberry 
    Solved!
    Go to Solution.

    Both applications work well. Try PocketMac first and if it doesn't live up to your needs, move to Missing Sync.
    1. If any post helps you please click the below the post(s) that helped you.
    2. Please resolve your thread by marking the post "Solution?" which solved it for you!
    3. Install free BlackBerry Protect today for backups of contacts and data.
    4. Guide to Unlocking your BlackBerry & Unlock Codes
    Join our BBM Channels (Beta)
    BlackBerry Support Forums Channel
    PIN: C0001B7B4   Display/Scan Bar Code
    Knowledge Base Updates
    PIN: C0005A9AA   Display/Scan Bar Code

  • Automatic synchronizing date and time

    If this feature is not provided by the carrier, is there another way to get automatically synchronization to accurate time? I did not find any apps to sync the internal clock.

    Hi eagink,
    If it is just the one cell delete the data, reformat the cell and reenter the date/time. You are right tht there is soething in that cell thta Numbers will not recognize as date/time. If you need further help how about a screenshot of the stubborn cell?
    quinn

  • How do I make synchronous data calls

    Hi for making synchronous call with java method from as file
    i got example from
    http://www.adobe.com/devnet/flex/articles/flexfaq.html
    link 31Q. But i am not able to set with mxml file(how to). Can
    anybody send me the sample example code for this.
    Thanks

    Flex allows you to invoke remote calls to your business tier
    in either an asynchronous or synchronous manner. By using an
    asynchronous remote call, the user has the ability to perform some
    action on the client and not be blocked as happens in traditional
    web applications. You can block the user from interacting with the
    UI using synchronous calls where appropriate.
    i think here is the perfect tutorial for u on this link
    http://www.onjava.com/pub/a/onjava/2004/12/01/flexjava.html?page=2

  • Synchronizing data acquisition&waveform generation

    I'm attempting to synchronize analog waveform generation and analog data acquisition using an AT-MIO-16E-1 board. I've followed the instructions in the manual on how to do this but with no luck (maybe the VI I wrote is incorrect).
    Any suggestions?

    Have you taken a look at the Simultaneous AI/AO examples that ship with NI-DAQ? They can be found in Examples>>I/O Interfaces>>Data Acquisition>>Simultaneous AI/AO. They will give you some examples of how to program your board.
    Regards,
    Erin

  • Synchronizing data between viewStack elements

    When a user clicks on a container built with repeated array
    collection
    elements in one viewStack layer, the selected element needs
    to be
    utilized to populate the data in a second viewStack layer and
    vice-a-versa.
    Conceptually how does one do this? Do I set some type of
    global
    variable|pointer or pass the objects from one view to the
    other somehow
    or can one view layer be aware of another's data?
    I suspect this is not a detailed enough description, please
    feel free to
    ask questions to help me describe the specifics.

    michael_ramirez44 wrote:
    > Could you provide a small example of what you are trying
    to do?
    As promised, a concept of what I am trying to do. As you can
    see in my
    root application, MobileCalendar.mxml, I am getting data from
    a
    RemoteObject call. This is returning an array collection
    consisting of
    28, 35 or 42 elements. Each element is an object containing
    several
    properties, including one which is also an array collection.
    Then I
    define a two element view stack.
    In the first view stack element is the Calendar.mxml
    container which
    uses the array collection in a repeater control to create a
    DayBox
    container for each element. Inside the DayBox.mxml container
    is
    repeater control that uses the array collection property of
    the element
    used to create each DayBox.
    Then there is the second element of the view stack that will
    be a
    'detail' view based on which element was selected in the
    above DayBox.
    In this Details.mxml there is a two element HDividedBox. The
    first
    element will display the details of the element used to
    create the
    daybox that contains the element the user selected, and the
    second
    element will display the details of the sub element the user
    selected.
    I have this currently working by using global variables to
    store
    references|copies? of the selected element. What I'm hoping
    to discuss
    is the merits of this concept and possible other techniques.
    Thanks to anybody you read all this. Not as short as I hoped.
    MobileCalendar.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="
    http://www.adobe.com/2006/mxml"
    layout="absolute"
    minWidth="940" creationComplete="getCalendar()"
    xmlns:mcViews="Flex.Views.*">
    <mx:RemoteObject
    id="mobCalCFC"
    destination="ColdFusion"
    source="CFC.MobileCalendar"
    showBusyCursor="true"
    fault="mobCalCFC_faults(event)">
    <mx:method name="test" result="test_handler(event)"/>
    <mx:method name="getDays"
    result="getDays_handler(event)"/>
    </mx:RemoteObject>
    <mx:ViewStack id="mobileCalendarViewStack" left="10"
    top="10"
    bottom="10" right="10">
    <mcViews:Calendar
    id="calendarDisplay" label="Mobile Calendar"
    width="100%" minWidth="0"
    height="100%" minHeight="0" />
    <mcViews:Details
    id="eventDetails" label="Details"
    width="100%" minWidth="0"
    height="100%" minHeight="0" />
    </mx:ViewStack>
    </mx:Application>
    Calendar.mxml
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Panel
    xmlns:mx="
    http://www.adobe.com/2006/mxml"
    layout="vertical"
    title="Mobile Calendar"
    left="10" top="10" bottom="10" right="10"
    xmlns:mcViews="Flex.Views.*">
    <mx:VBox width="100%" height="{parentDocument.height -
    195}"
    paddingLeft="5">
    <mx:Repeater
    id="weekRows"
    dataProvider="{weekStartsAry}">
    <mx:HBox width="100%" horizontalGap="5">
    <mx:Repeater id="dayCells"
    dataProvider="{parentApplication.daysAry}"
    startingIndex="{weekRows.currentItem}" count="7">
    <mcViews:DayBox
    dayData="{dayCells.currentItem}"
    width="14.25%" minWidth="0"
    height="100%" minHeight="0"/>
    </mx:Repeater>
    </mx:HBox>
    </mx:Repeater>
    </mx:VBox>
    </mx:Panel>
    DayBox.mxml
    <mx:VBox
    xmlns:mx="
    http://www.adobe.com/2006/mxml"
    borderStyle="solid"
    horizontalScrollPolicy="off"
    backgroundColor="white">
    <mx:HBox horizontalAlign="right"
    backgroundColor="{(dayData.inMonth) ?
    0x002649 : 0x8093A4}" width="100%">
    <mx:Repeater id="draws"
    dataProvider="{dayData.drawsQry}">
    <mx:VBox
    id="drawDetails"
    verticalGap="0"
    paddingLeft="5" paddingRight="5"
    click="viewDetails(dayData,event.currentTarget.getRepeaterItem())"
    styleName="{draws.currentItem.N_LOC_AREA}">
    <mx:Label
    text="{draws.currentItem.R_MOB_MNAME}"
    toolTip="{draws.currentItem.R_MDL_MOBLID}&#13;{draws.currentItem.R_MOB_MNAME}&#13;AM:
    {draws.currentItem.R_RCT_NAME}"
    width="100%" minWidth="0"
    truncateToFit="true"/>
    </mx:VBox>
    </mx:Repeater>
    </mx:VBox>
    Details.mxml
    <mx:HDividedBox
    xmlns:mx="
    http://www.adobe.com/2006/mxml"
    x="0" y="0"
    xmlns:mcView="Flex.Views.*">
    <mcView:Detail_Day
    id="showme"
    x="0" y="185"
    width="20%" minWidth="0"
    height="100%" minHeight="0"/>
    <mx:Panel
    title="{parentApplication.displayDraw.R_MOB_MNAME}"
    width="80%" minWidth="0"
    height="100%" minHeight="0"
    layout="absolute">
    </mx:Panel>
    </mx:HDividedBox>

  • Synchronizing data to the iPhone

    Hi there!
    Is there a thing like the MS Sync. Framework for iPhone?
    If I would like to sync data to the iPhone, how should I go about it:
    1) Use MobileMe - some kind of Web Service?
    2) Through iTunes?
    3) Or iSync?
    Have anyone done this outside the inner circle of big software companies with connections to Apple
    Thanks in advance!
    Regards
    Christian

    Hi Claudio,
    I am planning to try that (export/import to gdata) also. Can you give any tips on how you got it to work? I tried adding the entire gdata framework, but it turned out to be huge, and also didn't compile for me anyway. I'm trying to install something like that manually, but so far, it's too opaque for me to figure out. Do you use java calls or just html???
    thanks
    Rick

  • Best way of synchronizing data

    Hi Oracle gurus,
    We have 2 db's A & B.the whole question is we need to replicate some 20 odd overlapping elements in B to A whenever there is a DML operation on A.Question no:1 is whether we can impart a time stamp & a flag for DML in the interstaging DB using oracle repl,ication ? Qusetion 2 is what is the best process for such a situation ?
    Thanks
    Hari

    Hi Oracle gurus,
    We have 2 db's A & B.the whole question is we need to replicate some 20 odd overlapping elements in B to A whenever there is a DML operation on A.Question no:1 is whether we can impart a time stamp & a flag for DML in the interstaging DB using oracle repl,ication ? Qusetion 2 is what is the best process for such a situation ?
    Thanks
    Hari

  • Synchronizing data from two folders

    It would be nice to be able to synchronize the description and keyword fields(possibly others) from two folders containing the same images(file numbers, different extension).
    I keyword my images right after importing in Bridge and then convert them to .tif. Every now and then I add keywords to some .tif files that I feel needs them. This makes my .tif files different than my RAW files (either .dng or .psd). Having a synchronize window where you could select the folder with the updated keywords and then the one that you want to update and simply "hit" synchronize would be very handy.

    Hi Leah
    You could be in a fan trap situation. Is this possible? Could you perhaps have disabled the fan trap protection? If you do this and there is a fan trap then you can have issues with aggregations not working. This is correct too. I have known companies where they then export to Excel, get Excel to add the values and then say this is proof that Discoverer is no good. I tell them to go and look at the values manually and usually find that the answer in Excel is wrong.
    If you are not in a fan trap situation you need to look at the underlying objects. I know you said you have an outer join which is fine. Now outer joins will bring back NULL values when there are no entries in the joined to object. If you do have such values being returned then you may not be able to aggregate them because if you try to SUM values with a NULL the answer will be NULL.
    One way to knock out NULL values in an OUTER joined object is to use a Boolean OR+ condition. Let's say you have two folders, A and B, and you want to exclude values from B where say the AMOUNT is NULL. This condition will do the trick:
    B.AMOUNT IS NOT NULL OR B.AMOUNT IS NOT NULL
    I know it looks crazy but Oracle wrote special code into Discoverer that looks for this situation. Discoverer now rewrites the query to use a subquery thus overcoming the OUTER join restriction.
    By the way this works too: B.AMOUNT IS NULL OR B.AMOUNT IS NULL - this one only brings back rows which have NULL in B.
    Best wishes
    Michael

  • Data collection was switched from an AI Config task writing to an hsdl file to synchronized DAQmx tasks logging to TDMS files. Why are different readings produced for the same test?

    A software application was developed to collect and process readings from capacitance sensors and a tachometer in a running spin rig. The sensors were connected to an Aerogate Model HP-04 H1 Band Preamp connected to an NI PXI-6115. The sensors were read using AI Config and AI Start VIs. The data was saved to a file using hsdlConfig and hsdlFileWriter VIs. In order to add the capability of collecting synchronized data from two Eddy Current Position sensors in addition to the existing sensors, which will be connected to a BNC-2144 connected to an NI PXI-4495, the AI and HSDL VIs were replaced with DAQmx VIs logging to TDMS. When running identical tests, the new file format (TDMS) produces reads that are higher and inconsistent with the readings from the older file format (HSDL).
    The main VIs are SpinLab 2.4 and SpinLab 3.8 in folders "SpinLab old format" and "Spinlab 3.8" respectfully. SpinLab 3.8 requires the Sound and Vibration suite to run correctly, but it is used after the part that is causing the problem. The problem is occuring during data collection in the Logger segment of code or during processing in the Reader/Converter segment of code. I could send the readings from the identical tests if they would be helpful, but the data takes up approximately 500 MB.
    Attachments:
    SpinLab 3.8.zip ‏1509 KB
    SpinLab 2.4.zip ‏3753 KB
    SpinLab Screenshots.doc ‏795 KB

    First of all, how different is the data?  You say that the reads are higher and inconsistent.  How much higher?  Is every point inconsistent, or is it just parts of your file?  If it's just in parts of the file, does there seem to be a consistent pattern as to when the data is different?
    Secondly, here are a couple things to try:
    Currently, you are not calling DAQmx Stop Task outside of the loop; you're just calling DAQmx Clear Task.  This means that if there were any errors that occured in the logging thread, you might not be getting them (as DAQmx Clear Task clears outstanding errors within the task).  Add a DAQmx Stop Task before DAQmx Clear Task to make sure that you're not missing an error.
    Try "Log and Read" mode.  "Log and Read" is probably going to be fast enough for your application (as it's pretty fast), so you might just try it and see if you get any different result.  All that you would need to do is change the enum to "Log and Read", then add a DAQmx Read in the loop (you can just use Raw format since you don't care about the output).  I'd recommend that you read in even multiples of the sector size (normally 512) for optimal performance.  For example, your rate is 1MHz, perhaps read in sizes of 122880 samples per channel (something like 1/8 of the buffer size rounded down to the nearest multiple of 4096).  Note: This is a troubleshooting step to try and narrow down the problem.
    Finally, how confident are you in the results from the previous HSDL test?  Which readings make more sense?  I look forward to hearing more detail about how the data is inconsistent (all data, how different, any patterns).  As well, I'll be looking forward to hearing the result of test #2 above.
    Thanks,
    Andy McRorie
    NI R&D

  • Imlementing synchronized access to shared objects in LabVIEW OOP

    Many objects in object-oriented programming have an
    identity, such as a file, a front-panel object or a hardware device.
    These objects cannot be modelled using present LabVOOP (LabVIEW Object Oriented Programming) objects as
    LabVOOP objects gets copied as wire is branched; multiple different
    wires cannot all represent a single object. This issue has been
    irritating the community of LabVIEW users since the release of LabVOOP
    a few months ago.
    It seems that there is a huge demand for
    objects with unique identity i.e. by-reference objects in LabVIEW. The
    central problem why LabVOOP propably doen't have these objects is the
    difficulty in implementing synchronized access to these objects from
    multiple parallel threads. The problem of synchronized access can be
    divided into two different separate topics. First how the
    sychronization should be implemented in LabVIEW runtime engine. Second
    how this synchronization mechanism should be visible to the developer.
    I'd like to start this thread to discuss these two issues.
    Synhronization under the hood
    Traditionally
    people talk about locking of an object and about get-modify-set pass
    when accessing the object. Locking is traditionally done by acquiring a
    mutex for an object, modifying the object and releasing the mutex so
    that other threads can access the same object instance. This is how
    inter-thread synchronization is traditionally done. However, besides
    the mutex based locking, the computer science community has innovated
    also different kinds of methods on synchronizing the access to objects.
    One way to get object-level synchronization is modify the
    runtime engine so that it only allows a single method of a synchronized
    object to run at any time. This mechanism of syncrhonization is
    implemented in programming languages like O'Haskell, which is a Haskell
    variant with object orirented features.
    Also different
    transactional mechanisms[1,2] have been successful. In transactional
    mechanisms multiple threads are allowed to access a synchronized object
    simultaneously. As each method accessing an object commits their
    changes, they verify that no other object has modified the object
    simultaneously in a manner than would break the transaction. If such a
    modification has occurred, everything is rolled back. Transactional
    mechanism do not suit to every possible situation as not everything can
    be rolled back. For example it's hard to roll back an action that
    somehow modifies the physical world.
    User experience of synchronization
    How
    the synchronization is generally implemented in LabVIEW shouldn't be
    directly visible to the developer end-user. The developer should
    understand the general concepts of synchronization to take full
    advantage of it, but in general the synhronization mechanism should be
    integrated directly to development environment. There should in general
    be no need to acquire a mutex by calling acquire mutex node but instead
    the end-user should be able to specify which data needs synhronized
    access in more sophisticated way.
    In the following I propose a
    mechanism of integrating the synchronized access of by-ref objects to
    the development environemnt of LabVIEW. The proposal is very
    preliminary but I hope it breaks the ice and the community would start
    innovating in how should NI implement the syncrhonization support in
    the user interface of LabVIEW.
    Wire level synchronization
    Only
    methods can access object private data members. In synchronized access
    to the object, it's the methods accessing the private data members that
    need to be synchronized. The private data members are accessed by
    applying unbundle node to the class wire and data is written back to
    the object using bundle node.
    What I propose is the following.
    An unbundle node could either be normal or "synchronized". A
    synchronized unbundle would guarantee the access to the private data
    members in synchronized manner. All data wires originating from
    synchronized unbundle would be of synchronized type, in a little
    similar manner as a dynamic dispatch wire is of special dynamic
    dispatch type. Such a wire must evetually be connected to a bundle
    node. When the wire is bundled back to the originating object, the
    synchronization requirement is released.
    These synchronized
    wires would look somewhat different from normal wires so that the
    developer instantly knows that the wire is synchronized. The developer
    can branch the wire, but only one wire branch can own the synchronized
    type. The developer could easily select which wire would be
    syncrhonized by Ctrl+clicking the wire. Such a wire can be considered
    as a combination of a data and a mutex, even though mutexes don't need
    to be the underlying synchronization method. The wire just guarantees
    that there is a mechanism in the runtime engine that makes sure the
    access to the wire data is synchronized.
    There is a need to wire
    data originating from a non-synchronized wire to a synchronized wire so
    that it can replace the private data member of the class. This is
    accomplished with a new node similar to bundle node, that would allow
    replacing the data in a syncrhonized wire with some data originating
    from a non-synchronized wire.
    The synchronized wire can be
    connected to a front panel controls of special syncrhonized type. This
    way the synchronized wire can originate from a method and allow passing
    the synchronized data to the calling VI and back to another method.
    This is practical for example in a situation when the developer wants
    to run different analyzes to a data class but don't want to rewrite all
    the existing data analysis tools as class members. So the developers
    writes a syncrhonization acquiring getData method that let's the
    calling VI to access the syncrhonized data. Then the developer passes
    this data to an analysis VI and passes the result back to a setData
    method that writes the result back to the class wire.
    There
    will probably be technical problems in allowing the user to connect
    such a synchronized wire to all existing VIs since these VIs. Therefore
    the programming model for all nodes that do not support such
    synchronized wires will be branching the wire and passing the
    non-synchronized wire branch to the node and then bundling the result
    back to the synchronized wire.
    To increase performance and
    decrease unnecessary buffer copies when a syncrhonized wire is
    branched, if the syncrhonized wire continues directly to the new bundle
    synchronized wire node, no buffer copy is made.
    Discussion
    The
    syncrhonized access to a by-ref LabVOOP objects can be implemented in
    multiple ways by National Instruments. The synchronized access should
    be divided to two different and independent parts: 1) the user
    experience of synchronization and 2) the runtime engine synchronization
    mechanisms. As LabVOOP objects have special properties compared to
    other LabVIEW data types, optimal user experience can be gained by
    designing the user experience specifically for LabVOOP objects. From
    user experience point-of-view this syncrhonization mechanism may not
    work for other data types. Separating object syncrhonization from
    synchronization of other data types is advantageous also for other
    reasons. Due to the fact that object data can only be accessed via
    object methods, more advanced synchronization methods may be used with
    objects than can be used with other data types. O'Haskell
    synchronization implementation is an example of this. Integrating the
    synchronization directly to the user interface allows NI to change the
    mehcanisms under the hood, when computer science comes up with more
    advanced methods. Therefore NI could begin with traditional and quite
    easy mutex-based synchronization and later move to more advanced
    perhaps transaction based syncrhonization methods or even combinations
    of multiple different methods.
    I hope this topic generates
    discussion that would help NI to implement an excellent synchronization
    mechanism in LabVOOP. I hope that all talented individuals in the
    community participate this discussion to help NI to reach this goal. I
    also hope that if you just have time, it would be great if you could
    surf the computer science resources to find out what kinds of new
    techniques there exists for synchronizing access to shared resources. A
    Large community may find much more innovative solutions than a few engineers at NI. Let's give NI the power of open source design
    Tomi Maila

    Hello Tomi,
    First, thank you for taking the time to write such a well
    though-out suggestion.  Are you familiar
    with the “LabVIEW Object-Oriented Programming: The Decisions Behind the Design”
    document?  I think the reason we chose to implement a ‘by
    value’ strategy, is that is more in line with the LabVIEW programming paradigm
    of dataflow, and would make sense to most of our LabVIEW users.
    I think your suggestion is interesting, and it does
    highlight the need to think outside of the conventional LabVIEW box and look to
    some of the innovative things other languages do.  However, I think we all agree that
    synchronization takes careful planning and extra work for the programmer.  Even with an ‘ideal’ solution I see no way
    around this.  For LabVIEW users today,
    one great way to get synchronized ‘by reference’ semantics with your objects is
    to use a single-element queue to pass your object.  The queue itself is passed ‘by reference’ and
    is inherently synchronized!  The does
    have the disadvantage of adding one more small layer of complexity to your
    program, but some complexity would have to be introduced in any situation.  The other disadvantage with this is that it
    is not always an intuitive way to implement your program and requires some
    amount of LabVIEW knowledge before one would generally come across this
    technique.
    In any case, I appreciate the time and effort you put in to
    your suggestion.  Please make sure that
    you submit the suggestion formally through the NI Product Suggestion Center so
    that it can be reviewed by some of the decision makers here.
    Thanks again,
    Travis M
    LabVIEW R&D
    National Instruments

Maybe you are looking for

  • Boot Camp - Parallels - Windows 7 - 32bit - 64bit

    Hi. First off, and not looking for sympathy - just a little background of myself: I have recently recovered from two bouts of high dose chemo and a stem cell transplant. My memory and brain...processing speed, for lack of correct word or two, is no w

  • How to set up additional iCloud email

    How can I set up an additional icloud email address? I already have an icloud account using my domain name and wish to set up an icloud.com address as well.

  • Convert Purchase requisitions to Purchase order

    Hi, Need help. How can I Convert Purchase requisitions to Purchase order in one line (automatically created purchase requisitions in sales order), when I adopt purchase requisitions in delivery schedule tab it gives me an error: Requisition 10000###,

  • Search in "form" and not only in spreadsheet...

    Hi, this Numbers is very great!! But there are 2 important features to add in "forms". 1. Most important is the possibility to search in a "form" and not only in spreadsheet. I don't know why they don't add this feature.... 2. Possibility to input th

  • I get a please wait message that sez

    pdf viewer cannpt display the page  I have downloaded latst version. still can't open doc.  opens other docs