SOA Today with

31
SOA Today with

description

SOA Today with. Agenda. SOA defined Introduction to XFire A JSR 181 Service Other “stuff” Questions. Service Oriented 1. to orient around services 2. buzzword 3. Service oriented is NOT (but can be). NEW XML Web Services ESBs [insert cool product here]. - PowerPoint PPT Presentation

Transcript of SOA Today with

Page 1: SOA Today with

SOA Today with

Page 2: SOA Today with

Agenda

• SOA defined

• Introduction to XFire

• A JSR 181 Service

• Other “stuff”

• Questions

Page 3: SOA Today with

Service Oriented

1. to orient around services2. buzzword3. ...

Page 4: SOA Today with

Service oriented is NOT(but can be)

NEW

XML

Web Services

ESBs

[insert cool product here]

Page 5: SOA Today with

Service oriented is an architectual style

Page 6: SOA Today with

Loosely Coupled

NOT

Page 7: SOA Today with

Highly Interoperable

Built on standards Crosses boundaries

Page 8: SOA Today with

Service oriented is business oriented

Page 9: SOA Today with

XFire

• Web Services for Java• Standards based: XML, SOAP, WSDL,

WS-*• Open Source (MIT license)• Easy to use:

– JSR181 – Spring support– Code->WSDL– WSDL->code

Page 10: SOA Today with

Architecture

• Streaming xml (StAX)

• Pluggable bindings – POJOs, JAXB, XMLBeans, Castor, Custom types

• Multiple transports – HTTP, XMPP, JMS, In-JVM transports – (and write your own easily via our Transport API!)

• Embeddable

Page 11: SOA Today with

Performance

• Traditional Web Services

Build Objects

Build DOM

Invoke Service

Build DOM

Write DOM

• Requires building two object representations– Document Object Model– Business domain objects

Page 12: SOA Today with

XFire Performance

• Streaming Model

Invoke Service

Build objects from stream

Write objects to stream

• Builds domain objects directly from the XML stream

• Low latency and high throughput model

• 2-5+x the throughput of Axis and 1/2-1/5 the latency

Page 13: SOA Today with

XFire and JSR 181

• Easy code first deployment

• Model service via annotations

• Java 5 and Java 1.4 through commons-attributes or Retroweaver

Page 14: SOA Today with

The OrderService

@WebService

public interface OrderService

{

}

Page 15: SOA Today with

Our Operations

@WebMethodpublic Collection<Order> getOrders();

@WebMethodpublic long addOrder(Order o);

@WebMethodpublic void removeOrder(long id);

Page 16: SOA Today with

Our Operations Take 2

@WebMethod

@WebParam(name=“OrderId”)

public long addOrder(

@WebParam(name=“Order”) Order o);

Page 17: SOA Today with

Service Implementation

@WebService(

endpointInterface=“OrderService”,

serviceName=“OrderService”)

public class OrderServiceImpl

{

// implement operations here

}

Page 18: SOA Today with

Configure the Service

• A ServiceFactory creates a Service

• A Service is registered in the ServiceRegistry

• XFireHttpServer creates a Jetty instance configured for XFire

• An XFireProxyFactory creates a proxied Client

Page 19: SOA Today with

Create the Service

XFire xfire = XFireFactory.newInstance().getXFire();

AnnotationServiceFactory factory = new AnnotationServiceFactory( new Jsr181WebAnnotations(), xfire.getTransportManager());

Service service = factory.create(OrderServiceImpl.class);xfire.getServiceRegistry().register(service);

XFireHttpServer server = new XFireHttpServer();server.start();

Page 20: SOA Today with

Easy client

XFireProxyFactory xpf = new XFireProxyFactory();

OrderService service = (OrderService) xpf.create(model, OrderService.class);

service.getCustomers();

Page 21: SOA Today with

The services.xml version

<beans>

<service>

<serviceFactory>jsr181</serviceFactory>

<serviceClass>OrderServiceImpl</serviceClass>

</service>

</beans>

