Calling WSAGetLastError() from an IOCP thread return incorrect result

I have called WSARecv() which returned WSA_IO_PENDING. I have then sent an RST packet from the other end. The GetQueuedCompletionStatus() function which exists in another thread has returned FALSE as expected, but when I called WSAGetLastError() I got
64 instead of WSAECONNRESET.
So why WSAGetLastError() did not return WSAECONNRESET?

Hi Tom_912,
Thanks for posting in MSDN forum.
Where do you call WSAGetLastError and get 64? From your description, It seems that you call WSAGetLastError after GetQueuedCompletionStatus() function.
Read the document:
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364986(v=vs.85).aspx
We should call GetLastError to get extended error information instead of WSAGetLastError function. For the error code 64
ERROR_NETNAME_DELETED, It means that the specified network name is no longer available.
https://msdn.microsoft.com/en-us/library/windows/desktop/ms681382(v=vs.85).aspx it's likely that your connection has gone away since GetQueuedCompletionStatus return false.  Is that as your expect? If not, please provide more details about what
you do, and it would be better if you could share us some code.
Best regards,
Shu Hu
We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
Click
HERE to participate the survey.

Similar Messages

  • Calling getAppletContext() from a working thread.

    Hi guys,
    I'm new to Java so all apologies if I'm asking a stupied question.
    I have a simple applet that creates a working thread and I'm tring to call getAppletContext() from that thread.
    Obviously my working thread has no instance of the Applet class so it fails.
    I've try to create an instance of Applet, but I'm getting an error saying that the applet is not initialised.
    This is my code:
    class MyThread extends Thread
        String ThreadName;
        public MyThread(String threadName)
            ThreadName = threadName;
        @Override public void run()
            // ??? How to make the following line work ???
            getAppletContext().showDocument(new URL("javascript:alert(\"Calling from myThread\")"));
    public class MyApplet extends Applet {
         public void init()
            // The following line works!
            getAppletContext().showDocument(new URL("javascript:alert(\"Calling from MyApplet)"));
            Thread WorkingThread = new MyThread("Thread1");                                                                
            WorkingThread.start();
    }{code}
    Please help,
    Many thanks!
    Salvador                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

    Got it.
    I needed to pass the keyword this to the thread constructor and then use that....
    Many thanks!

  • Rp_provide_from_last returns incorrect result

    Hi
    When issuing rp_provide_from_last  for IT2001, we get incorrect result.
    rp-provide-from-last p2001 space '19000101' '99991231'
    This macro does not return the latest record.  Instead it returns the record with the highest subtype #.  (It actually returns the last record shown in a SE16N listing of PA2001).
    Has anyone seen this problem?
    We are on SAP 4.7., SP 85.
    Best regards
    Kirsten

    Pleas Try this
    Usage:
    Only in PNP database reports under GET PERNR, because the personnel number for which data is being read comes from field PERNR-PERNR, while the field being used is PNP-SW-AUTH-SKIPPED-RECORD.
    (RP_READ_ALL_TIME_ITY beg end)
       DATA: BEGDA LIKE P2001-BEGDA, ENDDA LIKE P2001-ENDDA.
       INFOTYPES:  0000, 0001, 0002, ...
                         2001 MODE N, 2002 MODE N, ...
         GET PERNR.
       BEGDA = '19900101'. ENDDA = '19900131'.
       RP_READ_ALL_TIME_ITY BEGDA ENDDA.
       IF PNP-SW-AUTH-SKIPPED-RECORD NE '0'.
          WRITE: / 'Authorization for time data missing'.
          WRITE: / 'for personnel number', PERNR-PERNR. REJECT.
       ENDIF.
    Remarks
    This RMAC module can be used when, for example, the time infotypes were originally defined in MODE N. This was done because the time data (from LOW-DATE to HIGH-DATE) might not all have fitted into the buffer. Now, however, they are read with shorter intervals (for example, in RPCALCx0 with payroll periods).
    -Due to the large amount of data in HR, the infotypes 2000 u2013 2999 should not be read when GET PERNR occurs. Therefore, these infotypes are declared with the enhancement MODE N.
    -As a result, the infotype tables under GET PERNR are not filled. The time infotype tables are filled subsequently using the macro RP_READ_ALL_TIME_ITY, but only for the time interval specified by PN-BEGDA and PN-ENDDA.
    http://help.sap.com/saphelp_45b/helpdata/en/60/d8bb88576311d189270000e8322f96/content.htm
    Best Regards

  • Sequence call with Pass/Fail Test always returns Passed result

    In TestStand 2.0, I use Sequence Adapter with Pass/Fail Test step to call a subsequence, I always receive a Passed result, even as I force fail a step in the subsequence and enabled the Step Failure Causes Sequence Failure option.
    Attachments:
    Example1.seq ‏17 KB

    Tan -
    The status expression for the Pass/Fail step type does not look to see if the status has been previously set by the code module in this case the sequence call.
    Step.DataSource != "Step.Result.PassFail" ?
    Step.Result.PassFail = Evaluate(Step.DataSource) :
    False, Step.Result.PassFail ? "Passed" : "Failed"
    It just set it to Passed or Failed even if the status is already "Failed".
    You could either,
    1) Change the Pass/Fail expression to the following for the step,
    Step.Result.Status == "Done"? Step.Result.PassFail : False
    or
    2) Use two steps, a Sequence Call and a Pass/Fail that uses the None Adapter. The Pass/Fail could operate on the previous step if necessary.
    Scott Richardson - NI"
    Scott Richardson
    National Instruments

  • Calling  ctx_snippet() from non-owner user returns error

    Hi,
    I created a full text index in owner schema A for documents stored in BFILE datatype, and tested the snippet query, worked like dream.
    The query is something like:
    SELECT doc_id, ctx_doc.snippet('A.IDX_DUMMY',rowid,'keywords')
    FROM A.documents
    WHERE contains(document,'keywords')>0
    But, when I run the same query from an application user, I got error:
    ERROR at line 1:
    ORA-20000: Oracle Text error:
    DRG-50857: oracle error in drstldef
    ORA-22286: insufficient privileges on file or directory to perform FILEEXISTS
    operation
    ORA-06512: at "CTXSYS.DRUE", line 160
    ORA-06512: at "CTXSYS.CTX_DOC", line 1297
    ORA-06512: at line 1
    If I SQL*Plus using application user account, and run DBMS_LOB programs, the document BFILEs can be accessed without any problem.
    I also tried log in as sys, the query return the same error.
    I also specifically give directory read privilege to application user, CTX_SYS, all did not work.
    Any clue here?
    Thx,
    -Haijun

    Solved!!!
    The reason is that, initially, the directory read privilege was granted to index owner user as well as the non-owner user by sys as dba, without "with grant option"
    Now, I grant directory read privilege to the index owner user "with grant option", then the index owner grant the privilege again to the non-owner user. Now, things work! The privilege flows through.
    Thx,
    -Haijun

  • SDO_DISTANCE returning incorrect results

    I have a query that uses sdo_distance to find N nearest neighbors (line strings) to a lat/lon (point). The problem is that sdo_distance is giving me geometries which it says are 0 units (in this case meters) from that lat/lon when in fact they are much farther away.
    here is an example:
    SELECT
    vw.reach_geom,
    round(SDO_GEOM.SDO_DISTANCE(vw.REACH_GEOM, sdo_geometry(2001, 8307,
                   sdo_point_type(-88.23579545454545, 44.87982954545455, NULL),
              NULL, NULL), 0.00005, 'unit=M'),4) Dist_In_Meters
    FROM all_geom_vw
    ORDER BY Dist_In_Meters;
    i get two geometries. the first is incorrect:
    GEOM
    SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(-86.687042, 45.836369, -86.687042, 45.836369, -86.689133, 45.836567))
    Dist_In_Meters
    0
    The second one is the correct one:
    GEOM
    SDO_GEOMETRY(2002, 8307, NULL, SDO_ELEM_INFO_ARRAY(1, 2, 1), SDO_ORDINATE_ARRAY(-88.380611, 44.996681, -88.380718, 44.995281, -88.380917, 44.993782,.....several other ordinates)
    Dist_In_Meters
    15.3559
    you can tell that the second one is much closer to the point since that lat/lon coords are pretty much the same.
    Any ideas what's happening here?
    thanks,
    John

    The first two points of the bad result geometry are the same point. "-86.687042, 45.836369, -86.687042, 45.836369," I'm pretty sure this will hose many spatial operations and may not throw an exception. Edit the geometry or do a "migrate to current" and it should work.
    -Ted

  • Call BSP from a funtion module and use results of the BSP in the calling fm

    Hi BSP experts,
    I want to implement following scenario. But currently I've no idea how to realize step 4 of the process.
    1. An ABAP program calls a function module.
    2. The function module calls a BSP page.
    3. In the BSP users will fill out some fields (e.g. name).
    4. After pressing the submit button the BSP should transfer the values to the export parameters of the calling function module. 
    Thanks for your support & Regards

    within the FM code you should call a SAPGUI screen with embedded html viewer control, in which you will show the bsp page and user can enter value and hit submit. you can then collect the user entered value and set it as export value fo the FM. but why do you want to do this?
    Regards
    Raja

  • Like in stored procedure returns incorrect result

    Hello all,
    I have a stored procedure like below
    Alter PROCEDURE ContactsListBySearch
    @AuthorID int,
    @currentPage INT,
    @pageSize INT,
    @searchStr nvarchar
    AS
    BEGIN
    set nocount on;
    WITH tempLog AS (
    SELECT distinct ROW_NUMBER()OVER (ORDER BY email DESC) AS Row,
    email,username from AddContact where userid = @AuthorID and email like '%'+@searchStr+'%' and username like '%'+@searchStr+'%' )
    SELECT email,username
    FROM tempLog
    WHERE Row between ((@currentPage - 1) * @pageSize + 1) and (@currentPage*@pageSize)
    END
    for a search string david it gives me unrelated rows.
    But for the same query string david if i run the query
    select email,username from addcontact where userid=2 and email like '%david%' and username like '%david%'
    It gives me exact result.
    How to pass an paramter as a string in the stored procedure?? please help me.
    regards,
    Guru
    Edited by: user4554966 on Jan 18, 2010 6:45 PM

    Did not get any help from them ;)
    Regards,
    Guru

  • Secure Flash Remoting from main.asc not returning a result

    Hi, Iv got a problem here that could be Flash Remoting or
    Flash Media Server related
    I have created an application that uses flash media server
    and flash remoting.
    For authentication in my app I used Kevin Towes suggested
    method "Secure Authentication with Flash Communication Server:
    Using Tickets and Flash Remoting MX." His article is here
    Download
    PDF Here
    Now to the problem...
    My application has no problem connecting to coldfusion using
    flash remoting with the defaultGateway url set to
    "https://www.mysite.com" (ie over SSL)
    However In main.asc, on the Flash Media Server
    When Flash Media server attempts to validate the login by
    connecting to CFMX using flash remoting it gets no response when
    using a secure gateway url. If I set the default gateway url to
    just
    http://www.mysite.com it works
    great.
    Why do I not get any response when using https as my gateway
    url from Flash Media Server?
    thanks

    Sounds like you need to enable mappings for your remoting
    gateway. I'm not sure if it's the same as Flex, but here's what you
    might need to do, or something similar...
    In c:\cfusion8\wwwroot\WEB-INF\flex\remoting-config.xml (or
    wherever CF is installed) look for the <use-mappings> node
    and set the value to true. You will need to restart CF

  • Very strange bug with compareTo: returning incorrect results

    Hello everyone! I have used the method compareTo many times to maintain my database project's entries. However recently I have discovered a bug, in which:
    a and b both being Storage type objects:
    private static class Storage {
    object data
    int nextData //an array stores the Storage objects
    int previousData //this uses an integer to locate previous in array
    Problem:
    ((Comparable)(a.data)).compareTo((Comparable)(b.data)) returns a 3, when a.data is clearly 5, and b.data is clearly 20.
    This is very strange, as the compareTo should return a -1 instead of a positive number. Is this a known bug with the compareTo method? I have been using it reliably for many programs but this is the first time it ever occurs to me.

    Problem:
    ((Comparable)(a.data)).compareTo((Comparable)(b.data))
    returns a 3, when a.data is clearly 5, and b.data is
    clearly 20.
    This is very strange, as the compareTo should return a
    -1 instead of a positive number. Is this a known bug
    with the compareTo method? I have been using it
    reliably for many programs but this is the first time
    it ever occurs to me.Not really... comparing Strings "5" to "20"
    is really the same as comparing "5" to "2"
    being the first character of the string, difference
    being, surprise, surprise = 3.
    If you want the Strings to be comparable that way you should left-fill them with spaces or zeros.
    Or, better still, override compareTo and make your Storage implement Comparable instead of all that casting of the data objects.

  • Lookup results from a range and return specific results

    I have a table with 3 columns: min, max, and rate. It has several rows.
    I have another table with several columns, including hours. I want to create a lookup to return the appropriate rate based on the range that it falls in. How do I go about this?
    Thanks!

    Thanks.
    Knowing the table is really helpful
    In column Cost, the cells contain the formula :
    =VLOOKUP(1+(INT(Quantity/500)*500),Min:Cost,3,1)
    In column Subtotal, the formula is :
    =Quantity*Cost
    Yvan KOENIG (VALLAURIS, France) samedi 30 janvier 2010 21:06:32

  • MDX used in Universe for Prompt returns Incorrect Result

    Hi All,
    I have created an optional predefined filter in the universe like so... (and for many other characteristics too...)
    <OPTIONAL>
    <FILTER KEY="[0COMP_CODE].[LEVEL01]">
    <CONDITION OPERATORCONDITION="InList">
    <CONSTANT CAPTION="@Prompt('Select Company Code(s)','A','Company code\Company code',multi,constrained)">
    </CONSTANT>
    </CONDITION>
    </FILTER>
    </OPTIONAL>
    The code works i.e The prompt comes up, the text is correct, the list of values are correct. BUT....
    This is a multi value prompt i.e In List... So when I select only 1 Comany code i.e CODE-1, run the Webi report, the result is as expected, the reports displays all the data for Company code - CODE-1.
    When I refersh the report and add CODE-2, so the list now has CODE-1 and CODE-2 in the prompt... only the data for CODE-1 is displayed in the report, and CODE-2's data is not returned.
    I also find that when I select CODE-2 first, then CODE-1, then only CODE-2's data is returned, so I can safely say that only the first selected Company code is returned in the Webi report irrespective of how many Company codes where selected in the list.
    This behaviour also affects any other characteristic on which filter is created in this manner.
    Has anyone experienced this behaviour? Is there something on the BW side that needs to be checked? or is this a bug?
    Thanks
    J

    Hi Uwe,
    Yes... the issue is that we need to use short XML tags. The issue is also documented in one of  the release notes.
    In the example below, you can see the </CONSTANT> tag is used. This is what is causing the issue.
    <OPTIONAL>
    <FILTER KEY="[0COMP_CODE].[LEVEL01]">
    <CONDITION OPERATORCONDITION="InList">
    <CONSTANT CAPTION="@Prompt('Select Company Code(s)','A','Company code\Company code',multi,constrained)">
    </CONSTANT>
    </CONDITION>
    </FILTER>
    </OPTIONAL>
    So... to ge the results correctly, we need to remove the </CONTSTANT> tag and close it at the end of the prompt line with a /, now the same code looks like this...
    <OPTIONAL>
    <FILTER KEY="[0COMP_CODE].[LEVEL01]">
    <CONDITION OPERATORCONDITION="InList">
    <CONSTANT CAPTION="@Prompt('Select Company Code(s)','A','Company code\Company code',multi,constrained)"/>
    </CONDITION>
    </FILTER>
    </OPTIONAL>
    I have tested this using other operators and it works fine.
    Jacques

  • System() from a multi-threaded app

    The man page for system(3S) states that its MT-Level is "unsafe." Nonetheless we need to call system() from a multi-threaded application. At present we "just go ahead and do it," and of course it doesn't work well. I'm not entirely sure of the details of the failure -- it's more a colleague's baby than mine -- but I believe the system() call often fails to complete ("hangs").
    Is there a thread-safe equivalent-or-replacement for system()? Surely the need to launch other applications from a multi-threaded application is commonplace today? How is it done safely-and-correctly?

    Hi,
    system() is not thread safe because it internally uses vfork() system call which in turn is not MT-safe . When you do a vfork()/fork1() in threaded applications only the thread which issues the call gets duplicated in the child process , which could result in dead lock problems . Solution of running system() under the protection of a lock may not help to avoid this problem.
    If you're using Solaris thread library , fork() + exec() is a safe substitute for system() . If you are using Posix library , use pthread_atfork() to make sure that you handle the locks properly before/after forking.
    Hope this helps.
    Thanks,
    Prajeesh

  • LessFilter and  ReflectionExtractor API giving incorrect results

    I am using Oracle Coherence version 3.7. We are storing DTO objects in cache having "modificationTime" property/instance variable of "java.util.date" type. In order to fetch data from cache passing "java.util.date" variable as input for comparison, LessFilter and ReflectionExtractor api's are used. Cache.entryset(filter) returns incorrect results.
    Note: we are using "com.tangosol.io.pof.PofWriter.writeDateTime(int arg0, Date arg1) " api to store data in cache and "com.tangosol.io.pof.PofReader.readDate(int arg0)" to read data from cache. There is no readDateTime api available ?
    We tested same scenario updating DTO class. Now it has another property in DTO of long(to store milliseconds). Now long is passed as input for comparison to LessFilter and ReflectionExtractor api's and correct results are retrieved.
    Ideally, java.util.Date or corresponding milliseconds passed as input should filter and return same and logically correct results.
    Code:
    1) Test by Date: returns incorrect results
    public void testbyDate(final Date startDate) throws IOException {
    final ValueExtractor extractor = new ReflectionExtractor("getModificationTime");
    LOGGER.debug("Fetching records from cache with modTime less than: " + startDate);
    final Filter lessFilter = new LessFilter(extractor, startDate);
    final Set results = CACHE.entrySet(lessFilter);
    LOGGER.debug("Fetched Records:" + results.size());
    assert results.isEmpty();
    2) Test by milliseconds: returns correct results
    public void testbyTime(final Long time) throws IOException {
    final ValueExtractor extractor = new ReflectionExtractor("getTimeinMillis");
    LOGGER.debug("Fetching records from cache with timeinMillis less than: " + time);
    final Filter lessFilter = new LessFilter(extractor, time);
    final Set results = CACHE.entrySet(lessFilter);
    LOGGER.debug("Fetched Records:" + results.size());
    assert results.isEmpty();
    }

    Hi Harvy,
    Thanks for your reply. You validated it against a single object in cache using ExternalizableHelper.toBinary/ExternalizableHelper.fromBinary. But we are querying against a collection of objects in cache.
    Please have a look at below code.
    *1)* We are using TestDTO.java extending AbstractCacheDTO.java as value object for our cache.
    import java.io.IOException;
    import java.util.Date;
    import com.tangosol.io.AbstractEvolvable;
    import com.tangosol.io.pof.EvolvablePortableObject;
    import com.tangosol.io.pof.PofReader;
    import com.tangosol.io.pof.PofWriter;
    * The Class AbstractCacheDTO.
    * @param <E>
    *            the element type
    * @author apanwa
    public abstract class AbstractCacheDTO<E> extends AbstractEvolvable implements EvolvablePortableObject {
        /** The Constant IDENTIFIER. */
        private static final int IDENTIFIER = 0;
        /** The Constant CREATION_TIME. */
        private static final int CREATION_TIME = 1;
        /** The Constant MODIFICATION_TIME. */
        private static final int MODIFICATION_TIME = 2;
        /** The version number of cache DTO implementation **/
        private static final int VERSION = 11662;
        /** The id. */
        private E id;
        /** The creation time. */
        private Date creationTime = new Date();
        /** The modification time. */
        private Date modificationTime;
         * Gets the id.
         * @return the id
        public E getId() {
            return id;
         * Sets the id.
         * @param id
         *            the new id
        public void setId(final E id) {
            this.id = id;
         * Gets the creation time.
         * @return the creation time
        public Date getCreationTime() {
            return creationTime;
         * Gets the modification time.
         * @return the modification time
        public Date getModificationTime() {
            return modificationTime;
         * Sets the modification time.
         * @param modificationTime
         *            the new modification time
        public void setModificationTime(final Date modificationTime) {
            this.modificationTime = modificationTime;
         * Read external.
         * @param reader
         *            the reader
         * @throws IOException
         *             Signals that an I/O exception has occurred.
         * @see com.tangosol.io.pof.PortableObject#readExternal(com.tangosol.io.pof.PofReader)
        @Override
        public void readExternal(final PofReader reader) throws IOException {
            id = (E) reader.readObject(IDENTIFIER);
            creationTime = reader.readDate(CREATION_TIME);
            modificationTime = reader.readDate(MODIFICATION_TIME);
         * Write external.
         * @param writer
         *            the writer
         * @throws IOException
         *             Signals that an I/O exception has occurred.
         * @see com.tangosol.io.pof.PortableObject#writeExternal(com.tangosol.io.pof.PofWriter)
        @Override
        public void writeExternal(final PofWriter writer) throws IOException {
            writer.writeObject(IDENTIFIER, id);
            writer.writeDateTime(CREATION_TIME, creationTime);
            writer.writeDateTime(MODIFICATION_TIME, modificationTime);
        @Override
        public int getImplVersion() {
            return VERSION;
    import java.io.IOException;
    import com.tangosol.io.pof.PofReader;
    import com.tangosol.io.pof.PofWriter;
    * @author nkhatw
    public class TestDTO extends AbstractCacheDTO<TestIdentifier> {
        private Long timeinMillis;
        private static final int TIME_MILLIS_ID = 3;
        @Override
        public void readExternal(final PofReader reader) throws IOException {
            super.readExternal(reader);
            timeinMillis = Long.valueOf(reader.readLong(TIME_MILLIS_ID));
        @Override
        public void writeExternal(final PofWriter writer) throws IOException {
            super.writeExternal(writer);
            writer.writeLong(TIME_MILLIS_ID, timeinMillis.longValue());
         * @return the timeinMillis
        public Long getTimeinMillis() {
            return timeinMillis;
         * @param timeinMillis
         *            the timeinMillis to set
        public void setTimeinMillis(final Long timeinMillis) {
            this.timeinMillis = timeinMillis;
    }*2)* TestIdentifier.java as key in cache for storing TestDTO objects.
    import java.io.IOException;
    import org.apache.commons.lang.StringUtils;
    import com.tangosol.io.AbstractEvolvable;
    import com.tangosol.io.pof.EvolvablePortableObject;
    import com.tangosol.io.pof.PofReader;
    import com.tangosol.io.pof.PofWriter;
    * @author nkhatw
    public class TestIdentifier extends AbstractEvolvable implements EvolvablePortableObject {
        private String recordId;
        /** The Constant recordId. */
        private static final int RECORD_ID = 0;
        /** The version number of cache DTO implementation *. */
        private static final int VERSION = 11660;
        @Override
        public void readExternal(final PofReader pofreader) throws IOException {
            recordId = pofreader.readString(RECORD_ID);
        @Override
        public void writeExternal(final PofWriter pofwriter) throws IOException {
            pofwriter.writeString(RECORD_ID, recordId);
        @Override
        public int getImplVersion() {
            return VERSION;
        @Override
        public boolean equals(final Object object) {
            if (object instanceof TestIdentifier) {
                final TestIdentifier id = (TestIdentifier) object;
                return StringUtils.equals(recordId, id.getRecordId());
            } else {
                return false;
         * @see java.lang.Object#hashCode()
        @Override
        public int hashCode() {
            return recordId.hashCode();
         * @return the recordId
        public String getRecordId() {
            return recordId;
         * @param recordId
         *            the recordId to set
        public void setRecordId(final String recordId) {
            this.recordId = recordId;
    }*3) Use Case*
    We are fetching TestDTO records from cache based on LessFilter. However, results returned from cache differs if query is made over property "getModificationTime" of type java.util.Date or over property "getTimeinMillis" of type Long(milliseconds corresponding to date). TestService.java is used for the same.
    import java.io.IOException;
    import java.util.Collection;
    import java.util.Date;
    import java.util.Map;
    import java.util.Set;
    import org.apache.log4j.Logger;
    import com.ladbrokes.dtos.cache.TestDTO;
    import com.ladbrokes.dtos.cache.TestIdentifier;
    import com.cache.services.CacheService;
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    import com.tangosol.util.Filter;
    import com.tangosol.util.ValueExtractor;
    import com.tangosol.util.extractor.ReflectionExtractor;
    import com.tangosol.util.filter.LessFilter;
    * @author nkhatw
    public class TestService implements CacheService<TestIdentifier, TestDTO, Object> {
        private static final String TEST_CACHE = "testcache";
        private static final NamedCache CACHE = CacheFactory.getCache(TEST_CACHE);
        private static final Logger LOGGER = Logger.getLogger(TestService.class);
         * Push DTO objects with a) modTime of java.util.Date type b) timeInMillis of Long type
         * @throws IOException
        public void init() throws IOException {
            for (int i = 0; i < 30; i++) {
                final TestDTO dto = new TestDTO();
                final Date modTime = new Date();
                dto.setModificationTime(modTime);
                final Long timeInMillis = Long.valueOf(System.currentTimeMillis());
                dto.setTimeinMillis(timeInMillis);
                final TestIdentifier testId = new TestIdentifier();
                testId.setRecordId(String.valueOf(i));
                dto.setId(testId);
                final CacheService testService = new TestService();
                testService.createOrUpdate(dto, null);
                LOGGER.debug("Pushed record in cache with key: " + i + " modTime: " + modTime + " Time in millis: "
                    + timeInMillis);
         * 1) Fetch Data from cache based on LessFilter with args:
         * a) ValueExtractor: extracting time property
         * b) java.util.Date value to be compared with
         * 2) Verify extracted entryset
         * @throws IOException
        public void testbyDate(final Date startDate) throws IOException {
            final ValueExtractor extractor = new ReflectionExtractor("getModificationTime");
            LOGGER.debug("Fetching records from cache with modTime less than: " + startDate);
            final Filter lessFilter = new LessFilter(extractor, startDate);
            final Set results = CACHE.entrySet(lessFilter);
            LOGGER.debug("Fetched Records:" + results.size());
            assert results.isEmpty();
         * 1) Fetch Data from cache based on LessFilter with args:
         * a) ValueExtractor: extracting "time in millis  property"
         * b) java.Long value to be compared with
         * 2) Verify extracted entryset
        public void testbyTime(final Long time) throws IOException {
            final ValueExtractor extractor = new ReflectionExtractor("getTimeinMillis");
            LOGGER.debug("Fetching records from cache with timeinMillis less than: " + time);
            final Filter lessFilter = new LessFilter(extractor, time);
            final Set results = CACHE.entrySet(lessFilter);
            LOGGER.debug("Fetched Records:" + results.size());
            assert results.isEmpty();
        @Override
        public void createOrUpdate(final TestDTO testDTO, final Object arg1) throws IOException {
            CACHE.put(testDTO.getId(), testDTO);
        @Override
        public void createOrUpdate(final Collection<TestDTO> arg0, final Object arg1) throws IOException {
            // YTODO Auto-generated method stub
        @Override
        public <G>G read(final TestIdentifier arg0) throws IOException {
            // YTODO Auto-generated method stub
            return null;
        @Override
        public Collection<?> read(final Map<TestIdentifier, Object> arg0) throws IOException {
            // YTODO Auto-generated method stub
            return null;
        @Override
        public void remove(final TestDTO arg0) throws IOException {
            // YTODO Auto-generated method stub
    Use Case execution Results:
    "testbyTime" method returns correct results.
    However, "testbyDate" method gives random and incorrect results.

  • Incorrect result between maintain master data and bex query, how can i fix?

    Hi ALL,
    i get some messages from the users there is incorrect result between SAP R/3 and Report on BW. i controlled the monitor and i saw there was a job for 0CUSTOMER_ATTRIBUTE that it finish correctly but the processing it was only in PSA, i started the full update immediately from PSA into Data Targets and is finished correctly. after when i control the content of the 0CUSTOMER (right click maintain master data) i get the correct attribute result that match the data in SAP R/3, but the problem is when i execute a query Bex on this master data it will not return the same attributes data.
    Can SomeBody Help please
    Bilal

    hi,
    For any master data attributes loaded you will have to run "Attributes Change Run" for that.Execute for Master data 0CUSTOMER.
    The same is avilable in rsa1->Tools(top menu)->apply hierarchy/attribute run.
    hope it helps,
    regards,
    Parth.

Maybe you are looking for