(Go: >> BACK << -|- >> HOME <<)

SlideShare a Scribd company logo
Advanced Spring Framework Rod Johnson CEO Interface21 www.interface21.com
Aims  Understand the capabilities of the Spring Framework component model, and how you can use them to add new power to your POJO-based applications
Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1: New Scaling out the Spring component model
What Is Spring?
Much  More Than an IoC Container… Core component model  + Services  + Patterns (Recipes) + Integration (Ecosystem) + Portability (Runs everywhere) = Universal POJO programming model Embraced by more and more enterprise vendors
Enabling Technologies Simple Object Simple Object Dependency Injection AOP Portable Service Abstractions (PSA)
Simple POJO public class DefaultWeatherService  implements WeatherService {   public String getShortSummary(String location) { ... public String getLongSummary(String location) { ... public void update(String location, WeatherData newData) } No special requirements No dependencies on Spring
Applying Declarative Transactions  <aop:config> <aop:pointcut id=&quot;businessService&quot; expression=&quot; execution(* *..*Service+.*(..)) &quot;/> <aop:advisor pointcut-ref=&quot;businessService&quot; advice-ref=&quot;txAdvice&quot;/> </aop:config> < tx:advice  id=&quot;txAdvice&quot;> <tx:attributes> <tx:method name=&quot;get*&quot; read-only=&quot;true&quot;/> <tx:method name=&quot;rent*&quot;/> </tx:attributes> </tx:advice> Pointcut  identifies business service methods Advice  adds behavior. This advice makes business services transactional.
Value add: Exporting a Remote Endpoint  <bean name=&quot;/httpInvoker/weatherService&quot;  class=&quot;o.sfw...HttpInvokerServiceExporter&quot;> <property name=&quot;service&quot; ref=&quot;weatherService&quot;/>   <property name=&quot;serviceInterface&quot; value=&quot;com.mycompanyWeatherService“ /> </bean> Can add any number of server side  Exporters  for each Spring managed bean Don’t need to write any Java™ code
Remote Client: POJO public class MyClient { private WeatherService ws; public void setWeatherService(WeatherService ws) { this.ws = ws; } // Business methods omitted }
Configuring the Remote Client POJO <bean id=“weatherService&quot;  class=&quot;o.sfw..HttpInvokerProxyFactoryBean&quot;> <property name=&quot;serviceUrl&quot; value=&quot;http://localhost:8080/httpInvoker/weatherService&quot; > <property name=&quot;serviceInterface&quot; value=&quot;com.mycompany.WeatherService&quot; /> </bean> <bean id=&quot;myClient&quot; class=&quot;...MyClient&quot; p:weatherService=&quot;weatherService&quot; >
Unit Testing the Dependency Injected Client public void testForMyClient() { MyClient mc = new MyClient(); mc.setWeatherService(myMockService); // Test mc } Can simply inject proxy into client Imagine how much harder testing would be if we had coded the lookup method in the client
Value add: Java Management Extensions (JMX™) API Export <bean id=&quot;mbeanExporter&quot; class=&quot;org.sfw…MBeanExporter&quot;> <property name=&quot;beans&quot;> <map> <entry key=&quot;i21:service=weatherService&quot;> <ref local=“ weatherService &quot;/> </entry> <!-- other objects to be exported here --> </map> </property> </bean> Can expose any bean as a JMX API MBean without writing JMX API code
Extension Point: Auditing Aspect Spring container can weave any managed POJO with aspects This aspect monitors access to the methods that ask for weather summary strings Single code module addresses single requirement (auditing) Type safe with  argument binding @Aspect public class WeatherMonitorAuditAspect { @After(&quot;execution(String *.WeatherService.*(String))  && args(location) && this(ws)&quot;) public void onQuery( String location WeatherService ws)  { // Location and WeatherService are  bound   // to the aspect  } } Pointcut  identifies the methods that should be affected Advice  method contains code to execute
Applying the Aspect Ensure an  <aop:aspectj-autoproxy/>  tag is used to turn on automatic application of any @AspectJ aspects found in the context Simply define the aspect as a Spring bean <bean class=“…WeatherMonitorAuditAspect” />
User Extension Points The Spring IoC container provides many extension points Can easily modify the behavior of the container to do custom annotation processing, specific callbacks, validation etc. or even to wrap managed objects in proxies For example: FactoryBean —object configured by the container that creates a component, introducing a level of indirection BeanPostProcessor —called on every bean instantiation BeanFactoryPostProcessor —can modify container metadata BeanDefinition —provides ability to add custom metadata for processing by post processors
User Extension Point Example Example: Introducing a  LogAware  interface Components implementing this are given a log instance The  AccountService  bean needs a  Log : public class AccountService implements  LogAware { private Log log; public void setLog(Log log) { this.log = log; } // Business methods omitted... }
User Extension Point Example (Cont.) public class LogInjectingBeanPostProcessor implements  BeanPostProcessor  { public Object postProcessBeforeInitialization( Object bean, String beanName) throws BeansException  { if (bean instanceof LogAware) { injectLog((LogAware) bean); } return bean; } public Object postProcessAfterInitialization( Object bean, String beanName) throws BeansException  { return bean; } } Called as every bean is initialized Return value can be any object that is type compatible with the bean being processed
Activating a BeanPostProcessor Like most Spring IoC extension points, simply define as a bean Automatically gets applied to all other beans Customizes the behavior of the container <bean id=“com.mycompany.LogInjectingPostProcessor” />
Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Dynamic language support Scaling out the Spring component model
XML Configuration Extensions in Spring 2.0: Important New Extension Point A bean definition is a recipe for creating one object Spring 2.0 added the ability to define new XML tags to produce zero or more Spring bean definitions Important new extension point, offering: Higher level of abstraction can simplify many tasks Enables group beans that need to work together into a single configuration unit Can allow existing XML configuration formats to be used to build Spring configuration
How Are XML Configuration Extensions Used? Tags out of the box for common configuration tasks Many third party products integrating with Spring Including Java API for XML Web Services (JAX-WS) Reference Implementation User Extensions: Problem-specific configuration Makes it easier to develop and maintain applications Allow XML schema validation Better out of the box tool support Code completion for free Exploit the full power of XML Namespaces, schema, tooling
XML Configuration in Spring 2.0 <bean id=&quot;dataSource&quot; class=&quot;...JndiObjectFactoryBean&quot;>   <property name=&quot;jndiName&quot; value=&quot;jdbc/StockData&quot;/> </bean> <jee:jndi-lookup id=&quot;dataSource&quot;  jndiName=&quot;jdbc/StockData&quot;/>
XML Configuration in Spring 2.0 <bean id=&quot;properties&quot; class=&quot;...PropertiesFactoryBean&quot;>   <property name=&quot;location&quot; value=&quot;jdbc.properties&quot;/> </bean> <util:properties id=&quot;properties&quot;  location=&quot;jdbc.properties&quot;/>
Transaction Simplification Specialized tags for making objects transactional Benefit from code assist <tx:annotation-driven /> Code assist for transaction attributes
Annotation Driven Transactions @Transactional(readOnly=true) interface TestService { @Transactional(readOnly=false,   rollbackFor=DuplicateOrderIdException.class) void createOrder(Order order) throws DuplicateOrderIdException; List queryByCriteria(Order criteria); }
Annotation Driven Transactions <bean class=&quot;org.springframework...DefaultAdvisorAutoProxyCreator&quot;/> <bean class=&quot;org.sfw...TransactionAttributeSourceAdvisor&quot;> <property name=&quot;transactionInterceptor ref=&quot;transactionInterceptor&quot;/> </bean> <bean id=&quot;transactionInterceptor&quot; class=&quot;org.springframework...TransactionInterceptor&quot;> <property name=&quot;transactionManager&quot; ref=&quot;transactionManager&quot;/> <property name=&quot;transactionAttributeSource&quot;> <bean class=&quot;org.sfw...AnnotationsTransactionAttributeSource&quot;>   </bean> </property> </bean> <tx:annotation-driven/>
Out-of-the-Box Namespaces AOP JMX API Remoting Scheduling MVC Suggestions and contributions welcome A rich library will build over time
Authoring Custom Extensions: Step 1 Write an XSD to define element content Allows sophisticated validation, well beyond DTD Amenable to tool support during development Author with XML tools XML Spy
Authoring Custom Extensions: Step 2 Implement a  NamespaceHandler  to generate Spring BeanDefinitions from element content Helper classes such as  BeanDefinitionBuilder  to make this easy public interface NamespaceHandler { void init(); BeanDefinition parse(Element element,  ParserContext parserContext); BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition,  ParserContext parserContext); }
Authoring Custom Extensions: Step 3 Add a mapping in a META-INF/spring.handlers file http//www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler http//www.springframework.org/schema/aop=org.springframework.aop.config.AopNamespaceHandler http//www.springframework.org/schema/jndi=org.springframework.jndi.config.JndiNamespaceHandler http//www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler http//www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler
Using Custom Extensions Import relevant XSD Use the new elements <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot; xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd&quot;>
Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1 Scaling out the Spring component model
What's New in Spring 2.1? Spring 2.1 Allows use of annotations for configuration, as well as XML Can mix and match annotations and XML JCA 1.5 support Further enhancements in JPA support Aims: Make Spring still easier to use
Java code: Annotations autoscanned @Component public class FooServiceImpl  implements FooService { @Autowired private FooDao fooDao; public String foo(int id) {   return fooDao.findFoo(id); } } @Aspect  public class ServiceInvocationCounter {   private int useCount;   @Pointcut(&quot;execution(* demo.FooService+.*(..))&quot;)   public void serviceExecution() {}   @Before(&quot;serviceExecution()&quot;)   public void countUse() {   this.useCount++;   }   public int getCount() {   return this.useCount;   } }
Bootstrap configuration <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot; http://www.springframework.org/schema/beans &quot;   xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot;   xmlns:context=&quot; http://www.springframework.org/schema/context &quot;   xsi:schemaLocation=&quot; http://www.springframework.org/schema/beans   http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   http://www.springframework.org/schema/context   http://www.springframework.org/schema/context/spring-context-2.1.xsd &quot;> <context:annotation-scan base-package=&quot;demo&quot;/> <bean id=&quot;fooDaoImpl&quot; class=&quot;demo.FooDaoImpl&quot;   p:dataSource=&quot;dataSource&quot; /> <bean id=&quot;dataSource&quot;  class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;   p:driverClassName=&quot;org.hsqldb.jdbcDriver&quot;   p:url=“jdbc:hsqldb:mem:hsql:foo&quot;   p:username=&quot;sa&quot; /> </beans>
One  component model Contributions from different sources of configuration XML Java code Internal Java metadata not coupled to configuration format
Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1 Scaling out the Spring component model
Scaling Out Spring Spring can consume objects written in dynamic languages It can also make it easier to scale out applications by deploying and exposing POJOs in new models Examples Other deployment models such as grid SOA with SCA and ESBs OSGi dynamic modularization
Scaling POJOs Out to Grid Deployment Spring enables applications to be implemented in POJOs Avoids assumptions about environment in application code Environment changes over time Ignorance is bliss: What your objects don’t know can’t break them if it changes Hence deployment model can change without breaking code Servlet Application Server Standalone client Grid distribution technology…
SCA (Service Component Architecture): A Standard for SOA Assembly model Service components, references, wires Policy framework QoS etc. Service implementation and client API Spring Java API C++ BPEL EJB™ architecture Bindings  Web Services, Java Message Service (JMS), Java Cryptography Architecture (JCA)
The Open SOA Collaboration BEA IBM Oracle SAP Sun Interface21 Red Hat Cape Clear Software IONA Primeton Technologies Sybase Siemens Software AG TIBCO Rogue Wave Software
Any Spring Application Is “SCA-ready”… SCA System SCA Component A SCA Component B Spring App Context Bean A Bean B Spring App Context Bean X Bean Y Bean A exposed as service External reference
OSG — what?
o p e n s r v i c e s t a g w a y a t i v e t i n i 1 1 2 3
OSG i The Dynamic Module System for Java technology njection
OSGi: A Module System… Partition a system into modules  “ Bundles” Strict visibility rules Resolution process  Satisfies dependencies of a module Understands versioning!
… and It’s Dynamic! Modules can be  Installed Started Stopped Uninstalled Updated … at runtime!
Spring and OSGi: Complementary Technologies Both are the best at what they do Injection/AOP component model Dynamic runtime infrastructure Both run  everywhere Little overlap Natural to combine dynamic power of OSGi with ease of use of Spring component model Spring/OSGi integration likely to make its way into OSGi specifications
Spring OSGi—Project Goals Use Spring container to configure modules (bundles) Make it easy to publish and consume services Across a number of bundles Enable applications to be coded without dependency on OSGi APIs Easy unit and integration testing Provide the needed bundles and infrastructure to deploy OSGi-based applications to application servers
Project Collaborators Led by Interface21 Committers from BEA and Oracle also active on the project Input to the specification and direction from OSGi Alliance (technical director and CTO) BEA, Oracle, IBM Eclipse Equinox Felix and many individuals
OSGi Packaging for Spring Spring modules packaged as OSGi bundles Spring-core Spring-beans Spring-aop Etc. All the necessary import and export package headers defined Enables an OSGi application to import and use Spring packages and services Currently done in Spring-OSGi project Spring module jars will come this way “out of the box” in Spring 2.1
Spring Makes It Easy!  Exporting a service: <osgi:service id=&quot;simpleServiceOsgi&quot; ref=&quot;simpleService&quot; interface= &quot;org.sfw.osgi.samples.ss.MyService&quot;/> Importing a service: <osgi:reference id=&quot;aService&quot; interface= &quot;org.sfw.osgi.samples.ss.MyService&quot;/>
Visibility Each bundle is a segregated class space MVC MVC MVC S S R R D Lib Lib Lib
Versioning MVC MVC S R
Versioning MVC MVC’ S R Two versions of the same service types… at the  same time! S’
The Spring Portfolio Spring Framework Spring WebFlow Spring Web Services Spring Security Spring Rich Client Spring LDAP Spring IDE Spring OSGi Spring Modules Spring.NET Takes familiar Spring concepts to a wide range of areas Consistent themes of Simplicity and Power
Summary Spring provides a highly extensible component model POJOs used as “Spring beans” in a Spring application benefit from many potential services for free Many value adds out of the box Many extension points for users The Spring component model is ready for the challenges of tomorrow. Build out directions include: Dynamic language support SCA OSGi
Q&A

More Related Content

What's hot

Seven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuseSeven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuse
Matt Raible
 
Clojure Web Development
Clojure Web DevelopmentClojure Web Development
Clojure Web Development
Hong Jiang
 
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Matt Raible
 
Spark IT 2011 - Java EE 6 Workshop
Spark IT 2011 - Java EE 6 WorkshopSpark IT 2011 - Java EE 6 Workshop
Spark IT 2011 - Java EE 6 Workshop
Arun Gupta
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
Matt Raible
 
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Matt Raible
 
Choosing a Java Web Framework
Choosing a Java Web FrameworkChoosing a Java Web Framework
Choosing a Java Web Framework
Will Iverson
 
Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010
Matt Raible
 
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Matt Raible
 
How to Win at UI Development in the World of Microservices - THAT Conference ...
How to Win at UI Development in the World of Microservices - THAT Conference ...How to Win at UI Development in the World of Microservices - THAT Conference ...
How to Win at UI Development in the World of Microservices - THAT Conference ...
Matt Raible
 
Front End Development for Back End Java Developers - NYJavaSIG 2019
Front End Development for Back End Java Developers - NYJavaSIG 2019Front End Development for Back End Java Developers - NYJavaSIG 2019
Front End Development for Back End Java Developers - NYJavaSIG 2019
Matt Raible
 
Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
Matt Raible
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
Matt Raible
 
Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017
Matt Raible
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
Matt Raible
 
Java Web Application Security - UberConf 2011
Java Web Application Security - UberConf 2011Java Web Application Security - UberConf 2011
Java Web Application Security - UberConf 2011
Matt Raible
 
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Matt Raible
 
Apache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-onApache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-on
Matt Raible
 
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache TomcatCase Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
VMware Hyperic
 
What's New in Spring 3.1
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1
Matt Raible
 

What's hot (20)

Seven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuseSeven Simple Reasons to Use AppFuse
Seven Simple Reasons to Use AppFuse
 
Clojure Web Development
Clojure Web DevelopmentClojure Web Development
Clojure Web Development
 
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
Mobile Development with Ionic, React Native, and JHipster - ACGNJ Java Users ...
 
Spark IT 2011 - Java EE 6 Workshop
Spark IT 2011 - Java EE 6 WorkshopSpark IT 2011 - Java EE 6 Workshop
Spark IT 2011 - Java EE 6 Workshop
 
Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021Java REST API Framework Comparison - PWX 2021
Java REST API Framework Comparison - PWX 2021
 
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
Spring Boot APIs and Angular Apps: Get Hip with JHipster! KCDC 2019
 
Choosing a Java Web Framework
Choosing a Java Web FrameworkChoosing a Java Web Framework
Choosing a Java Web Framework
 
Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010Comparing JVM Web Frameworks - Rich Web Experience 2010
Comparing JVM Web Frameworks - Rich Web Experience 2010
 
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
Mobile Development with Ionic, React Native, and JHipster - AllTheTalks 2020
 
How to Win at UI Development in the World of Microservices - THAT Conference ...
How to Win at UI Development in the World of Microservices - THAT Conference ...How to Win at UI Development in the World of Microservices - THAT Conference ...
How to Win at UI Development in the World of Microservices - THAT Conference ...
 
Front End Development for Back End Java Developers - NYJavaSIG 2019
Front End Development for Back End Java Developers - NYJavaSIG 2019Front End Development for Back End Java Developers - NYJavaSIG 2019
Front End Development for Back End Java Developers - NYJavaSIG 2019
 
Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020Front End Development for Back End Java Developers - Jfokus 2020
Front End Development for Back End Java Developers - Jfokus 2020
 
Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021Java REST API Framework Comparison - UberConf 2021
Java REST API Framework Comparison - UberConf 2021
 
Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017Bootiful Development with Spring Boot and React - SpringOne 2017
Bootiful Development with Spring Boot and React - SpringOne 2017
 
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
Microservices for the Masses with Spring Boot, JHipster, and OAuth - Utah JUG...
 
Java Web Application Security - UberConf 2011
Java Web Application Security - UberConf 2011Java Web Application Security - UberConf 2011
Java Web Application Security - UberConf 2011
 
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
Java REST API Comparison: Micronaut, Quarkus, and Spring Boot - jconf.dev 2020
 
Apache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-onApache Roller, Acegi Security and Single Sign-on
Apache Roller, Acegi Security and Single Sign-on
 
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache TomcatCase Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
Case Study: Migrating Hyperic from EJB to Spring from JBoss to Apache Tomcat
 
What's New in Spring 3.1
What's New in Spring 3.1What's New in Spring 3.1
What's New in Spring 3.1
 

Viewers also liked

Charlie Goes Mobile - Enterprise 2.0 on the road
Charlie Goes Mobile - Enterprise 2.0 on the roadCharlie Goes Mobile - Enterprise 2.0 on the road
Charlie Goes Mobile - Enterprise 2.0 on the road
Scott Gavin
 
Two Strategies for Going Mobile: Which One is for You?
Two Strategies for Going Mobile: Which One is for You?Two Strategies for Going Mobile: Which One is for You?
Two Strategies for Going Mobile: Which One is for You?
David Lavenda
 
How To Handle Distractions In The Workplace - GennGlobal
How To Handle Distractions In The Workplace - GennGlobalHow To Handle Distractions In The Workplace - GennGlobal
How To Handle Distractions In The Workplace - GennGlobal
Sarah Ward
 
Beyond Email-The Next Step in BYOD - Sept 2013
Beyond Email-The Next Step in BYOD - Sept 2013Beyond Email-The Next Step in BYOD - Sept 2013
Beyond Email-The Next Step in BYOD - Sept 2013
David Lavenda
 
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
Rendani Nevhulaudzi
 
Enterprise Mobility Solutions & Services
Enterprise Mobility Solutions & ServicesEnterprise Mobility Solutions & Services
Enterprise Mobility Solutions & Services
Affle mTraction Enterprise
 
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
Digital Workplace Group
 
Mobile Enterprise Trends 2015 - Emergence Capital
Mobile Enterprise Trends 2015 - Emergence CapitalMobile Enterprise Trends 2015 - Emergence Capital
Mobile Enterprise Trends 2015 - Emergence Capital
Emergence Capital
 

Viewers also liked (8)

Charlie Goes Mobile - Enterprise 2.0 on the road
Charlie Goes Mobile - Enterprise 2.0 on the roadCharlie Goes Mobile - Enterprise 2.0 on the road
Charlie Goes Mobile - Enterprise 2.0 on the road
 
Two Strategies for Going Mobile: Which One is for You?
Two Strategies for Going Mobile: Which One is for You?Two Strategies for Going Mobile: Which One is for You?
Two Strategies for Going Mobile: Which One is for You?
 
How To Handle Distractions In The Workplace - GennGlobal
How To Handle Distractions In The Workplace - GennGlobalHow To Handle Distractions In The Workplace - GennGlobal
How To Handle Distractions In The Workplace - GennGlobal
 
Beyond Email-The Next Step in BYOD - Sept 2013
Beyond Email-The Next Step in BYOD - Sept 2013Beyond Email-The Next Step in BYOD - Sept 2013
Beyond Email-The Next Step in BYOD - Sept 2013
 
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
HOW IS MOBILE IMPACTING ON GOVERNMENT CORPORATE COMMUNICATIONS AND SERVICE DE...
 
Enterprise Mobility Solutions & Services
Enterprise Mobility Solutions & ServicesEnterprise Mobility Solutions & Services
Enterprise Mobility Solutions & Services
 
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
Eating the enterprise mobile elephant - Digital Workplace Group (DWG)
 
Mobile Enterprise Trends 2015 - Emergence Capital
Mobile Enterprise Trends 2015 - Emergence CapitalMobile Enterprise Trends 2015 - Emergence Capital
Mobile Enterprise Trends 2015 - Emergence Capital
 

Similar to Os Johnson

JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)
Roger Kitain
 
Spring training
Spring trainingSpring training
Spring training
TechFerry
 
OpenWebBeans/Web Beans
OpenWebBeans/Web BeansOpenWebBeans/Web Beans
OpenWebBeans/Web Beans
Gurkan Erdogdu
 
Annotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVCAnnotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVC
John Lewis
 
Workflow Management with Espresso Workflow
Workflow Management with Espresso WorkflowWorkflow Management with Espresso Workflow
Workflow Management with Espresso Workflow
Rolf Kremer
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
SoftServe
 
Devoxx 09 (Belgium)
Devoxx 09 (Belgium)Devoxx 09 (Belgium)
Devoxx 09 (Belgium)
Roger Kitain
 
Introduction To ASP.NET MVC
Introduction To ASP.NET MVCIntroduction To ASP.NET MVC
Introduction To ASP.NET MVC
Alan Dean
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony Container
Diego Lewin
 
What's Coming in Spring 3.0
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
Matt Raible
 
Spring and DWR
Spring and DWRSpring and DWR
Spring and DWR
wiradikusuma
 
Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog Sample
Skills Matter
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
wiradikusuma
 
SpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptxSpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptx
SUFYAN SATTAR
 
2-0. Spring ecosytem.pdf
2-0. Spring ecosytem.pdf2-0. Spring ecosytem.pdf
2-0. Spring ecosytem.pdf
DeoDuaNaoHet
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
yuvalb
 
Ta Javaserverside Eran Toch
Ta Javaserverside Eran TochTa Javaserverside Eran Toch
Ta Javaserverside Eran Toch
Adil Jafri
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
ipolevoy
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial Intro
Pamela Fox
 
Inversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net OverviewInversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net Overview
Orbit One - We create coherence
 

Similar to Os Johnson (20)

JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)JSF 2.0 (JavaEE Webinar)
JSF 2.0 (JavaEE Webinar)
 
Spring training
Spring trainingSpring training
Spring training
 
OpenWebBeans/Web Beans
OpenWebBeans/Web BeansOpenWebBeans/Web Beans
OpenWebBeans/Web Beans
 
Annotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVCAnnotation-Based Spring Portlet MVC
Annotation-Based Spring Portlet MVC
 
Workflow Management with Espresso Workflow
Workflow Management with Espresso WorkflowWorkflow Management with Espresso Workflow
Workflow Management with Espresso Workflow
 
Introduction to JSF
Introduction toJSFIntroduction toJSF
Introduction to JSF
 
Devoxx 09 (Belgium)
Devoxx 09 (Belgium)Devoxx 09 (Belgium)
Devoxx 09 (Belgium)
 
Introduction To ASP.NET MVC
Introduction To ASP.NET MVCIntroduction To ASP.NET MVC
Introduction To ASP.NET MVC
 
Dependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony ContainerDependency Injection, Zend Framework and Symfony Container
Dependency Injection, Zend Framework and Symfony Container
 
What's Coming in Spring 3.0
What's Coming in Spring 3.0What's Coming in Spring 3.0
What's Coming in Spring 3.0
 
Spring and DWR
Spring and DWRSpring and DWR
Spring and DWR
 
Apache Aries Blog Sample
Apache Aries Blog SampleApache Aries Blog Sample
Apache Aries Blog Sample
 
Introducing Struts 2
Introducing Struts 2Introducing Struts 2
Introducing Struts 2
 
SpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptxSpringBootCompleteBootcamp.pptx
SpringBootCompleteBootcamp.pptx
 
2-0. Spring ecosytem.pdf
2-0. Spring ecosytem.pdf2-0. Spring ecosytem.pdf
2-0. Spring ecosytem.pdf
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
Ta Javaserverside Eran Toch
Ta Javaserverside Eran TochTa Javaserverside Eran Toch
Ta Javaserverside Eran Toch
 
ActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group PresentationActiveWeb: Chicago Java User Group Presentation
ActiveWeb: Chicago Java User Group Presentation
 
OpenSocial Intro
OpenSocial IntroOpenSocial Intro
OpenSocial Intro
 
Inversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net OverviewInversion Of Control: Spring.Net Overview
Inversion Of Control: Spring.Net Overview
 

More from oscon2007

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Tour
oscon2007
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5
oscon2007
 
Os Borger
Os BorgerOs Borger
Os Borger
oscon2007
 
Os Harkins
Os HarkinsOs Harkins
Os Harkins
oscon2007
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifm
oscon2007
 
Os Bunce
Os BunceOs Bunce
Os Bunce
oscon2007
 
Yuicss R7
Yuicss R7Yuicss R7
Yuicss R7
oscon2007
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Mole
oscon2007
 
Os Fogel
Os FogelOs Fogel
Os Fogel
oscon2007
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashears
oscon2007
 
Os Tucker
Os TuckerOs Tucker
Os Tucker
oscon2007
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swp
oscon2007
 
Os Furlong
Os FurlongOs Furlong
Os Furlong
oscon2007
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Myths
oscon2007
 
Os Kimsal
Os KimsalOs Kimsal
Os Kimsal
oscon2007
 
Os Pruett
Os PruettOs Pruett
Os Pruett
oscon2007
 
Os Alrubaie
Os AlrubaieOs Alrubaie
Os Alrubaie
oscon2007
 
Os Keysholistic
Os KeysholisticOs Keysholistic
Os Keysholistic
oscon2007
 
Os Jonphillips
Os JonphillipsOs Jonphillips
Os Jonphillips
oscon2007
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdated
oscon2007
 

More from oscon2007 (20)

J Ruby Whirlwind Tour
J Ruby Whirlwind TourJ Ruby Whirlwind Tour
J Ruby Whirlwind Tour
 
Solr Presentation5
Solr Presentation5Solr Presentation5
Solr Presentation5
 
Os Borger
Os BorgerOs Borger
Os Borger
 
Os Harkins
Os HarkinsOs Harkins
Os Harkins
 
Os Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman WiifmOs Fitzpatrick Sussman Wiifm
Os Fitzpatrick Sussman Wiifm
 
Os Bunce
Os BunceOs Bunce
Os Bunce
 
Yuicss R7
Yuicss R7Yuicss R7
Yuicss R7
 
Performance Whack A Mole
Performance Whack A MolePerformance Whack A Mole
Performance Whack A Mole
 
Os Fogel
Os FogelOs Fogel
Os Fogel
 
Os Lanphier Brashears
Os Lanphier BrashearsOs Lanphier Brashears
Os Lanphier Brashears
 
Os Tucker
Os TuckerOs Tucker
Os Tucker
 
Os Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman SwpOs Fitzpatrick Sussman Swp
Os Fitzpatrick Sussman Swp
 
Os Furlong
Os FurlongOs Furlong
Os Furlong
 
Os Berlin Dispelling Myths
Os Berlin Dispelling MythsOs Berlin Dispelling Myths
Os Berlin Dispelling Myths
 
Os Kimsal
Os KimsalOs Kimsal
Os Kimsal
 
Os Pruett
Os PruettOs Pruett
Os Pruett
 
Os Alrubaie
Os AlrubaieOs Alrubaie
Os Alrubaie
 
Os Keysholistic
Os KeysholisticOs Keysholistic
Os Keysholistic
 
Os Jonphillips
Os JonphillipsOs Jonphillips
Os Jonphillips
 
Os Urnerupdated
Os UrnerupdatedOs Urnerupdated
Os Urnerupdated
 

Recently uploaded

Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
Enterprise Knowledge
 
Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024
siddu769252
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
alexjohnson7307
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
DianaGray10
 
Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
isBullShit
 
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
bellared2
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
Priyanka Aash
 
Tailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer InsightsTailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer Insights
SynapseIndia
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Nicolás Lopéz
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
Razin Mustafiz
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
FIDO Alliance
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
Zilliz
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
Bhajan Mehta
 
What's New in Teams Calling, Meetings, Devices June 2024
What's New in Teams Calling, Meetings, Devices June 2024What's New in Teams Calling, Meetings, Devices June 2024
What's New in Teams Calling, Meetings, Devices June 2024
Stephanie Beckett
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
alexjohnson7307
 
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdfLeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
SelfMade bd
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
Zilliz
 
Vulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive OverviewVulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive Overview
Steven Carlson
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
ZachWylie3
 
kk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdfkk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdf
KIRAN KV
 

Recently uploaded (20)

Improving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning ContentImproving Learning Content Efficiency with Reusable Learning Content
Improving Learning Content Efficiency with Reusable Learning Content
 
Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024Generative AI Reasoning Tech Talk - July 2024
Generative AI Reasoning Tech Talk - July 2024
 
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
leewayhertz.com-Generative AI tech stack Frameworks infrastructure models and...
 
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision MakingConnector Corner: Leveraging Snowflake Integration for Smarter Decision Making
Connector Corner: Leveraging Snowflake Integration for Smarter Decision Making
 
Accelerating Migrations = Recommendations
Accelerating Migrations = RecommendationsAccelerating Migrations = Recommendations
Accelerating Migrations = Recommendations
 
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
Russian Girls Call Navi Mumbai 🎈🔥9920725232 🔥💋🎈 Provide Best And Top Girl Ser...
 
Keynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive SecurityKeynote : AI & Future Of Offensive Security
Keynote : AI & Future Of Offensive Security
 
Tailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer InsightsTailored CRM Software Development for Enhanced Customer Insights
Tailored CRM Software Development for Enhanced Customer Insights
 
Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024Vertex AI Agent Builder - GDG Alicante - Julio 2024
Vertex AI Agent Builder - GDG Alicante - Julio 2024
 
The Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - CoatueThe Path to General-Purpose Robots - Coatue
The Path to General-Purpose Robots - Coatue
 
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
UX Webinar Series: Essentials for Adopting Passkeys as the Foundation of your...
 
It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...It's your unstructured data: How to get your GenAI app to production (and spe...
It's your unstructured data: How to get your GenAI app to production (and spe...
 
Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17Mule Experience Hub and Release Channel with Java 17
Mule Experience Hub and Release Channel with Java 17
 
What's New in Teams Calling, Meetings, Devices June 2024
What's New in Teams Calling, Meetings, Devices June 2024What's New in Teams Calling, Meetings, Devices June 2024
What's New in Teams Calling, Meetings, Devices June 2024
 
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
leewayhertz.com-AI agents for healthcare Applications benefits and implementa...
 
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdfLeadMagnet IQ Review:  Unlock the Secret to Effortless Traffic and Leads.pdf
LeadMagnet IQ Review: Unlock the Secret to Effortless Traffic and Leads.pdf
 
Retrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with RagasRetrieval Augmented Generation Evaluation with Ragas
Retrieval Augmented Generation Evaluation with Ragas
 
Vulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive OverviewVulnerability Management: A Comprehensive Overview
Vulnerability Management: A Comprehensive Overview
 
Camunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptxCamunda Chapter NY Meetup July 2024.pptx
Camunda Chapter NY Meetup July 2024.pptx
 
kk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdfkk vathada _digital transformation frameworks_2024.pdf
kk vathada _digital transformation frameworks_2024.pdf
 

Os Johnson

  • 1. Advanced Spring Framework Rod Johnson CEO Interface21 www.interface21.com
  • 2. Aims Understand the capabilities of the Spring Framework component model, and how you can use them to add new power to your POJO-based applications
  • 3. Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1: New Scaling out the Spring component model
  • 5. Much More Than an IoC Container… Core component model + Services + Patterns (Recipes) + Integration (Ecosystem) + Portability (Runs everywhere) = Universal POJO programming model Embraced by more and more enterprise vendors
  • 6. Enabling Technologies Simple Object Simple Object Dependency Injection AOP Portable Service Abstractions (PSA)
  • 7. Simple POJO public class DefaultWeatherService implements WeatherService { public String getShortSummary(String location) { ... public String getLongSummary(String location) { ... public void update(String location, WeatherData newData) } No special requirements No dependencies on Spring
  • 8. Applying Declarative Transactions <aop:config> <aop:pointcut id=&quot;businessService&quot; expression=&quot; execution(* *..*Service+.*(..)) &quot;/> <aop:advisor pointcut-ref=&quot;businessService&quot; advice-ref=&quot;txAdvice&quot;/> </aop:config> < tx:advice id=&quot;txAdvice&quot;> <tx:attributes> <tx:method name=&quot;get*&quot; read-only=&quot;true&quot;/> <tx:method name=&quot;rent*&quot;/> </tx:attributes> </tx:advice> Pointcut identifies business service methods Advice adds behavior. This advice makes business services transactional.
  • 9. Value add: Exporting a Remote Endpoint <bean name=&quot;/httpInvoker/weatherService&quot; class=&quot;o.sfw...HttpInvokerServiceExporter&quot;> <property name=&quot;service&quot; ref=&quot;weatherService&quot;/> <property name=&quot;serviceInterface&quot; value=&quot;com.mycompanyWeatherService“ /> </bean> Can add any number of server side Exporters for each Spring managed bean Don’t need to write any Java™ code
  • 10. Remote Client: POJO public class MyClient { private WeatherService ws; public void setWeatherService(WeatherService ws) { this.ws = ws; } // Business methods omitted }
  • 11. Configuring the Remote Client POJO <bean id=“weatherService&quot; class=&quot;o.sfw..HttpInvokerProxyFactoryBean&quot;> <property name=&quot;serviceUrl&quot; value=&quot;http://localhost:8080/httpInvoker/weatherService&quot; > <property name=&quot;serviceInterface&quot; value=&quot;com.mycompany.WeatherService&quot; /> </bean> <bean id=&quot;myClient&quot; class=&quot;...MyClient&quot; p:weatherService=&quot;weatherService&quot; >
  • 12. Unit Testing the Dependency Injected Client public void testForMyClient() { MyClient mc = new MyClient(); mc.setWeatherService(myMockService); // Test mc } Can simply inject proxy into client Imagine how much harder testing would be if we had coded the lookup method in the client
  • 13. Value add: Java Management Extensions (JMX™) API Export <bean id=&quot;mbeanExporter&quot; class=&quot;org.sfw…MBeanExporter&quot;> <property name=&quot;beans&quot;> <map> <entry key=&quot;i21:service=weatherService&quot;> <ref local=“ weatherService &quot;/> </entry> <!-- other objects to be exported here --> </map> </property> </bean> Can expose any bean as a JMX API MBean without writing JMX API code
  • 14. Extension Point: Auditing Aspect Spring container can weave any managed POJO with aspects This aspect monitors access to the methods that ask for weather summary strings Single code module addresses single requirement (auditing) Type safe with argument binding @Aspect public class WeatherMonitorAuditAspect { @After(&quot;execution(String *.WeatherService.*(String)) && args(location) && this(ws)&quot;) public void onQuery( String location WeatherService ws) { // Location and WeatherService are bound // to the aspect } } Pointcut identifies the methods that should be affected Advice method contains code to execute
  • 15. Applying the Aspect Ensure an <aop:aspectj-autoproxy/> tag is used to turn on automatic application of any @AspectJ aspects found in the context Simply define the aspect as a Spring bean <bean class=“…WeatherMonitorAuditAspect” />
  • 16. User Extension Points The Spring IoC container provides many extension points Can easily modify the behavior of the container to do custom annotation processing, specific callbacks, validation etc. or even to wrap managed objects in proxies For example: FactoryBean —object configured by the container that creates a component, introducing a level of indirection BeanPostProcessor —called on every bean instantiation BeanFactoryPostProcessor —can modify container metadata BeanDefinition —provides ability to add custom metadata for processing by post processors
  • 17. User Extension Point Example Example: Introducing a LogAware interface Components implementing this are given a log instance The AccountService bean needs a Log : public class AccountService implements LogAware { private Log log; public void setLog(Log log) { this.log = log; } // Business methods omitted... }
  • 18. User Extension Point Example (Cont.) public class LogInjectingBeanPostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitialization( Object bean, String beanName) throws BeansException { if (bean instanceof LogAware) { injectLog((LogAware) bean); } return bean; } public Object postProcessAfterInitialization( Object bean, String beanName) throws BeansException { return bean; } } Called as every bean is initialized Return value can be any object that is type compatible with the bean being processed
  • 19. Activating a BeanPostProcessor Like most Spring IoC extension points, simply define as a bean Automatically gets applied to all other beans Customizes the behavior of the container <bean id=“com.mycompany.LogInjectingPostProcessor” />
  • 20. Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Dynamic language support Scaling out the Spring component model
  • 21. XML Configuration Extensions in Spring 2.0: Important New Extension Point A bean definition is a recipe for creating one object Spring 2.0 added the ability to define new XML tags to produce zero or more Spring bean definitions Important new extension point, offering: Higher level of abstraction can simplify many tasks Enables group beans that need to work together into a single configuration unit Can allow existing XML configuration formats to be used to build Spring configuration
  • 22. How Are XML Configuration Extensions Used? Tags out of the box for common configuration tasks Many third party products integrating with Spring Including Java API for XML Web Services (JAX-WS) Reference Implementation User Extensions: Problem-specific configuration Makes it easier to develop and maintain applications Allow XML schema validation Better out of the box tool support Code completion for free Exploit the full power of XML Namespaces, schema, tooling
  • 23. XML Configuration in Spring 2.0 <bean id=&quot;dataSource&quot; class=&quot;...JndiObjectFactoryBean&quot;> <property name=&quot;jndiName&quot; value=&quot;jdbc/StockData&quot;/> </bean> <jee:jndi-lookup id=&quot;dataSource&quot; jndiName=&quot;jdbc/StockData&quot;/>
  • 24. XML Configuration in Spring 2.0 <bean id=&quot;properties&quot; class=&quot;...PropertiesFactoryBean&quot;> <property name=&quot;location&quot; value=&quot;jdbc.properties&quot;/> </bean> <util:properties id=&quot;properties&quot; location=&quot;jdbc.properties&quot;/>
  • 25. Transaction Simplification Specialized tags for making objects transactional Benefit from code assist <tx:annotation-driven /> Code assist for transaction attributes
  • 26. Annotation Driven Transactions @Transactional(readOnly=true) interface TestService { @Transactional(readOnly=false, rollbackFor=DuplicateOrderIdException.class) void createOrder(Order order) throws DuplicateOrderIdException; List queryByCriteria(Order criteria); }
  • 27. Annotation Driven Transactions <bean class=&quot;org.springframework...DefaultAdvisorAutoProxyCreator&quot;/> <bean class=&quot;org.sfw...TransactionAttributeSourceAdvisor&quot;> <property name=&quot;transactionInterceptor ref=&quot;transactionInterceptor&quot;/> </bean> <bean id=&quot;transactionInterceptor&quot; class=&quot;org.springframework...TransactionInterceptor&quot;> <property name=&quot;transactionManager&quot; ref=&quot;transactionManager&quot;/> <property name=&quot;transactionAttributeSource&quot;> <bean class=&quot;org.sfw...AnnotationsTransactionAttributeSource&quot;> </bean> </property> </bean> <tx:annotation-driven/>
  • 28. Out-of-the-Box Namespaces AOP JMX API Remoting Scheduling MVC Suggestions and contributions welcome A rich library will build over time
  • 29. Authoring Custom Extensions: Step 1 Write an XSD to define element content Allows sophisticated validation, well beyond DTD Amenable to tool support during development Author with XML tools XML Spy
  • 30. Authoring Custom Extensions: Step 2 Implement a NamespaceHandler to generate Spring BeanDefinitions from element content Helper classes such as BeanDefinitionBuilder to make this easy public interface NamespaceHandler { void init(); BeanDefinition parse(Element element, ParserContext parserContext); BeanDefinitionHolder decorate(Node source, BeanDefinitionHolder definition, ParserContext parserContext); }
  • 31. Authoring Custom Extensions: Step 3 Add a mapping in a META-INF/spring.handlers file http//www.springframework.org/schema/util=org.springframework.beans.factory.xml.UtilNamespaceHandler http//www.springframework.org/schema/aop=org.springframework.aop.config.AopNamespaceHandler http//www.springframework.org/schema/jndi=org.springframework.jndi.config.JndiNamespaceHandler http//www.springframework.org/schema/tx=org.springframework.transaction.config.TxNamespaceHandler http//www.springframework.org/schema/mvc=org.springframework.web.servlet.config.MvcNamespaceHandler
  • 32. Using Custom Extensions Import relevant XSD Use the new elements <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot;http://www.springframework.org/schema/beans&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot; xmlns:aop=&quot;http://www.springframework.org/schema/aop&quot; xsi:schemaLocation=&quot;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd&quot;>
  • 33. Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1 Scaling out the Spring component model
  • 34. What's New in Spring 2.1? Spring 2.1 Allows use of annotations for configuration, as well as XML Can mix and match annotations and XML JCA 1.5 support Further enhancements in JPA support Aims: Make Spring still easier to use
  • 35. Java code: Annotations autoscanned @Component public class FooServiceImpl implements FooService { @Autowired private FooDao fooDao; public String foo(int id) { return fooDao.findFoo(id); } } @Aspect public class ServiceInvocationCounter { private int useCount; @Pointcut(&quot;execution(* demo.FooService+.*(..))&quot;) public void serviceExecution() {} @Before(&quot;serviceExecution()&quot;) public void countUse() { this.useCount++; } public int getCount() { return this.useCount; } }
  • 36. Bootstrap configuration <?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?> <beans xmlns=&quot; http://www.springframework.org/schema/beans &quot; xmlns:xsi=&quot; http://www.w3.org/2001/XMLSchema-instance &quot; xmlns:context=&quot; http://www.springframework.org/schema/context &quot; xsi:schemaLocation=&quot; http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.1.xsd &quot;> <context:annotation-scan base-package=&quot;demo&quot;/> <bean id=&quot;fooDaoImpl&quot; class=&quot;demo.FooDaoImpl&quot; p:dataSource=&quot;dataSource&quot; /> <bean id=&quot;dataSource&quot; class=&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot; p:driverClassName=&quot;org.hsqldb.jdbcDriver&quot; p:url=“jdbc:hsqldb:mem:hsql:foo&quot; p:username=&quot;sa&quot; /> </beans>
  • 37. One component model Contributions from different sources of configuration XML Java code Internal Java metadata not coupled to configuration format
  • 38. Agenda Spring component model fundamentals Value adds out of the box User extension points Spring 2.0 configuration extensions Spring 2.1 Scaling out the Spring component model
  • 39. Scaling Out Spring Spring can consume objects written in dynamic languages It can also make it easier to scale out applications by deploying and exposing POJOs in new models Examples Other deployment models such as grid SOA with SCA and ESBs OSGi dynamic modularization
  • 40. Scaling POJOs Out to Grid Deployment Spring enables applications to be implemented in POJOs Avoids assumptions about environment in application code Environment changes over time Ignorance is bliss: What your objects don’t know can’t break them if it changes Hence deployment model can change without breaking code Servlet Application Server Standalone client Grid distribution technology…
  • 41. SCA (Service Component Architecture): A Standard for SOA Assembly model Service components, references, wires Policy framework QoS etc. Service implementation and client API Spring Java API C++ BPEL EJB™ architecture Bindings Web Services, Java Message Service (JMS), Java Cryptography Architecture (JCA)
  • 42. The Open SOA Collaboration BEA IBM Oracle SAP Sun Interface21 Red Hat Cape Clear Software IONA Primeton Technologies Sybase Siemens Software AG TIBCO Rogue Wave Software
  • 43. Any Spring Application Is “SCA-ready”… SCA System SCA Component A SCA Component B Spring App Context Bean A Bean B Spring App Context Bean X Bean Y Bean A exposed as service External reference
  • 45. o p e n s r v i c e s t a g w a y a t i v e t i n i 1 1 2 3
  • 46. OSG i The Dynamic Module System for Java technology njection
  • 47. OSGi: A Module System… Partition a system into modules “ Bundles” Strict visibility rules Resolution process Satisfies dependencies of a module Understands versioning!
  • 48. … and It’s Dynamic! Modules can be Installed Started Stopped Uninstalled Updated … at runtime!
  • 49. Spring and OSGi: Complementary Technologies Both are the best at what they do Injection/AOP component model Dynamic runtime infrastructure Both run everywhere Little overlap Natural to combine dynamic power of OSGi with ease of use of Spring component model Spring/OSGi integration likely to make its way into OSGi specifications
  • 50. Spring OSGi—Project Goals Use Spring container to configure modules (bundles) Make it easy to publish and consume services Across a number of bundles Enable applications to be coded without dependency on OSGi APIs Easy unit and integration testing Provide the needed bundles and infrastructure to deploy OSGi-based applications to application servers
  • 51. Project Collaborators Led by Interface21 Committers from BEA and Oracle also active on the project Input to the specification and direction from OSGi Alliance (technical director and CTO) BEA, Oracle, IBM Eclipse Equinox Felix and many individuals
  • 52. OSGi Packaging for Spring Spring modules packaged as OSGi bundles Spring-core Spring-beans Spring-aop Etc. All the necessary import and export package headers defined Enables an OSGi application to import and use Spring packages and services Currently done in Spring-OSGi project Spring module jars will come this way “out of the box” in Spring 2.1
  • 53. Spring Makes It Easy! Exporting a service: <osgi:service id=&quot;simpleServiceOsgi&quot; ref=&quot;simpleService&quot; interface= &quot;org.sfw.osgi.samples.ss.MyService&quot;/> Importing a service: <osgi:reference id=&quot;aService&quot; interface= &quot;org.sfw.osgi.samples.ss.MyService&quot;/>
  • 54. Visibility Each bundle is a segregated class space MVC MVC MVC S S R R D Lib Lib Lib
  • 56. Versioning MVC MVC’ S R Two versions of the same service types… at the same time! S’
  • 57. The Spring Portfolio Spring Framework Spring WebFlow Spring Web Services Spring Security Spring Rich Client Spring LDAP Spring IDE Spring OSGi Spring Modules Spring.NET Takes familiar Spring concepts to a wide range of areas Consistent themes of Simplicity and Power
  • 58. Summary Spring provides a highly extensible component model POJOs used as “Spring beans” in a Spring application benefit from many potential services for free Many value adds out of the box Many extension points for users The Spring component model is ready for the challenges of tomorrow. Build out directions include: Dynamic language support SCA OSGi
  • 59. Q&A