Page 22: SOA Today with

A “pure” Spring version

<import resource=“/org/codehaus/xfire/spring/xfire.xml”/>

<bean id=“orderService” class=“org.codehaus.xfire.spring.ServiceBean”> <property name=“serviceClass” value=“com.acme.OrderServiceImpl”/> <property name=“serviceFactory” ref=“jsr181”/></bean>

<bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"/>

<bean id=“jsr181 class=“org.codehaus.xfire.anotations.AnnotationServiceFactory”> <constructor-arg ref=“webAnnotations”> <constructor-arg ref=“xfire.transportManager”/></bean>

Page 23: SOA Today with

A “pure” Spring version

<import resource=“/org/codehaus/xfire/spring/xfire.xml”/>

<bean id=“orderService” class=“org.codehaus.xfire.spring.ServiceBean”> <property name=“serviceClass” value=“com.acme.OrderServiceImpl”/> <property name=“serviceFactory” ref=“jsr181”/></bean>

<bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"/>

<bean id=“jsr181 class=“org.codehaus.xfire.anotations.AnnotationServiceFactory”> <constructor-arg ref=“webAnnotations”> <constructor-arg ref=“xfire.transportManager”/></bean>

Page 24: SOA Today with

A “pure” Spring version

<import resource=“/org/codehaus/xfire/spring/xfire.xml”/>

<bean id=“orderService” class=“org.codehaus.xfire.spring.ServiceBean”> <property name=“serviceClass” value=“com.acme.OrderServiceImpl”/> <property name=“serviceFactory” ref=“jsr181”/></bean>

<bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"/>

<bean id=“jsr181 class=“org.codehaus.xfire.anotations.AnnotationServiceFactory”> <constructor-arg ref=“webAnnotations”> <constructor-arg ref=“xfire.transportManager”/></bean>

Page 25: SOA Today with

A “pure” Spring version

<import resource=“/org/codehaus/xfire/spring/xfire.xml”/>

<bean id=“orderService” class=“org.codehaus.xfire.spring.ServiceBean”> <property name=“serviceClass” value=“com.acme.OrderServiceImpl”/> <property name=“serviceFactory” ref=“jsr181”/></bean>

<bean id="webAnnotations" class="org.codehaus.xfire.annotations.jsr181.Jsr181WebAnnotations"/>

<bean id=“jsr181 class=“org.codehaus.xfire.anotations.AnnotationServiceFactory”> <constructor-arg ref=“webAnnotations”> <constructor-arg ref=“xfire.transportManager”/></bean>

Page 26: SOA Today with

Testing

• Test against your target platforms– .NET, PHP, Ruby, Perl, [fancy lang here]

• Record messages and play back

• Use AbstractXFireAegisTest– invokeService(serviceName, document)

Page 27: SOA Today with

Security

• Authentication – HTTP, WS-Security, Custom headers

• Authorization – Acegi, Custom code

• Integrity – WS-Security

• Privacy – HTTPS, JMS, WS-Security

• Avoid WS-Security whenever possible. Its dead slow.

Page 28: SOA Today with

Custom authentication

public void addOrder( @WebParam(header=true) AuthToken token, @WebParam Order order);

public class AuthToken { String username; String password; ….}

Page 29: SOA Today with

SOA with XFire perspective

• Loosely Coupled – OrderService is independent of others

• Highly interopable – All you need is the WSDL

• Business oriented– Shares data across business boundaries

Page 30: SOA Today with

Where to now

• Use XFire Mapping files to control WSDL/XSD

• Do Schema/WSDL first with JAXB, XMLBeans or Castor for more control

• Hook up services to JMS or ServiceMix or Mule

• Write more services!

• Investigate WS-* needs

Page 31: SOA Today with

Questions? More Information:

• Web site: http://xfire.codehaus.org

• Mailing Lists: http://xfire.codehaus.org/Support

• My Blog: http://netzooid.com/blog• Commercial Support:

http://envoisolutions.com• Send email to [email protected] for

performance stats