Pomoč pri vračanju podatkov iz webservisa

Pripombe, komentarji ali pohvale o Delphi-SI.
peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 07.02.2008 12:25:43

Pozdrav vsem skupaj..
Naletel sem na več različnih vprašanj in nejasnosti pri delu z webservisi... Ker je toliko različnih stvari in tehnologij se počasi odločam da bi prešeč v vode "ribiča" :) saj bi živel bol umirjeno življenje kot programer ;)

No pa začnimo..
Izdelal sem recimo 2 webservisa.. Prvi webservis vrača podatek tipa String, drugi webservis pa vrača podatek tipa XML (XML struktura)..
Najbolj me muči ta drugi webservis in sicer.. to je neka pl/sql procedura na bazi ki vrača resultset nekega query-a...
Če to izvedem preko explorerja dobim sledeči rezultat:

Webservis, ki mi vrača znamke vozil iz eruotaxa se imenuje: eurotaxznamkavozilaXML.. ko ta webservis pokličem dobim sledeči rezultat:

Koda: Izberi vse

xmlns:ns0="http://razvoj/RAZ.wsdl/types/">
 <env:Body>
  <ns0:eurotaxznamkavozilaXMLResponseElement>
   <ns0:result>
    <result>
     <ROWSET>
      <ROW
        num="1">
       <ID>400000000</ID>
       <OPIS>ALFA ROMEO</OPIS>
      </ROW>
      <ROW
        num="2">
       <ID>400000002</ID>
       <OPIS>AUDI</OPIS>
      </ROW>
      <ROW
        num="3">
       <ID>400000003</ID>
       <OPIS>AUSTIN ROVER</OPIS>
      </ROW>
 </ROWSET>
    </result>
   </ns0:result>
  </ns0:eurotaxznamkavozilaXMLResponseElement>
 </env:Body>
</env:Envelope>
  
Potem pa z Netbeans-om ali Jdeveloperjem iz WSDL-ja zgeneriram Classe za uporabo teh webservisov...
Sedaj pa imam vprašanje... Ponujene imam 2 opcije..

1. JAX-RPC
2. JAX-WS

* SOAP 1.2

JAX-RPC and JAX-WS support SOAP 1.1. JAX-WS also supports SOAP 1.2.
* XML/HTTP

The WSDL 1.1 specification defined an HTTP binding, which is a means by which you can send XML messages over HTTP without SOAP. JAX-RPC ignored the HTTP binding. JAX-WS adds support for it.
* WS-I's Basic Profiles

JAX-RPC supports WS-I's Basic Profile (BP) version 1.0. JAX-WS supports BP 1.1. (WS-I is the Web services interoperability organization.)
* New Java features
o JAX-RPC maps to Java 1.4. JAX-WS maps to Java 5.0. JAX-WS relies on many of the features new in Java 5.0.
o Java EE 5, the successor to J2EE 1.4, adds support for JAX-WS, but it also retains support for JAX-RPC, which could be confusing to today's Web services novices.
* The data mapping model
o JAX-RPC has its own data mapping model, which covers about 90 percent of all schema types. Those that it does not cover are mapped to javax.xml.soap.SOAPElement.
o JAX-WS's data mapping model is JAXB. JAXB promises mappings for all XML schemas.
* The interface mapping model

JAX-WS's basic interface mapping model is not extensively different from JAX-RPC's; however:
o JAX-WS's model makes use of new Java 5.0 features.
o JAX-WS's model introduces asynchronous functionality.
* The dynamic programming model
o JAX-WS's dynamic client model is quite different from JAX-RPC's. Many of the changes acknowledge industry needs:
+ It introduces message-oriented functionality.
+ It introduces dynamic asynchronous functionality.
o JAX-WS also adds a dynamic server model, which JAX-RPC does not have.
* MTOM (Message Transmission Optimization Mechanism)

