Announcement

Collapse
No announcement yet.
X
  • Filter
  • Time
Clear All
new posts

    Dynamically set SqlDataSource's database

    I am using gwt 2.4, smartgwt 3.1d EE, IE 9, Java 1.7 and Eclipse indigo

    The scenario:
    The website will cater to different companies.
    Each company will have its own database.
    But each database's structure is identical, only the actual contained data will differ.

    I saw some one ask same question before and he use DynamicDSGenerator solve his problem. I want to do the same thing like him. Here is the link for that tread:
    http://forums.smartclient.com/showthread.php?t=15937

    But I have some question not very clear, please gave me the instruction.

    1. How do I modify my project.html file?
    Do I still need
    " <script src="sc/DataSourceLoader?dataSource=dbName_mydbname_mydatasourceDS"></script> "
    in my html file?
    if yes, the datasource name should just put regular name like "mydatasourceDS"
    or have to be full name like
    "dbName_mydbname_mydatasourceDS"?

    2. How do I modify my web.xml file?
    I create a MyDSLoaderServlet, So Do I still need keep this
    <servlet-name>DataSourceLoader</servlet-name>
    <servlet-class>com.isomorphic.servlet.DataSourceLoader</servlet-class>
    in my web.xml file?

    Or I need replace it to
    <servlet-name>DataSourceLoader</servlet-name>
    <servlet-class>MyDSLoaderServlet</servlet-class>

    Or I need keep orignal one and create a new servlet-name in web.xml file?

    3. In MyDSLoaderServlet, my doGet() like this
    Code:
     
    public void doGet(HttpServletRequest req, HttpServletResponse res)
      {
    
        String id = req.getParameter("dataSource");
    
       //Does this scrrect?
        DataSource.addDynamicDSGenerator(new MyDSGenerator(), dbName);
    
        if (null != id)
          System.out.println("passed datasource ID is :" + id + ":" + this);
        else
          System.out.println("passed datasource ID is null" + this);
    
        MyDSGenerator tds = new MyDSGenerator();
        DataSource ds = tds.getDataSource(id, new DSRequest());
    
        // need send ds back? then how?
      }
    My questions are:
    a. does this:
    DataSource.addDynamicDSGenerator(new TriadDSGenerator(), dbName);
    correct to put here like this?
    b. After I got my ds, I think I need send it back to client side through HttpServletResponse, Am I right?
    If I am correct, then how can I set my ds in response?


    4. On client side, how to use DataSource.load()?
    My regular code like this:
    Code:
        ListGrid lg = new ListGrid();
        lg.setWidth100();
        lg.setHeight100(); 
        DataSource ds = DataSource.getDataSource("myDataSourceDS");
        lg.setDataSource(ds);
        lg.fetchData()
    This way the ds will load at application start by project.html file.
    Now I want to load my datasource dynamic, So I change my code like this:

    Code:
     Function func = new Function()
        {
          @Override
          public void execute()
          {
            System.out.println("### DS load complete");
    
          }
        };
        DataSource.load("dbName_myDbName_myDataSourceDS", func, true);
        ListGrid lg = new ListGrid();
        lg.setWidth100();
        lg.setHeight100(); 
        DataSource ds = DataSource.getDataSource("myDataSourceDS");
        lg.setDataSource(ds);
        lg.fetchData()
    But looks this code not correct, because in Console log, I saw this:
    [WARN] 404 - GET /myproject/sc/DataSourceLoader?dataSource=dbName_myDbName_myDataSourceDS&isc_rpc=1&isc_v=SNAPSHOT_v8.3d_2012-07-23&isc_xhr=1&isc_tnum=0&_transaction=%3Ctransaction%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2F10%2FXMLSchema-instance%22%20xsi%3Atype%3D%22xsd%3AObject%22%3E%3CtransactionNum%20xsi%3Atype%3D%22xsd%3Along%22%3E0%3C%2FtransactionNum%3E%3Coperations%20xsi%3Atype%3D%22xsd%3AList%22%3E%3Celem%3E__ISC_NULL__%3C%2Felem%3E%3C%2Foperations%3E%3C%2Ftransaction%3E&protocolVersion=1.0 (127.0.0.1) 1413 bytes
    Request headers
    Accept: */*
    Accept-Language: en-US,zh-CN;q=0.7,zh-TW;q=0.3
    Referer: http://127.0.0.1:8888/Triad40.html?gwt.codesvr=127.0.0.1:9997
    UA-CPU: AMD64
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
    Host: 127.0.0.1:8888
    Connection: Keep-Alive
    Cookie: isc_cState=ready
    Response headers
    X-Included-Test2: true
    X-Included-Test: true
    Content-Type: text/html; charset=iso-8859-1
    Content-Length: 1413

    And in Development Mode log, I saw:
    NullPointerException:null error at " lg.setDataSource(ds);"

    So please tell me the correct way to use DataSource.load()?

    #2
    Are you talking about using different DataSources for different installations of the application? If so, that's what JNDI is for.

    Comment


      #3
      Dynamically set SqlDataSource's database

      No, same application, same installation, just I need pick different DB on fly. those DB has same tables. So I want to use same datasource, But need set DBName when I use the datasource.

      Comment


        #4
        What we are trying to do is:
        Write a single datasource for a table.
        This table exists in the schema for multiple databases.
        We want to be able to dynamically switch from one database to the other while the client application is running.

        Towards this, we have studied the CustomDataSourceLoader examples etc...

        But are still stumped, can you give a reference to a complete example of Servlet and CustomDataSourceLoader code?

        Comment


          #5
          On your questions:

          1. you will want to prefix the DataSource IDs with the dbName as you've shown. This means you may want to use a call to DataSource.load() rather than embedding the list of DataSources in the (static) .html bootstrap file

          2. Nothing to change here

          3. Create a servlet that registers a DynamicDSGenerator *when initialized*. Do not implement doGet or doPost and do not register for any URLs. You are just implementing a servlet so that you can be initialized by the load-on-startup mechanism.

          4. DataSource.load() provides a callback. Do not attempt to call DataSource.get() until after the callback fires.

          Comment


            #6
            Thank you for your reply.

            1). Should OurDSLoaderServlet extend DataSourceLoader?

            You say, that the doPost, doGet, init methods should not be implemented, OK.

            I am stumped by what you mean by:
            "...registers a DynamicDSGenerator " in the OurDSLoaderSevlet.

            would you give a detailed code example (in java) to accomplish this registration in OurDSLoaderServlet?

            --------

            2). You said that our web.xml should have this servlet tag:
            <servlet>
            <servlet-name>DataSourceLoader</servlet-name>
            <servlet-class>com.isomorphic.servlet.DataSourceLoader</servlet-class>
            </servlet>

            How does our OurDSLoaderServlet get loaded by the web.xml?

            ----------

            3). Would you please give us java code specifics or java coded examples?

            -------------------

            thanks,
            Richard

            Comment


              #7
              You don't need to subclass DataSourceLoader or create your own DataSourceLoader Servlet at all. The sole purpose of creating a Servlet is to call addDSGenerator at the appropriate time, via the standard load-on-startup servlets mechanism. This is not specific to SmartGWT, and you can find several examples by Googling.

              Comment


                #8
                Ok, I think we are missing something here.

                Let me put my question this way.

                Now, on the client side,
                I want to use DataSource.load("dbName_mydbname_mydatasourceDS") to load my datasource dynamically.

                This is my code:
                Code:
                 
                 protected void testDynamicDSGenerator()
                  {
                    // testing code
                    DataSource.load("dbName_mydbname_mydsnameDS", new Function()
                    {
                      @Override
                      public void execute()
                      {
                        System.out.println("### DS load complete");
                
                        Window w = new Window();
                        WidgetFactory.setStandardWindowProperties(w);
                        w.setWidth100();
                        w.setHeight("500px");
                        ListGrid lg = new ListGrid();
                        lg.setWidth100();
                        lg.setHeight100();
                        DataSource ds = DataSource.getDataSource("dbName_mydbname_mydsnameDS");
                        lg.setDataSource(ds);
                        lg.fetchData();
                
                      }
                    }, true);
                 
                  }

                On the Server side, I created a MyDSGenerator.java like this:

                Code:
                 public class MyDSGenerator implements DynamicDSGenerator
                {
                
                  @Override
                  public DataSource getDataSource(String orgId, DSRequest arg1)
                  {
                    // TODO Auto-generated method stub
                    String[] params = orgId.split("_");
                
                    System.out.println("execute MyDSGenerator getDataSource(String orgId, DSRequest arg1) " + this);
                    System.out.println(" DBName is " + params[1] + ",  DS Name is " + params[2]);
                
                    DataSource ds = null;
                
                    try
                    {
                      Document doc = loadDataSourceDocument(params[1], params[2]);
                      ds = DataSource.fromXML(doc);
                    }
                    catch(Exception e)
                    {
                      e.printStackTrace();
                    }
                    return ds;
                  }
                
                  // Get the datasource from xml and set the datasource's dbName
                  private Document loadDataSourceDocument(String dbName, String dsName)
                  {
                    Document doc = null;
                    DocumentBuilderFactory fac = DocumentBuilderFactory.newInstance();
                    try
                    {
                      DocumentBuilder builder = fac.newDocumentBuilder();
                      doc = builder.parse("shared/ds/common/" + dsName + ".ds.xml");
                      doc.getDocumentElement().setAttribute("dbName", dbName);
                    }
                    catch(Exception e)
                    {
                      e.printStackTrace();
                      // return null;
                    }
                    return doc;
                  }
                
                }
                And, since you said I dont need to change anything in web.xml and myproject.html file, my web.xml file, the DataSourceLoader servlet tag is like this:

                Code:
                 
                 <servlet>
                        <servlet-name>DataSourceLoader</servlet-name>
                        <servlet-class>com.isomorphic.servlet.DataSourceLoader</servlet-class>
                </servlet>
                
                 <servlet-mapping>
                        <servlet-name>DataSourceLoader</servlet-name>
                        <url-pattern>/sc/DataSourceLoader</url-pattern>
                    </servlet-mapping>
                In myproject.html file, I commented out
                "<!-- <script src="sc/DataSourceLoader?dataSource=mydsnameDS"></script> -->"
                because I will load this DS on demend and will use MyDSGenerator to create a Dynamic datasource xml file then load it.

                But when I run my test like this, I get "The DataSourceLoader servlet is not installed" error message on the screen. and in the log I see this:


                === 2012-10-09 13:58:37,679 [l0-4] INFO RequestContext - URL: '/sc/modules/ISC_Grids.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,679 [l0-2] INFO RequestContext - URL: '/sc/modules/ISC_Forms.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,679 [l0-0] INFO RequestContext - URL: '/sc/modules/ISC_Core.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,757 [l0-0] INFO Compression - /sc/modules/ISC_Core.js: 756455 -> 195500 bytes
                === 2012-10-09 13:58:37,772 [l0-0] INFO RequestContext - URL: '/sc/modules/ISC_RichTextEditor.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,803 [l0-6] INFO Compression - /sc/modules/ISC_Foundation.js: 243894 -> 57682 bytes
                === 2012-10-09 13:58:37,819 [l0-6] INFO RequestContext - URL: '/sc/modules/ISC_Calendar.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,850 [l0-5] INFO Compression - /sc/modules/ISC_Containers.js: 134005 -> 31664 bytes
                === 2012-10-09 13:58:37,850 [l0-5] INFO RequestContext - URL: '/sc/modules/ISC_DataBinding.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,881 [l0-4] INFO Compression - /sc/modules/ISC_Grids.js: 816430 -> 205516 bytes
                === 2012-10-09 13:58:37,897 [l0-4] INFO RequestContext - URL: '/sc/skins/Graphite/load_skin.js', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:37,897 [l0-6] INFO Compression - /sc/modules/ISC_Calendar.js: 115858 -> 28639 bytes
                === 2012-10-09 13:58:37,959 [l0-0] INFO Compression - /sc/modules/ISC_RichTextEditor.js: 39881 -> 11127 bytes
                === 2012-10-09 13:58:37,991 [l0-2] INFO Compression - /sc/modules/ISC_Forms.js: 684410 -> 165860 bytes
                === 2012-10-09 13:58:38,022 [l0-4] INFO Compression - /sc/skins/Graphite/load_skin.js: 55405 -> 9429 bytes
                === 2012-10-09 13:58:38,037 [l0-5] INFO Compression - /sc/modules/ISC_DataBinding.js: 620623 -> 151202 bytes

                === 2012-10-09 13:58:38,349 [l0-5] INFO RequestContext - URL: '/sc/skins/Graphite/skin_styles.css', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:38,412 [l0-5] INFO Compression - /sc/skins/Graphite/skin_styles.css: 164972 -> 14264 bytes



                === 2012-10-09 13:58:38,850 [l0-3] INFO RequestContext - URL: '/favicon.ico', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:38,857 [l0-3] INFO RequestContext - URL: '/triad40/hosted.html', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:38,891 [l0-3] INFO Compression - /triad40/hosted.html: 11757 -> 4187 bytes
                === 2012-10-09 13:58:46,226 [l0-3] INFO RequestContext - URL: '/sc/DataSourceLoader', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS

                [WARN] 404 - GET /myproject/sc/DataSourceLoader?dataSource=dbName_mydbname_myDSnameDS&isc_rpc=1&isc_v=SNAPSHOT_v8.3d_2012-07-23&isc_xhr=1&isc_tnum=0&_transaction=%3Ctransaction%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2F10%2FXMLSchema-instance%22%20xsi%3Atype%3D%22xsd%3AObject%22%3E%3CtransactionNum%20xsi%3Atype%3D%22xsd%3Along%22%3E0%3C%2FtransactionNum%3E%3Coperations%20xsi%3Atype%3D%22xsd%3AList%22%3E%3Celem%3E__ISC_NULL__%3C%2Felem%3E%3C%2Foperations%3E%3C%2Ftransaction%3E&protocolVersion=1.0 (127.0.0.1) 1413 bytes
                Request headers
                Accept: */*
                Referer: http://127.0.0.1:8888/Myproject.html?gwt.codesvr=127.0.0.1:9997
                Accept-Language: en-US,zh-CN;q=0.7,zh-TW;q=0.3
                User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
                UA-CPU: AMD64
                Accept-Encoding: gzip, deflate
                Host: 127.0.0.1:8888
                Connection: Keep-Alive
                Cookie: isc_cState=ready
                Response headers
                X-Included-Test2: true
                X-Included-Test: true
                Content-Type: text/html; charset=iso-8859-1
                Content-Length: 1413
                === 2012-10-09 13:58:46,322 [l0-3] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/blank.gif', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,342 [l0-3] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Dialog/warn.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,377 [l0-5] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/button/button_start.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,377 [l0-4] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/button/button_stretch.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,377 [l0-2] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/button/button_end.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,402 [l0-2] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/headerIcons/close.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,412 [l0-2] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_TL.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,415 [l0-3] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_T.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,417 [l0-5] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_TR.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,422 [l0-6] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_R.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,420 [l0-4] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_BL.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,420 [l0-2] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_L.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,420 [l0-0] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_B.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,448 [l0-0] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/Window/window_BR.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,463 [l0-2] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/button/button_Over_end.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,463 [l0-3] INFO RequestContext - URL: '/triad40/sc/skins/Graphite/images/button/button_Over_start.png', User-Agent: 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)': MSIE with Accept-Encoding header, ready for compressed JS
                === 2012-10-09 13:58:46,463 [l0-0] INFO RequestContext - URL: '/triad40/sc/skins/Graphi

                I think the key information is :
                [WARN] 404 - GET /myproject/sc/DataSourceLoader?dataSource=dbName_mydbname_myDSnameDS&isc_rpc=1&is

                And I think we missing something between client side and server side, which will tell server side go to use MyDSGenerator to load DS whenever I use DataSource.load() to load DS on client side.

                I need you to help me to find out what part is missing and can you gave me the example java code for this part.

                Many thanks

                Comment


                  #9
                  continue yeasterday question, since you said I need "
                  Create a servlet that registers a DynamicDSGenerator *when initialized*. Do not implement doGet or doPost and do not register for any URLs. You are just implementing a servlet so that you can be initialized by the load-on-startup mechanism."

                  So, I created MyDSLoaderSevlet like this:
                  Code:
                  public class MyDSLoaderServlet extends HttpServlet
                  {
                  
                    private static final long serialVersionUID = 5167155768324692626L;
                    
                    @Override
                    public void init() throws ServletException
                    {
                      System.out.println("init() TriadDSLoader @@@@@@@ ");
                      DataSource.addDynamicDSGenerator(new MyDSGenerator(), dbName);
                    }
                  }
                  And add load-on-startup servlet in web.xml like this:
                  Code:
                   
                  <servlet>
                     <servlet-name>MyDSLoaderServlet</servlet-name>
                     <servlet-class>MyDSLoaderServlet</servlet-class>
                     <load-on-startup>0</load-on-startup>
                     </servlet>
                  When I run my test case, I saw MyDSLoaderServlet been init in log. But still get "The DataSourceLoader servlet is not installed" error on the screen,

                  And in Console log still see this message:

                  [WARN] 404 - GET /sc/DataSourceLoader?dataSource=dbName_myDbname_myDatasourceDS&isc_rpc=1&isc_v=SNAPSHOT_v8.3d_2012-07-23&isc_xhr=1&isc_tnum=0&_transaction=%3Ctransaction%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2F10%2FXMLSchema-instance%22%20xsi%3Atype%3D%22xsd%3AObject%22%3E%3CtransactionNum%20xsi%3Atype%3D%22xsd%3Along%22%3E0%3C%2FtransactionNum%3E%3Coperations%20xsi%3Atype%3D%22xsd%3AList%22%3E%3Celem%3E__ISC_NULL__%3C%2Felem%3E%3C%2Foperations%3E%3C%2Ftransaction%3E&protocolVersion=1.0 (127.0.0.1) 1413 bytes
                  Request headers
                  Accept: */*
                  Accept-Language: en-US,zh-CN;q=0.7,zh-TW;q=0.3
                  Referer: http://127.0.0.1:8888/Triad40.html?g...127.0.0.1:9997
                  UA-CPU: AMD64
                  Accept-Encoding: gzip, deflate
                  User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
                  Host: 127.0.0.1:8888
                  Connection: Keep-Alive
                  Cookie: isc_cState=ready
                  Response headers
                  X-Included-Test2: true
                  X-Included-Test: true
                  Content-Type: text/html; charset=iso-8859-1
                  Content-Length: 1413

                  So, looks still missing something. Anybody have any idea? Please help, Thanks a lot!
                  Last edited by siegersallee; 10 Oct 2012, 07:38.

                  Comment


                    #10
                    siegersallee ultimately succeeded with offline assistance. For other users, this thread has some good reference code snippets.

                    Comment

                    Working...
                    X