Upload
andre-pereira
View
223
Download
3
Tags:
Embed Size (px)
Citation preview
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
A Decent Intro
JBossOne March 2002, Copyright JBossOne March 2002, Copyright JBoss GroupJBoss Group
Integrating Web-Services with J2EE™
Christoph G. Jung
infor business solutions AGD-66199 Friedrichsthal, Germany
Christoph.Jung@{infor.de|jboss.org}
™violation
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
What the hell …
… is infor AG?• ERP-II Vendor & Consultancy.
… are Web-Services?• Typed versus Tagged Data: XML & XSD.• Apache Axis: SOAP & WSDL.
… does JBoss.net?• Integration of Axis into JBoss.• Deployment of Web-Service Archives.• Providers for MBeans, Session Beans.• Serializers for Entity Beans.• Handlers for Security, Tx, etc.
… did SUN dream when sleeping over the advent of M$.NET?
• JAX-B, -RPC, -M & -R.• UDDI.
Vote here!
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
ERP for middle-sized Businesses Manufacturing, Automotive,
Jewellery, Stone, Plastics
Consultancy, Development, Deployment, Training
~800 Employees
>3000 Installations
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
1987: Production Control System MS-DOS
1990: PPS MS-DOS
1993: PPS Windows 3.x
1996: ERP Windows NT
1997: ERP+SCM Windows NT
1998: ERP+SCM Linux
2000: ERP-II AS/400
2002: ERP-II J2EE
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
ERP-II: The Business Backbone …
e-shop
backoffice
e-marketplace
vendor-ERP
finance
MIS
SFA
… needs a technical
nervous system!
customer-ERP
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
package org.jboss.net.samples.store;
public class BusinessPartner { String name=“infor AG”; Address address=new Address();}
public class Address { int zip=66299; String city=null; BusinessPartner partner;}
package org.jboss.net.samples.store;
public class BusinessPartner { String name=“infor AG”; Address address=new Address();}
public class Address { int zip=66299; String city=null; BusinessPartner partner;}
aced0005737200196a6176612e726d692e4d61727368616c6c65644f626a6563747cbd1e97ed63fc3e020003490004686173685b00086c6f6342797465737400025b425b00086f626a427974657371007e00017870b553e3d2757200025b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a69700005740015687474703a2f2f6b612d6a756e……………………………………………………………………………………….
aced0005737200196a6176612e726d692e4d61727368616c6c65644f626a6563747cbd1e97ed63fc3e020003490004686173685b00086c6f6342797465737400025b425b00086f626a427974657371007e00017870b553e3d2757200025b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a69700005740015687474703a2f2f6b612d6a756e……………………………………………………………………………………….
aced0005737200196a6176612e726d692e4d61727368616c6c65644f626a6563747cbd1e97ed63fc3e020003490004686173685b00086c6f6342797465737400025b425b00086f626a427974657371007e00017870b553e3d2757200025b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a69700005740015687474703a2f2f6b612d6a756e……………………………………………………………………………………….
aced0005737200196a6176612e726d692e4d61727368616c6c65644f626a6563747cbd1e97ed63fc3e020003490004686173685b00086c6f6342797465737400025b425b00086f626a427974657371007e00017870b553e3d2757200025b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a6970b42acf317f8060854e0020000787000000026aced0005740015687474703a2f2f6b612d6a756e67313a383038332f71007e000071007e00007571007e0003000001a7aced0005737200236f72672e6a626f73732e6e65742e73616d706c65732e73746f72652e416464726573739ac799006d1ec3380200064900097374726565744e756d4900037a69700005740015687474703a2f2f6b612d6a756e……………………………………………………………………………………….
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1= "http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef>
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1= "http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef>
Typed versus Tagged
Efficiency?
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1= "http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef>
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1= "http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef>
JavaJava
Java.ioJava.io
XMLXML
Platform-Neutral Single Parser
Small Footprint Modular, Tolerant
Transformable
Externalization?
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
internalize
externalizepackage org.jboss.net.samples.store;
public class BusinessPartner { String name=“infor AG” Address address=new Address();}
public class Address { int zip=66299; String city=null; BusinessPartner partner;}
package org.jboss.net.samples.store;
public class BusinessPartner { String name=“infor AG” Address address=new Address();}
public class Address { int zip=66299; String city=null; BusinessPartner partner;} JavaJava
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1="http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef>
<multiRef id="id0“ xsi:type=“n1:BusinessPartner“ xmlns:n1="http://net.jboss.org/samples/store"> <n1:name>infor AG</n1:name> <n1:address id="id1“> <n1:zip>66299</n1:zip> <n1:city xsi:nil="true"/> </n1:address> <n1:partner href=“#id0”/></multiRef> XML
XML
<xsd:schema targetNamespace="http://net.jboss.org/samples/store"> <xsd:complexType name="BusinessPartner"> <xsd:sequence> <xsd:element name="name" nillable="true" type=“xsd:string" /> <xsd:element name="address" nillable="true" type=“Address" /> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="Address"><xsd:sequence> <xsd:element name="zip" type=“xsd:int" /> <xsd:element name=“partner” nillable=“true” type=“BusinessPartner”/></xsd:sequence> </xsd:complexType></xsd:schema>
<xsd:schema targetNamespace="http://net.jboss.org/samples/store"> <xsd:complexType name="BusinessPartner"> <xsd:sequence> <xsd:element name="name" nillable="true" type=“xsd:string" /> <xsd:element name="address" nillable="true" type=“Address" /> </xsd:sequence> </xsd:complexType>
<xsd:complexType name="Address"><xsd:sequence> <xsd:element name="zip" type=“xsd:int" /> <xsd:element name=“partner” nillable=“true” type=“BusinessPartner”/></xsd:sequence> </xsd:complexType></xsd:schema> XSD
XSD
disc
over publish
validat
e
edit
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
<wsdl:description targetNamespace="http://localhost/axis/services/BusinessPartnerService">
</wsdl:description>
<wsdl:description targetNamespace="http://localhost/axis/services/BusinessPartnerService">
</wsdl:description> WSDLWSDL
package org.jboss.net.samples.store;
public interface BusinessPartner Service { BusinessPartner[] findAll();}
package org.jboss.net.samples.store;
public interface BusinessPartner Service { BusinessPartner[] findAll();} JavaJava
XML-RPC
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:n1="http://org.jboss.net/samples/store/BusinessPartnerService" > <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
</soap:Body></soap:Envelope>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:n1="http://org.jboss.net/samples/store/BusinessPartnerService" > <soap:Body soap:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
</soap:Body></soap:Envelope> SOAP
SOAP
<complexType name="ArrayOf_BusinessPartner"> <complexContent mixed="false"> <restriction base="soapenc:Array"> <attribute wsdl:arrayType=“n1:BusinessPartner[]" ref="soapenc:arrayType" /> </restriction> </complexContent></complexType>
<message name=“findAllRequest“/>
<n1:findAllResponse> <n1:findAllResult><item href="#id0"/></findAllResult></ns1:findAllResponse><multiRef id="id0“ xsd:type=“n1:BusinessPartner”/>
<message name="findAllResponse"> <part name="return" type="s1:ArrayOf_BusinessPartner" /></message>
<n1:findAllRequest/>
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Open Source Flexible Architecture
SAX-based Built-in Transports and Type-
Mappings
© 2002 Apache Group
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Axis Deployment
<wsdd:deployment targetNamespace="http://net.jboss.org/samples/store" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <wsdd:service name=“BusinessPartnerService" provider=“java:RPC"> <wsdd:parameter name=“className" value="org.jboss.net.samples.store.BusinessPartner.Service"/> </wsdd:service>
<wsdd:typeMapping qname="BusinessPartner" type="java:org.jboss.net.samples.store.server.BusinessPartner" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory” encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<wsdd:beanMapping qname="Address"/>
<wsdd:transport name=“http”> <wsdd:requestFlow> <wsdd:handler type=“java:java:org.apache.axis.handlers.http.URLMapper”/> </wsdd:requestFlow> </wsdd:transport> </wsdd:deployment>
<wsdd:deployment targetNamespace="http://net.jboss.org/samples/store" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <wsdd:service name=“BusinessPartnerService" provider=“java:RPC"> <wsdd:parameter name=“className" value="org.jboss.net.samples.store.BusinessPartner.Service"/> </wsdd:service>
<wsdd:typeMapping qname="BusinessPartner" type="java:org.jboss.net.samples.store.server.BusinessPartner" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory” encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<wsdd:beanMapping qname="Address"/>
<wsdd:transport name=“http”> <wsdd:requestFlow> <wsdd:handler type=“java:java:org.apache.axis.handlers.http.URLMapper”/> </wsdd:requestFlow> </wsdd:transport> </wsdd:deployment> WSDD
WSDD
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Conclusion: Web-Services
What?Platform-neutral RPC-Protocol.Platform-neutral IDL.(Platform-neutral Registry)
When?Globally-Networked Interaction.Loosely Coupled Components.
How?A Reasonable Service-Container is needed!
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Web-Server
Beans(JMX,EJB)
Container=JBoss
JBoss.net
Deployer
Technical Services(JTA, JNDI,JAAS)
Axis-Servlet
Axis-Service
© 2002 Apache Group
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
AxisServlet
MBeanProvider
Useful for Remote Administration.Prototype.
Lacking Typemappings.No WSDL-Generation.
<wsdd:service name="RemoteAdaptor" provider="Handler"> <wsdd:parameter name="handlerClass" value="org.jboss.net.jmx.server.MBeanProvider"/> <wsdd:parameter name="ObjectName" value="jboss.net:service=Adaptor"/> </wsdd:service>
<wsdd:typeMapping qname="jmx:ObjectNameType" type="java:javax.management.ObjectName" serializer="org.jboss.net.jmx.adaptor.ObjectNameSerializerFactory" deserializer="org.jboss.net.jmx.adaptor.ObjectNameDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
<wsdd:service name="RemoteAdaptor" provider="Handler"> <wsdd:parameter name="handlerClass" value="org.jboss.net.jmx.server.MBeanProvider"/> <wsdd:parameter name="ObjectName" value="jboss.net:service=Adaptor"/> </wsdd:service>
<wsdd:typeMapping qname="jmx:ObjectNameType" type="java:javax.management.ObjectName" serializer="org.jboss.net.jmx.adaptor.ObjectNameSerializerFactory" deserializer="org.jboss.net.jmx.adaptor.ObjectNameDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
JMX
WSDDWSDD
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
AxisServlet
EJBProvider & EntityBeanDeserializer
<ejb-ref> <ejb-ref-name>store/BPService</ejb-ref-name> <ejb-link>BusinessPartnerService</ejb-link></ejb-ref>
<wsdd:service name=“BusinessPartnerService" provider="Handler"> <wsdd:parameter name="handlerClass" value="org.jboss.net.axis.server.EJBProvider"/> <wsdd:parameter name="beanJndiName" value="java:comp/env/store/BPService"/> <wsdd:parameter name="allowedMethods" value="*"/></wsdd:service>
<wsdd:typeMapping qname="BusinessPartner" type="java:org.jboss.net.samples.store.server.BusinessPartner" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.jboss.net.axis.server.EntityBeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <wsdd:parameter name=“beanJndiName” value=“BusinessPartnerHome”/> <wsdd:parameter name=“findMethod” value=“findByPrimaryKey”/> <wsdd:parameter name=“findMethodSignature” value=“java.lang.String”/> <wsdd:parameter name=“findMethodAttributes” value=“name”/><wsdd:typeMapping>
<ejb-ref> <ejb-ref-name>store/BPService</ejb-ref-name> <ejb-link>BusinessPartnerService</ejb-link></ejb-ref>
<wsdd:service name=“BusinessPartnerService" provider="Handler"> <wsdd:parameter name="handlerClass" value="org.jboss.net.axis.server.EJBProvider"/> <wsdd:parameter name="beanJndiName" value="java:comp/env/store/BPService"/> <wsdd:parameter name="allowedMethods" value="*"/></wsdd:service>
<wsdd:typeMapping qname="BusinessPartner" type="java:org.jboss.net.samples.store.server.BusinessPartner" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" deserializer="org.jboss.net.axis.server.EntityBeanDeserializerFactory" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"> <wsdd:parameter name=“beanJndiName” value=“BusinessPartnerHome”/> <wsdd:parameter name=“findMethod” value=“findByPrimaryKey”/> <wsdd:parameter name=“findMethodSignature” value=“java.lang.String”/> <wsdd:parameter name=“findMethodAttributes” value=“name”/><wsdd:typeMapping>
EJB
WSDDWSDD
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Web Service Archives
<module> <java> store.wsr </java></module>
<wsdd:deployment> <wsdd:service/> <wsdd:typemapping/></wsdd:deployment>
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
WSDL-Generation
AxisServlet P
rovi
der
Bean
http://localhost/axis/services/BusinessPartnerService?wsdl
generateWsdl()introspect()
WSDL-DOM
<wsdl:description targetNamespace="http://localhost/axis/services/BusinessPartnerService">
</wsdl:description>
<wsdl:description targetNamespace="http://localhost/axis/services/BusinessPartnerService">
</wsdl:description> WSDLWSDL
<message name=“findAllRequest“/><message name="findAllResponse"> <part name="return" type="s1:ArrayOf_BusinessPartner" /></message>
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Additional Handlers
AxisServlet
Bean
JBoss
-S
etC
L
JBoss
-A
uth
en
t.
JBoss
-A
uth
or.
JBoss
-R
ese
tCL
Pro
vid
er
JBoss
-R
ese
tTx
JBoss
-F
orc
eS
er
JBoss
-T
x•set thread context classloader to the service´s deployment classloader.•run HTTP-Basic-Authentication values against a given security manager.•control access to service depending on security roles.
•start new User-Tx •force serialisation within Tx-Borders•commit/rollback User-TX•reset thread classloader
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Planned: Universal Description, Discovery and Integration
•JBoss-Integrated UDDI-Server (uddi4j, juddi)•Automatic Publication of Web-Services
Information about•business •service•binding•specification
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
J2EE1.4: Let´s be the first ;-)
JAXR – Java API for XML-Registries JBoss.net will use this API.
JAXRPC – Java API for XML Remote Procedure Call Axis does already partially implement this API.
JAXM – Java API for XML-based Messaging It is underlying JAXRPC
JAXB – Java API for XML Data Binding (EA-Q4, 2002) Axis hopefully will use this API.
J2EE Web Service Deployment Specification JBoss.net will implement it.
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
Conclusion: JBoss.net
We want you to give it a try! Integration-Plugin that ties (Open Source) Web Service Tools to JBoss. Philosophy: Web Services as an optional wrapper around J2EE™ Crucial Parts (Deployment, Security, Bean-Interaction-Patterns) are done.
We want you to participate! Fine-Tuning needed (Doco,MBeanProvider, Handler-Params). Automatic Bean-Exposure Mode. Web Service Clustering. Java2WebService needs Polishing. JAXR & UDDI. Keeping up with the Web Service Standardization Process. JDO as a data-source, JMS as a transport? Reference values for Web Services, Collections.
Jboss 3.0
JBossOne, March 2002. Copyright JBoss GroupJBossOne, March 2002. Copyright JBoss Group
A Decent Outro
All Your W
eb Services A
re Belong To Us!