JAX-WS, via JAXB, adds support for MTOM, the new attachment specification. Microsoft never bought into the SOAP with Attachments specification; but it appears that everyone supports MTOM, so attachment interoperability should become a reality.
* The handler model
o The handler model has changed quite a bit from JAX-RPC to JAX-WS.
o JAX-RPC handlers rely on SAAJ 1.2. JAX-WS handlers rely on the new SAAJ 1.3 specification.
malo sem si prebral: TOREJ JAX-RPC naj bi poznal okoli 90% tipov (data binding)..
Pri meni če recimo pokčičem webservis, ki mi vrača ref_cursor oziroma XML strukturo dobim da je to tipa javax.xml.soap.SOAPElement


Kaj to pomeni, da dobim klasično XML strukturo podatkov, ki jo moram sparsati z recimo DOM parserjem?
Torej webservis vrne XML ki ima atribute (kot so navedeni zgoraj)... potem pa v neki for ali while zanki parsam in gledam kakšne podatke dobim?

Zanima pa me še ena reč in to je ta, da se poleg webservisa eurotaxznamkavozilaXML nahaja še eurotaxznamkavozilaXMLRowSet

Zdaj pa ne vem kaj za enega vraga je ta RowSet.. ?!? ali je to pomožni ws, ki služi pri vračanju podatkov istoimenskega ws?

Verjetno če berem tisti tekst v angleščini je moj rezultat SOAPElement že zaradi tega, ker sam webservis ne ve kakšne atribute bo dobil in tudi ne ve katerega tipa bodo...
Rad bi se le prepričal če razmišljam prav.. torej ker je struktura nepoznana mi webservis ob generiranju vrača XML strukturo ki jo moram ročno "popraviti"..

p.s. Spodaj pošiljam še WSDL če bo komu koristil pri teh mojih vprašanjih

Koda: Izberi vse

<?xml version = '1.0' encoding = 'UTF-8'?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns0="http://razvoj/RAZ.wsdl/types/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://razvoj/RAZ.wsdl" name="RAZ" targetNamespace="http://razvoj/RAZ.wsdl">
    <types>
        <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:tns="http://razvoj/RAZ.wsdl/types/" targetNamespace="http://razvoj/RAZ.wsdl/types/" elementFormDefault="qualified">
            <element name="eurotaxmodelvozilaXMLElement">
                <complexType>
                    <sequence>
                        <element name="znamkavozilaid" type="decimal" nillable="true"/>
                    </sequence>
                </complexType>

            </element>
            <element name="eurotaxmodelvozilaXMLResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>

                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="eurotaxmodelvozilaXMLRowSetElement">
                <complexType>
                    <sequence>
                        <element name="znamkavozilaid" type="decimal" nillable="true"/>

                    </sequence>
                </complexType>
            </element>
            <element name="eurotaxmodelvozilaXMLRowSetResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>

                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="eurotaxznamkavozilaXMLElement">
                <complexType>

                    <sequence/>
                </complexType>
            </element>
            <element name="eurotaxznamkavozilaXMLResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>

                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="eurotaxznamkavozilaXMLRowSetElement">
                <complexType>

                    <sequence/>
                </complexType>
            </element>
            <element name="eurotaxznamkavozilaXMLRowSetResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>

                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="fTestOsebeXMLElement">
                <complexType>

                    <sequence>
                        <element name="pEmso" type="string" nillable="true"/>
                    </sequence>
                </complexType>
            </element>
            <element name="fTestOsebeXMLResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">

                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>

            <element name="fTestOsebeXMLRowSetElement">
                <complexType>
                    <sequence>
                        <element name="pEmso" type="string" nillable="true"/>
                    </sequence>
                </complexType>
            </element>
            <element name="fTestOsebeXMLRowSetResponseElement">
                <complexType>

                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>

                </complexType>
            </element>
            <element name="fVrniDatumElement">
                <complexType>
                    <sequence/>
                </complexType>
            </element>
            <element name="fVrniDatumResponseElement">
                <complexType>

                    <sequence>
                        <element name="result" type="dateTime" nillable="true"/>
                    </sequence>
                </complexType>
            </element>
            <element name="fVrniPosteXMLElement">
                <complexType>
                    <sequence/>
                </complexType>

            </element>
            <element name="fVrniPosteXMLResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>

                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="fVrniPosteXMLRowSetElement">
                <complexType>
                    <sequence/>
                </complexType>

            </element>
            <element name="fVrniPosteXMLRowSetResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>

                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="fVrniSqlXMLElement">
                <complexType>
                    <sequence>
                        <element name="pSql" type="string" nillable="true"/>

                    </sequence>
                </complexType>
            </element>
            <element name="fVrniSqlXMLResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">
                            <complexType>
                                <sequence>

                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>
            <element name="fVrniSqlXMLRowSetElement">
                <complexType>

                    <sequence>
                        <element name="pSql" type="string" nillable="true"/>
                    </sequence>
                </complexType>
            </element>
            <element name="fVrniSqlXMLRowSetResponseElement">
                <complexType>
                    <sequence>
                        <element name="result" nillable="true">

                            <complexType>
                                <sequence>
                                    <any/>
                                </sequence>
                            </complexType>
                        </element>
                    </sequence>
                </complexType>
            </element>

        </schema>
    </types>
    <message name="RAZ_eurotaxmodelvozilaXML">
        <part name="parameters" element="tns0:eurotaxmodelvozilaXMLElement"/>
    </message>
    <message name="RAZ_eurotaxmodelvozilaXMLResponse">
        <part name="parameters" element="tns0:eurotaxmodelvozilaXMLResponseElement"/>
    </message>
    <message name="RAZ_eurotaxmodelvozilaXMLRowSet">

        <part name="parameters" element="tns0:eurotaxmodelvozilaXMLRowSetElement"/>
    </message>
    <message name="RAZ_eurotaxmodelvozilaXMLRowSetResponse">
        <part name="parameters" element="tns0:eurotaxmodelvozilaXMLRowSetResponseElement"/>
    </message>
    <message name="RAZ_eurotaxznamkavozilaXML">
        <part name="parameters" element="tns0:eurotaxznamkavozilaXMLElement"/>
    </message>
    <message name="RAZ_eurotaxznamkavozilaXMLResponse">

        <part name="parameters" element="tns0:eurotaxznamkavozilaXMLResponseElement"/>
    </message>
    <message name="RAZ_eurotaxznamkavozilaXMLRowSet">
        <part name="parameters" element="tns0:eurotaxznamkavozilaXMLRowSetElement"/>
    </message>
    <message name="RAZ_eurotaxznamkavozilaXMLRowSetResponse">
        <part name="parameters" element="tns0:eurotaxznamkavozilaXMLRowSetResponseElement"/>
    </message>
    <message name="RAZ_fTestOsebeXML">

        <part name="parameters" element="tns0:fTestOsebeXMLElement"/>
    </message>
    <message name="RAZ_fTestOsebeXMLResponse">
        <part name="parameters" element="tns0:fTestOsebeXMLResponseElement"/>
    </message>
    <message name="RAZ_fTestOsebeXMLRowSet">
        <part name="parameters" element="tns0:fTestOsebeXMLRowSetElement"/>
    </message>
    <message name="RAZ_fTestOsebeXMLRowSetResponse">

        <part name="parameters" element="tns0:fTestOsebeXMLRowSetResponseElement"/>
    </message>
    <message name="RAZ_fVrniDatum">
        <part name="parameters" element="tns0:fVrniDatumElement"/>
    </message>
    <message name="RAZ_fVrniDatumResponse">
        <part name="parameters" element="tns0:fVrniDatumResponseElement"/>
    </message>
    <message name="RAZ_fVrniPosteXML">

        <part name="parameters" element="tns0:fVrniPosteXMLElement"/>
    </message>
    <message name="RAZ_fVrniPosteXMLResponse">
        <part name="parameters" element="tns0:fVrniPosteXMLResponseElement"/>
    </message>
    <message name="RAZ_fVrniPosteXMLRowSet">
        <part name="parameters" element="tns0:fVrniPosteXMLRowSetElement"/>
    </message>
    <message name="RAZ_fVrniPosteXMLRowSetResponse">

        <part name="parameters" element="tns0:fVrniPosteXMLRowSetResponseElement"/>
    </message>
    <message name="RAZ_fVrniSqlXML">
        <part name="parameters" element="tns0:fVrniSqlXMLElement"/>
    </message>
    <message name="RAZ_fVrniSqlXMLResponse">
        <part name="parameters" element="tns0:fVrniSqlXMLResponseElement"/>
    </message>
    <message name="RAZ_fVrniSqlXMLRowSet">

        <part name="parameters" element="tns0:fVrniSqlXMLRowSetElement"/>
    </message>
    <message name="RAZ_fVrniSqlXMLRowSetResponse">
        <part name="parameters" element="tns0:fVrniSqlXMLRowSetResponseElement"/>
    </message>
    <portType name="RAZ">
        <operation name="eurotaxmodelvozilaXML">
            <input message="tns:RAZ_eurotaxmodelvozilaXML"/>
            <output message="tns:RAZ_eurotaxmodelvozilaXMLResponse"/>

        </operation>
        <operation name="eurotaxmodelvozilaXMLRowSet">
            <input message="tns:RAZ_eurotaxmodelvozilaXMLRowSet"/>
            <output message="tns:RAZ_eurotaxmodelvozilaXMLRowSetResponse"/>
        </operation>
        <operation name="eurotaxznamkavozilaXML">
            <input message="tns:RAZ_eurotaxznamkavozilaXML"/>
            <output message="tns:RAZ_eurotaxznamkavozilaXMLResponse"/>
        </operation>

        <operation name="eurotaxznamkavozilaXMLRowSet">
            <input message="tns:RAZ_eurotaxznamkavozilaXMLRowSet"/>
            <output message="tns:RAZ_eurotaxznamkavozilaXMLRowSetResponse"/>
        </operation>
        <operation name="fTestOsebeXML">
            <input message="tns:RAZ_fTestOsebeXML"/>
            <output message="tns:RAZ_fTestOsebeXMLResponse"/>
        </operation>
        <operation name="fTestOsebeXMLRowSet">

            <input message="tns:RAZ_fTestOsebeXMLRowSet"/>
            <output message="tns:RAZ_fTestOsebeXMLRowSetResponse"/>
        </operation>
        <operation name="fVrniDatum">
            <input message="tns:RAZ_fVrniDatum"/>
            <output message="tns:RAZ_fVrniDatumResponse"/>
        </operation>
        <operation name="fVrniPosteXML">
            <input message="tns:RAZ_fVrniPosteXML"/>

            <output message="tns:RAZ_fVrniPosteXMLResponse"/>
        </operation>
        <operation name="fVrniPosteXMLRowSet">
            <input message="tns:RAZ_fVrniPosteXMLRowSet"/>
            <output message="tns:RAZ_fVrniPosteXMLRowSetResponse"/>
        </operation>
        <operation name="fVrniSqlXML">
            <input message="tns:RAZ_fVrniSqlXML"/>
            <output message="tns:RAZ_fVrniSqlXMLResponse"/>

        </operation>
        <operation name="fVrniSqlXMLRowSet">
            <input message="tns:RAZ_fVrniSqlXMLRowSet"/>
            <output message="tns:RAZ_fVrniSqlXMLRowSetResponse"/>
        </operation>
    </portType>
    <binding name="RAZSoapHttp" type="tns:RAZ">
        <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
        <operation name="eurotaxmodelvozilaXML">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/eurotaxmodelvozilaXML"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="eurotaxmodelvozilaXMLRowSet">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/eurotaxmodelvozilaXMLRowSet"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="eurotaxznamkavozilaXML">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/eurotaxznamkavozilaXML"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="eurotaxznamkavozilaXMLRowSet">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/eurotaxznamkavozilaXMLRowSet"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fTestOsebeXML">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fTestOsebeXML"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fTestOsebeXMLRowSet">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fTestOsebeXMLRowSet"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fVrniDatum">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fVrniDatum"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fVrniPosteXML">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fVrniPosteXML"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fVrniPosteXMLRowSet">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fVrniPosteXMLRowSet"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fVrniSqlXML">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fVrniSqlXML"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
        <operation name="fVrniSqlXMLRowSet">

            <soap:operation soapAction="http://razvoj/RAZ.wsdl/fVrniSqlXMLRowSet"/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>

    <service name="RAZ">
        <port name="RAZSoapHttpPort" binding="tns:RAZSoapHttp">
            <soap:address location="http://dekani:8888/in2/webservisraz/RAZSoapHttpPort"/>
        </port>
    </service>
</definitions>
  

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a Runner » 07.02.2008 13:17:11

Sicer pojma nimam o JAVI, ampak nekaj tako kompliciranega kar ti sedaj opisuješ mi "smrdi" :)

Jaz tudi komuniciram pri enem svojem WS-ju preko XML dokumentov. XML base 64 zapakiram kot čisto navaden string in ga pošljem čez, na drugi strani samo odkodiram in imam originalni XML. Potem pač narediš z njim kar hočeš.
Lahko sicer da nisem razumel kaj točno hočeš ampak jaz tu ne bi posebej kompliciral, sploh ne z nekimi wizardi če imaš na koncu s tem več problemov kot koristi. XML način komunikacije ima še to prednost da je razširljiv in da lahko
z njim brez problemov prenašaš bolj kompleksne stvari in se tako izogneš kompliciranju na strani soapa. Recimo slike itd... Efekt je sicer malo večji pretok podatkov zarad base 64 encodinga ampak ej, že zaradi preprostosti zlahka pojem tale minus :)

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 07.02.2008 13:39:09

saj ni problem kako to generiram.. bolj me zanima rezultat... Po moje je ok,da dobim xml strukturo ker pač webservis ne ve kaj za ene tipe podatkov pričakujem?

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 07.02.2008 13:58:06

Veš kaj me še zanima...

kakšne odzivne čase imate pri webservisih..
Recimo.. če vračam šifrant pošt (cca 570 zapisov) iz baze.. imam response time cca 1394ms...
Če sprožim par hkratnih poizvedb preko webservisa pa ta čas narase na cca 5000-8000 ms kar je 5-8 sekund za dobit 570 zapisov iz tabele..
(šefi trdijo da bi to moralo biti v rangu par mili sekund.. meni pa to ni jasno saj se mora webservis najprej sprožiti uporabiti pool do baze.. poquerat bazo, se sprehodit skozi result, sestavit xml in ga poslat h clientu...


primer zapisa:

Koda: Izberi vse

<env:Envelope
  xmlns:env="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:ns0="http://razvoj/RAZ.wsdl/types/">
 <env:Body>
  <ns0:fVrniPosteXMLResponseElement>
   <ns0:result>
    <result>
     <ROWSET>
      <ROW
        num="1">
       <ID>949</ID>
       <POSTNA_STEVILKA>8600</POSTNA_STEVILKA>
       <NAZIV_POSEBNE_PS>POŠTA SLOVENIJE - PE NOVO MESTO</NAZIV_POSEBNE_PS>
       <NAZIV>NOVO MESTO</NAZIV>
       <TIP_POSTNE_STEVILKE>PŠ</TIP_POSTNE_STEVILKE>
       <DATSPR>8/28/2001 11:31:23</DATSPR>
       <DATVNO>9/22/2000 16:32:50</DATVNO>
       <UPOSPR>SKOK_ZACETNI_PODATKI</UPOSPR>
       <UPOVNO>SKOK_ZACETNI_PODATKI</UPOVNO>
      </ROW>
      <ROW
        num="2">
       <ID>950</ID>
       <POSTNA_STEVILKA>6243</POSTNA_STEVILKA>
       <NAZIV>OBROV</NAZIV>
       <TIP_POSTNE_STEVILKE>OB</TIP_POSTNE_STEVILKE>
       <DATSPR>8/28/2001 11:31:23</DATSPR>
       <DATVNO>9/22/2000 16:32:50</DATVNO>
       <UPOSPR>SKOK_ZACETNI_PODATKI</UPOSPR>
       <UPOVNO>SKOK_ZACETNI_PODATKI</UPOVNO>
      </ROW>
...
..
..
</ROWSET>
    </result>
   </ns0:result>
  </ns0:fVrniPosteXMLResponseElement>
 </env:Body>
</env:Envelope>
 

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a Runner » 07.02.2008 14:05:57

Z bazo preko WS-jem še nisem delal, tako da ne morem govorit o rezultatih. Sam pošiljam WS-ju XML-je, nazaj pa dobivam slike (PNG, BMP...). Nek charting sistem torej ki deluje preko weba. Jaz pri tem nisem zaznal opaznejših zakasnitev. Je pa tudi
res da me hitrost vsega skupaj niti ne zanima toliko.

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 07.02.2008 15:29:35

Aha..
no jaz pa moram nekako doseči čimvečji pretok podatkov..
Zdaj optimiziram to lahko tako, da vračam samo atribute ki jih potrebujem
Imena atributom skrajšam na minimum :)
In zasledil sem da obstaja servlet filter, ki ti zazipa podatke.. com.osmoticweb.gzipfilter.GZIP2WayFilter
recimo.. zipanje in odzipanje traja manj kot če bi podatke prenašal tako kot so :)

Uporabniški avatar
Runner
Prispevkov: 1079
Pridružen: 03.02.2005 12:05:25

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a Runner » 07.02.2008 22:49:43

Ja, če nimaš nekih res dobrih povezav, potem je procesorski čas vedno bolj "pogrešljiv" kot pa čas prenosa. Ravno to sem tudi hotel predlagati, stisni podatke, pa boš pridobil na hitrosti prenosa. Seveda ves overhead SOAP-a in povezovanja na bazo bo pa še vedno tam. Lahko narediš connection pooling in mogoče še kje drugje kaj prihraniš, nikoli pa ne boš enako hiter kot z direktno povezavo na bazo. Torej vidim da še vedno nisi prepričal šefov :D
Zadnjič spremenil Runner, dne 07.02.2008 22:50:06, skupaj popravljeno 1 krat.

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 08.02.2008 18:37:12

Ja.. točno tako..
Connection pooling že uporabljam...
Sicer pa je hudič ker se te tehnologije toliko spreminjajo in dodajajo da človek stežka sledi vsemu..


Ne šefe še nisem prepričal.. no malce sem jih z nekimi testi ki jih ponuja Oracle IAS.. kao 10 procesov hkrati dela eno ali več istih
poizvedb preko webservisa.. response time za tabelo z 570 podatki in 8 atributi traja od 3-8 sekund!! Preko JDBC-ja (pool-a) pa pod sekundo oziroma max 1500 ms..


Vprašal bi še eno reč...
Kako je z transakcijami kadar se uporablja webservis...?!?
Recimo če se povežem na bazo preko jdbc-ja dobim pač nek aktivni Connection.. in transakcijo na koncu commit-am ali rollback-am..
Kako pa je to pri webservisih? Recimo kličem webservis za vnos osebe in drugi za vnos naslova.. ko je vseskupaj vnešeno bi rad commital stvar.. je to preko ws sploh mogoče?

aoven
Prispevkov: 2338
Pridružen: 27.06.2001 23:56:07

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a aoven » 08.02.2008 19:33:47

Če se (spet) malo vmešam... Iz opisov težav v tvojih zadnjih nekaj temah sklepam, da mora biti pisanje web servisov na Java/Oracle platformi hudičevo kompleksno, oz. vsaj hudičevo neintuitivno. V vsakem primeru se mi zdi, da nikakor ne bi smel imeti toliko problemov pri takšni relativno preprosti nalogi, kot jo imaš.

Če bi ti postregel s platformno neobremenjeno definicijo web servica, bi rekel nekaj takega:
Web service efektivno ni nič drugega kot business server v tipični večnivojski arhitekturi, le da uporablja specifičen protokol (SOAP over HTTP/S) za komunikacijo z odjemalci. V vseh ostalih aspektih je to popolnoma navaden strežnik in lahko torej z njim počneš vse stvari, ki bi jih s katerimkoli drugim strežnikom.

V kontekstu tvojega vprašanja o transakcijah to pomeni, da odgovor že poznaš, če si vsaj enkrat napisal kakšen strežnik, ki je delal z bazo.
Če nisi, ti namignem z dvema smernicama:

- Podatke, ki jih lahko na klientu zajameš naenkrat, lahko tudi pošlješ v enem samem klicu na strežnik. Meja transakcije je v tem primeru kar klic metode, zato je to tudi najenostavnejši pristop.
- Podatke, ki jih na klientu zajemaš le v paketih, moraš na strežnik seveda poslati z ločenimi klici. Ker meja transakcije tukaj presega posamičen klic, moraš na strežniku implementirati sejo, ki si lasti povezavo na bazo. Prvi klic začne transakcijo in zadnji jo potrdi. Če vmes pride do preteka seje, se transakcija prekliče.

In to je nekako to. Nikakršna raketna znanost. Kako to implementirati s tvojimi Javanskimi/Oracle orodji pa žal niti slučajno ne vem. Zdi se mi le, da ti povzročajo več problemov, kot jih rešijo. A si mogoče pomislil, da bi web service spisal s čim manj zafrknjenim (če ga že moraš)?

Aleksander
Zadnjič spremenil aoven, dne 08.02.2008 19:35:47, skupaj popravljeno 1 krat.

peterv
Prispevkov: 987
Pridružen: 29.03.2002 13:24:32

Pomoč pri vračanju podatkov iz webservisa

Odgovor Napisal/-a peterv » 09.02.2008 10:15:26

Problem je ta, da se z webservisi prvič srečujem.... Vsi primeri ki jih srečam so čisto enostavni in si z njimi ne morem skoraj da nič pomagati..
Do sedaj sem večinoma programiral v Javi c/s aplikacije, JSF ,Struts...
Problemov nisem imel ne z uporabo baze ne z drugimi rečmi..
Sedaj pa so padli webservisi in je stvar sledeča..
Na razpolago imam Oracle OC4J container in vsa oracolva orodja..
Nimam pa nobenega primera recimo kako poklicat preko webservisa nek paket na bazi znotraj iste seje..
Torej.. preko webservisa pokličem vnos neke osebe in naslova etc.. na koncu pa bi rad zadevo commital..
Problem je tudi ta, ker nimam nadzora nad sejo!?? Namreč pri vsakem klicu webservisa dobim drugi Session_Id iz baze saj
webservis koristi ConnectionPool...

Ko pa generiram webservis imam več možnosti:
1.) JAX-RPC
2.) JAX-WS

potem imam možnosti:
ali je servis statefull.. če ja potem imam še podopcije (Call, OnDemand,Statefull,Application,Session)...

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

Skratka iščem nekoga ki je že delal konkretno z webservisi, da mi lahko tudi pomaga..


Ordodja ki jih imam na razpolago..
Netbeans
JDeveloper,
Tomcat
Oc4J
Axis

Kar je pač vezano na Javo.. JDeveloper uporabljam ker je pač produkcijsko okolje Oraclovo (strežniki, baza in suport)..

Odgovori