SlideShare a Scribd company logo
BACK-PORTING DSPACE 2.0:
            DSPACE SERVICES




Mark Diggory   DSUG 2009
Conflicts in DSpace.
Developers vs. Developers?
But is it Their Fault?




Pioneer Argonne computer scientist Jean F. Hall.
But is it Their Fault?
                                                   No, Developers:




Pioneer Argonne computer scientist Jean F. Hall.
But is it Their Fault?
                                                   No, Developers:
                                                   Need to Innovate




Pioneer Argonne computer scientist Jean F. Hall.
But is it Their Fault?
                                                   No, Developers:
                                                   Need to Innovate
                                                   Need to change code




Pioneer Argonne computer scientist Jean F. Hall.
But is it Their Fault?
                                                   No, Developers:
                                                   Need to Innovate
                                                   Need to change code
                                                   Need to solve immediate
                                                   issues formost.



Pioneer Argonne computer scientist Jean F. Hall.
Static code is not extensible...

    public class StaticManager {
    
    
 public static Object getSomething(Object object) {
    
 
          SomeOtherManager.doSomethingElse(...);

    
 }
    }
Consider Anti-Patterns
Consider Anti-Patterns
  Hardcoding:
  
  Configuration is hardcoded into static “Managers”
  
  Database CRUD is hardcoded into DpaceObjects.”
Consider Anti-Patterns
  Hardcoding:
  
  Configuration is hardcoded into static “Managers”
  
  Database CRUD is hardcoded into DpaceObjects.”

  God Object:
  
  ConfigurationManager, Context, DSpaceObject
  
  Concentrate too much functionality in a class
Consider Anti-Patterns
  Hardcoding:
  
  Configuration is hardcoded into static “Managers”
  
  Database CRUD is hardcoded into DpaceObjects.”

  God Object:
  
  ConfigurationManager, Context, DSpaceObject
  
  Concentrate too much functionality in a class

  JAR Hell:
  
  Users resort to classpath ordering to overload core API.
  
  User override classes directly to change behavior.
Importance to @mire?
Importance to @mire?

 Many clients with similar need for
 customization.
Importance to @mire?

 Many clients with similar need for
 customization.
 All Products dependent on DSpace.
Importance to @mire?

 Many clients with similar need for
 customization.
 All Products dependent on DSpace.
 We have to guaruntee upgrade path.
Importance to @mire?

 Many clients with similar need for
 customization.
 All Products dependent on DSpace.
 We have to guaruntee upgrade path.
 Need stability and modularity in DSpace.
Modularity




http://google-guice.googlecode.com/files/Guice-Google-IO-2009.pdf
Modularity




http://google-guice.googlecode.com/files/Guice-Google-IO-2009.pdf
Modularity




http://google-guice.googlecode.com/files/Guice-Google-IO-2009.pdf
Services: Can Help
Services: Can Help
 Removes Hardcode:
 Data Models are anemic, Services implemented
 separate from interfaces used by applications.
Services: Can Help
 Removes Hardcode:
 Data Models are anemic, Services implemented
 separate from interfaces used by applications.
 Lessens JAR Hell:
 API contracts, default implementations off limits.
 Want to change behavior, write changes separately.
Services: Can Help
 Removes Hardcode:
 Data Models are anemic, Services implemented
 separate from interfaces used by applications.
 Lessens JAR Hell:
 API contracts, default implementations off limits.
 Want to change behavior, write changes separately.
 Removes God Objects:
 Services separate functional areas, separate Data
 Models without interdependency assure separation.
Services: Architecture:
     services-util   services-api   services-impl
Services: Architecture:
     services-util      services-api               services-impl


                                                      DSpaceKernel-
                                                  ServletContextListener




     DSpaceWebapp-
                      DSpaceKernelManager           DSpaceKernelInit
      ServletFilter




                                            JMX
                         <<Interface>>
                                                    DSpaceKernelImpl
                         DSpaceKernel
Services: Architecture:
     services-util      services-api               services-impl


                                                      DSpaceKernel-
                                                  ServletContextListener




     DSpaceWebapp-
                      DSpaceKernelManager           DSpaceKernelInit
      ServletFilter




                                            JMX
                         <<Interface>>
                                                    DSpaceKernelImpl
                         DSpaceKernel



                                                                           Guice
                         <<Interface>>
        DSpace
                        ServiceManager
                                                  DSpaceServiceManager
                                                                           Spring
                                                                           OSGi
                          <<Interface>>
                                                    EventServiceImpl
                          EventService
Services: Architecture:
     services-util   services-api     services-impl




                      <<Interface>>
        DSpace
                     ServiceManager




                      <<Interface>>
                      EventService
Services: Architecture:
             services-util   services-api     services-impl



/* Instantiate the Utility Class */
DSpace dspace = new DSpace();


/* Access get the Service Manager by convenience method */
ServiceManager manager = dspace.getServiceManager();


/* Or access by convenience method for default services */
EventService service = dspace.getEventService();
                              <<Interface>>
                DSpace
                             ServiceManager




                              <<Interface>>
                              EventService
Services: Default Services
                  services-util

                        DSpace


                   services-api
                     <<Interface>>
                    ServiceManager


                     <<Interface>>
                     EventService


                     <<Interface>>
                  ConfigurationService


                     <<Interface>>
                    RequestService


                     <<Interface>>
                    SessionService
Services: Default Services
                                             services-util

                                                   DSpace
 DSpace dspace = new DSpace();
                                              services-api
 EventService es = dspace.getEventService();
                                         <<Interface>>
                                        ServiceManager


 ConfigurationService cs = dspace.getConfigurationService();
                                         <<Interface>>
                                                EventService


 RequestService rs = dspace.getRequestService();
                                         <<Interface>>
                                             ConfigurationService

 SessionService ss = dspace.getSessionService();
                                         <<Interface>>
                                               RequestService


                                                <<Interface>>
                                               SessionService
Services: Default Services
          dspace-xmlui-webapp                      services-util
        Spring Application Context
                                                         DSpace


                                                    services-api
                             registerService          <<Interface>>
       Your Own Services
                                                     ServiceManager


        Your Own Event     registerEventListener      <<Interface>>
           Listeners                                  EventService

                            addConfiguration
                                                      <<Interface>>
       Your Own Configs
                                                   ConfigurationService

                              addInterceptor
       Your Own Request                               <<Interface>>
          Interceptors                               RequestService


                                                      <<Interface>>
                                                     SessionService
Spring:
Web Application Context
Spring:
Registering Event Listeners
<?xml version="1.0" encoding="UTF-8"?>
<beans>

  <bean id="dspace" class="org.dspace.utils.DSpace"/>

  <bean id="dspace.eventService" factory-bean="dspace"
     factory-method="getEventService"/>

  <bean class="org.my.EventListener">
      <property name="eventService" >
     

 <ref bean="dspace.eventService"/>
     
</property>
  </bean>
Spring:
Java Analogy
  DSpace dspace = new DSpace();

  EventService service = dspace.getEventService();

  MyEventListener listener = new MyEventListener();

  service.registerEventListener(listener);
DSpace 1.6 Statistics
   Our first example of service usage
                         DSpace XMLUI Webapp
          Cocoon
           UsageEvent               EventService               SolrUsage
          LoggingActor                                        EventListener
                                                                                     SolrLogger        DSpace
                                                                                                        Solr
                                                                                                       Webapp

                         fireEvent                  receiveEvent               post              HTTP
                                                                                                        Solr

 HTTP                                                          LogUsage
Request                                                       EventListener


                                                   receiveEvent                      Writes to log     dspace
                                                                                                        .log
Services: Firing Events

        DSpace dspace = new DSpace();

        Event event = new UsageEvent(
   	   	 	 	 UsageEvent.Action.VIEW,
   	   	 	 	 request,
   	   	 	 	 context,
   	   	 	 	 object);

        dspace.getEventService().fireEvent(event);
Proposed Next Steps:
Integrate remaining Services
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
  UserService: Auth and Permissions
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
  UserService: Auth and Permissions
  StorageService: ContentStorage
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
  UserService: Auth and Permissions
  StorageService: ContentStorage
  MetaRegistryService: Content Models,
  Metadata Schema, DCMI Application Profiles.
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
  UserService: Auth and Permissions
  StorageService: ContentStorage
  MetaRegistryService: Content Models,
  Metadata Schema, DCMI Application Profiles.
  SearchService: Unified search and browse
Proposed Next Steps:
Integrate remaining Services
  DSpaceDataSource: DB Connection Pool
  UserService: Auth and Permissions
  StorageService: ContentStorage
  MetaRegistryService: Content Models,
  Metadata Schema, DCMI Application Profiles.
  SearchService: Unified search and browse
  MappingService: External Identifier Mapping to
  DSpace objects.
Proposed Next Steps:
Replacement of Legacy Managers
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService

ConfigurationManager <-------------- ConfigurationService
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService

ConfigurationManager <-------------- ConfigurationService

DatabaseManager <---------- DSpaceDataSource Service
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService

ConfigurationManager <-------------- ConfigurationService

DatabaseManager <---------- DSpaceDataSource Service

EPerson/ResourceBundle <-------------------- UserService
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService

ConfigurationManager <-------------- ConfigurationService

DatabaseManager <---------- DSpaceDataSource Service

EPerson/ResourceBundle <-------------------- UserService

DSO and BitstreamStorage <------------- StorageService
Proposed Next Steps:
Replacement of Legacy Managers
EventManager <-------------------------------- EventService

ConfigurationManager <-------------- ConfigurationService

DatabaseManager <---------- DSpaceDataSource Service

EPerson/ResourceBundle <-------------------- UserService

DSO and BitstreamStorage <------------- StorageService

Search and Configurable Browse <--------- SearchSevice
Proposed Next Steps:
Remove God Objects
    DSpace
    Database
    Manager


    Database
      Pool




              Context

         DB
   cac


          ID
    he




  Authentication
    Manager
Proposed Next Steps:
Remove God Objects
    DSpace
    Database
    Manager


    Database            Context is composite object
      Pool




              Context

         DB
   cac


          ID
    he




  Authentication
    Manager
Proposed Next Steps:
Remove God Objects
    DSpace
    Database
    Manager


    Database            Context is composite object
      Pool


                        Gets passed around everywhere
              Context

         DB
   cac


          ID
    he




  Authentication
    Manager
Proposed Next Steps:
Remove God Objects
    DSpace
    Database
    Manager


    Database            Context is composite object
      Pool


                        Gets passed around everywhere
              Context
                        Represents:
         DB
   cac


          ID
    he




  Authentication
    Manager
Proposed Next Steps:
Remove God Objects
    DSpace
    Database
    Manager


    Database            Context is composite object
      Pool


                        Gets passed around everywhere
              Context
                        Represents:
         DB
   cac




                          State, Identity, Transaction
          ID
    he




  Authentication
    Manager
Proposed Next Steps:
Kernel as “Context Container”
     DSpace Kernel       Service
                         Manager

                        Session
              Session
                        Service

              Request
                        Request
                        Service

               Your     Cache
               Code     Service

                         User
                        Service

                         Data
                        Source
                        Service
Proposed Next Steps:
Liberate the Implementation
Proposed Next Steps:
Liberate the Implementation
 Remove Static Accessors allowing for proper API
 contracts and usage of Extensibility.
Proposed Next Steps:
Liberate the Implementation
 Remove Static Accessors allowing for proper API
 contracts and usage of Extensibility.
 Decouple Initialization of “StaticManagers” as
 Services into either core Spring, Guice or Application
 startup.
Proposed Next Steps:
Liberate the Implementation
 Remove Static Accessors allowing for proper API
 contracts and usage of Extensibility.
 Decouple Initialization of “StaticManagers” as
 Services into either core Spring, Guice or Application
 startup.
 Enforce contracts and backward compatability
 as a community practice to assure reliable API +
 Services.
In Summary
In Summary
DSpace 2.0 is successful project to date.
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
Work is incremental, projects need to be tractable.
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
Work is incremental, projects need to be tractable.
Work needs to be kept close to the trunk
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
Work is incremental, projects need to be tractable.
Work needs to be kept close to the trunk
DSpace Services are here as the first step.
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
Work is incremental, projects need to be tractable.
Work needs to be kept close to the trunk
DSpace Services are here as the first step.
Faster when we all collaborate in migration activities.
In Summary
DSpace 2.0 is successful project to date.
Yet, will take multiple releases to integrate.
Work is incremental, projects need to be tractable.
Work needs to be kept close to the trunk
DSpace Services are here as the first step.
Faster when we all collaborate in migration activities.
Could always use a little more “$upport”
Special Thanks:

Ben Bosman       Graham Triggs
Art Lowel        Kevin Van de velde
Bradley McLean   Aaron Zeckoski
Supporting Organizations:




           Mark Diggory
          mdiggory@atmire.com
BACK-PORTING DSPACE 2.0:
            DSPACE SERVICES




Mark Diggory   DSUG 2009

More Related Content

What's hot

Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
ellentuck
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking Tour
Joshua Long
 
JUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
JUDCon London 2011 - Elastic SOA on the Cloud, Steve MillidgeJUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
JUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
C2B2 Consulting
 
DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your Team
GR8Conf
 
OSB POSTER
OSB POSTEROSB POSTER
OSB POSTER
Vijay Reddy
 
What's new in the OSGi 4.2 Enterprise Release
What's new in the OSGi 4.2 Enterprise ReleaseWhat's new in the OSGi 4.2 Enterprise Release
What's new in the OSGi 4.2 Enterprise Release
David Bosschaert
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akka
nartamonov
 
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
Ryo Yamasaki
 
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
Walter Heck
 
AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7
Kevin Sutter
 

What's hot (10)

Jasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-casJasigsakai12 columbia-customizes-cas
Jasigsakai12 columbia-customizes-cas
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking Tour
 
JUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
JUDCon London 2011 - Elastic SOA on the Cloud, Steve MillidgeJUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
JUDCon London 2011 - Elastic SOA on the Cloud, Steve Millidge
 
DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your Team
 
OSB POSTER
OSB POSTEROSB POSTER
OSB POSTER
 
What's new in the OSGi 4.2 Enterprise Release
What's new in the OSGi 4.2 Enterprise ReleaseWhat's new in the OSGi 4.2 Enterprise Release
What's new in the OSGi 4.2 Enterprise Release
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akka
 
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
appengine ja night #24 Google Cloud Endpoints and BigQuery (English)
 
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment  at OnAppPuppetCamp SEA 1 - Puppet Deployment  at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
 
AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7AAI 1713-Introduction to Java EE 7
AAI 1713-Introduction to Java EE 7
 

Viewers also liked

Introducción a DSpace - Universidad Nacional del Altiplano, Puno
Introducción a DSpace - Universidad Nacional del Altiplano, PunoIntroducción a DSpace - Universidad Nacional del Altiplano, Puno
Introducción a DSpace - Universidad Nacional del Altiplano, Puno
Elwin Huaman
 
REPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITALREPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITAL
Alessandra Venegas
 
Proquest y Dspace
Proquest y DspaceProquest y Dspace
Proquest y Dspace
L1arizala
 
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro VigoDifusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
LolaPereira
 
DSpace
DSpaceDSpace
DSpace
ug-dipa
 
Qué son los repositorios
Qué son los repositoriosQué son los repositorios
Qué son los repositorios
Ernest Abadal
 
Repositorios de recursos
Repositorios de recursosRepositorios de recursos
Repositorios de recursos
feditic
 
5. El proyecto y la difusión de la investigación
5.  El proyecto y la difusión de la investigación5.  El proyecto y la difusión de la investigación
5. El proyecto y la difusión de la investigación
Juan José Mendoza Castillo
 
Repositorio Digital
Repositorio DigitalRepositorio Digital
Repositorio Digital
Libio Huaroto
 
Repositorios: definición, características y ejemplos
Repositorios: definición, características y ejemplosRepositorios: definición, características y ejemplos
Repositorios: definición, características y ejemplos
Julio Cabrejos
 

Viewers also liked (10)

Introducción a DSpace - Universidad Nacional del Altiplano, Puno
Introducción a DSpace - Universidad Nacional del Altiplano, PunoIntroducción a DSpace - Universidad Nacional del Altiplano, Puno
Introducción a DSpace - Universidad Nacional del Altiplano, Puno
 
REPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITALREPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITAL
 
Proquest y Dspace
Proquest y DspaceProquest y Dspace
Proquest y Dspace
 
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro VigoDifusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
Difusion Del Conocimiento Nuevos Tiempos Nuevas Perspectivas Foro Vigo
 
DSpace
DSpaceDSpace
DSpace
 
Qué son los repositorios
Qué son los repositoriosQué son los repositorios
Qué son los repositorios
 
Repositorios de recursos
Repositorios de recursosRepositorios de recursos
Repositorios de recursos
 
5. El proyecto y la difusión de la investigación
5.  El proyecto y la difusión de la investigación5.  El proyecto y la difusión de la investigación
5. El proyecto y la difusión de la investigación
 
Repositorio Digital
Repositorio DigitalRepositorio Digital
Repositorio Digital
 
Repositorios: definición, características y ejemplos
Repositorios: definición, características y ejemplosRepositorios: definición, características y ejemplos
Repositorios: definición, características y ejemplos
 

Similar to DDSUG 2009 Back-porting DSpace 2.0 Services to DSpace 1.6.0

Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNextMicrosoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Rodolfo Finochietti
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
Daniel Spector
 
Running High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclioRunning High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclio
iguazio
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhone
Heiko Behrens
 
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
Amazon Web Services
 
LFS309-High-Throughput Genomics on AWS.pdf
LFS309-High-Throughput Genomics on AWS.pdfLFS309-High-Throughput Genomics on AWS.pdf
LFS309-High-Throughput Genomics on AWS.pdf
Amazon Web Services
 
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
DevOpsDays Tel Aviv
 
Sufan presentation
Sufan presentationSufan presentation
Sufan presentation
Sufanhk
 
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptxTrack 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Amazon Web Services
 
Advanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAdvanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step Functions
Amazon Web Services
 
AWS April Webinar Series - Getting Started with Amazon EC2 Container Service
AWS April Webinar Series - Getting Started with Amazon EC2 Container ServiceAWS April Webinar Series - Getting Started with Amazon EC2 Container Service
AWS April Webinar Series - Getting Started with Amazon EC2 Container Service
Amazon Web Services
 
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
Docker, Inc.
 
Advanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAdvanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step Functions
Amazon Web Services
 
Serverless Development Deep Dive
Serverless Development Deep DiveServerless Development Deep Dive
Serverless Development Deep Dive
Amazon Web Services
 
Decompose the monolith into AWS Step Functions
Decompose the monolith into AWS Step FunctionsDecompose the monolith into AWS Step Functions
Decompose the monolith into AWS Step Functions
beSharp
 
The Joy Of Ruby
The Joy Of RubyThe Joy Of Ruby
The Joy Of Ruby
Clinton Dreisbach
 
Acme Packet Provisioning Framework
Acme Packet Provisioning FrameworkAcme Packet Provisioning Framework
Acme Packet Provisioning Framework
Mislav Petričević
 
Serverless Developer Experience I AWS Dev Day 2018
Serverless Developer Experience I AWS Dev Day 2018Serverless Developer Experience I AWS Dev Day 2018
Serverless Developer Experience I AWS Dev Day 2018
AWS Germany
 
locize tech talk
locize tech talklocize tech talk
locize tech talk
Adriano Raiano
 
PeopleSoft: HACK THE Planet^W university
PeopleSoft: HACK THE  Planet^W universityPeopleSoft: HACK THE  Planet^W university
PeopleSoft: HACK THE Planet^W university
Dmitry Iudin
 

Similar to DDSUG 2009 Back-porting DSpace 2.0 Services to DSpace 1.6.0 (20)

Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNextMicrosoft 2014 Dev Plataform -  Roslyn -& ASP.NET vNext
Microsoft 2014 Dev Plataform - Roslyn -& ASP.NET vNext
 
Crossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end FrameworkCrossing the Bridge: Connecting Rails and your Front-end Framework
Crossing the Bridge: Connecting Rails and your Front-end Framework
 
Running High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclioRunning High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclio
 
iPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhoneiPhonical and model-driven software development for the iPhone
iPhonical and model-driven software development for the iPhone
 
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
High-Throughput Genomics on AWS - LFS309 - re:Invent 2017
 
LFS309-High-Throughput Genomics on AWS.pdf
LFS309-High-Throughput Genomics on AWS.pdfLFS309-High-Throughput Genomics on AWS.pdf
LFS309-High-Throughput Genomics on AWS.pdf
 
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
Deploy and Destroy: Testing Environments - Michael Arenzon - DevOpsDays Tel A...
 
Sufan presentation
Sufan presentationSufan presentation
Sufan presentation
 
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptxTrack 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
Track 4 Session 2_MAD03 容器技術和 AWS Lambda 讓您專注「應用優先」.pptx
 
Advanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAdvanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step Functions
 
AWS April Webinar Series - Getting Started with Amazon EC2 Container Service
AWS April Webinar Series - Getting Started with Amazon EC2 Container ServiceAWS April Webinar Series - Getting Started with Amazon EC2 Container Service
AWS April Webinar Series - Getting Started with Amazon EC2 Container Service
 
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
Building Web Scale Apps with Docker and Mesos by Alex Rukletsov (Mesosphere)
 
Advanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAdvanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step Functions
 
Serverless Development Deep Dive
Serverless Development Deep DiveServerless Development Deep Dive
Serverless Development Deep Dive
 
Decompose the monolith into AWS Step Functions
Decompose the monolith into AWS Step FunctionsDecompose the monolith into AWS Step Functions
Decompose the monolith into AWS Step Functions
 
The Joy Of Ruby
The Joy Of RubyThe Joy Of Ruby
The Joy Of Ruby
 
Acme Packet Provisioning Framework
Acme Packet Provisioning FrameworkAcme Packet Provisioning Framework
Acme Packet Provisioning Framework
 
Serverless Developer Experience I AWS Dev Day 2018
Serverless Developer Experience I AWS Dev Day 2018Serverless Developer Experience I AWS Dev Day 2018
Serverless Developer Experience I AWS Dev Day 2018
 
locize tech talk
locize tech talklocize tech talk
locize tech talk
 
PeopleSoft: HACK THE Planet^W university
PeopleSoft: HACK THE  Planet^W universityPeopleSoft: HACK THE  Planet^W university
PeopleSoft: HACK THE Planet^W university
 

Recently uploaded

Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
Tosin Akinosho
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
saastr
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
alexjohnson7307
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
Hiike
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
Chart Kalyan
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
Intelisync
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
Postman
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
Tatiana Kojar
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Jeffrey Haguewood
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
Jakub Marek
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
MichaelKnudsen27
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Tatiana Kojar
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
LucaBarbaro3
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 

Recently uploaded (20)

Monitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdfMonitoring and Managing Anomaly Detection on OpenShift.pdf
Monitoring and Managing Anomaly Detection on OpenShift.pdf
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
Deep Dive: AI-Powered Marketing to Get More Leads and Customers with HyperGro...
 
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - HiikeSystem Design Case Study: Building a Scalable E-Commerce Platform - Hiike
System Design Case Study: Building a Scalable E-Commerce Platform - Hiike
 
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfHow to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdf
 
A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024A Comprehensive Guide to DeFi Development Services in 2024
A Comprehensive Guide to DeFi Development Services in 2024
 
WeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation TechniquesWeTestAthens: Postman's AI & Automation Techniques
WeTestAthens: Postman's AI & Automation Techniques
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Skybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoptionSkybuffer SAM4U tool for SAP license adoption
Skybuffer SAM4U tool for SAP license adoption
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
Letter and Document Automation for Bonterra Impact Management (fka Social Sol...
 
Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)Main news related to the CCS TSI 2023 (2023/1695)
Main news related to the CCS TSI 2023 (2023/1695)
 
Nordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptxNordic Marketo Engage User Group_June 13_ 2024.pptx
Nordic Marketo Engage User Group_June 13_ 2024.pptx
 
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
Skybuffer AI: Advanced Conversational and Generative AI Solution on SAP Busin...
 
Trusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process MiningTrusted Execution Environment for Decentralized Process Mining
Trusted Execution Environment for Decentralized Process Mining
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 

DDSUG 2009 Back-porting DSpace 2.0 Services to DSpace 1.6.0

  • 1. BACK-PORTING DSPACE 2.0: DSPACE SERVICES Mark Diggory DSUG 2009
  • 3. But is it Their Fault? Pioneer Argonne computer scientist Jean F. Hall.
  • 4. But is it Their Fault? No, Developers: Pioneer Argonne computer scientist Jean F. Hall.
  • 5. But is it Their Fault? No, Developers: Need to Innovate Pioneer Argonne computer scientist Jean F. Hall.
  • 6. But is it Their Fault? No, Developers: Need to Innovate Need to change code Pioneer Argonne computer scientist Jean F. Hall.
  • 7. But is it Their Fault? No, Developers: Need to Innovate Need to change code Need to solve immediate issues formost. Pioneer Argonne computer scientist Jean F. Hall.
  • 8. Static code is not extensible... public class StaticManager { public static Object getSomething(Object object) { SomeOtherManager.doSomethingElse(...); } }
  • 10. Consider Anti-Patterns Hardcoding: Configuration is hardcoded into static “Managers” Database CRUD is hardcoded into DpaceObjects.”
  • 11. Consider Anti-Patterns Hardcoding: Configuration is hardcoded into static “Managers” Database CRUD is hardcoded into DpaceObjects.” God Object: ConfigurationManager, Context, DSpaceObject Concentrate too much functionality in a class
  • 12. Consider Anti-Patterns Hardcoding: Configuration is hardcoded into static “Managers” Database CRUD is hardcoded into DpaceObjects.” God Object: ConfigurationManager, Context, DSpaceObject Concentrate too much functionality in a class JAR Hell: Users resort to classpath ordering to overload core API. User override classes directly to change behavior.
  • 14. Importance to @mire? Many clients with similar need for customization.
  • 15. Importance to @mire? Many clients with similar need for customization. All Products dependent on DSpace.
  • 16. Importance to @mire? Many clients with similar need for customization. All Products dependent on DSpace. We have to guaruntee upgrade path.
  • 17. Importance to @mire? Many clients with similar need for customization. All Products dependent on DSpace. We have to guaruntee upgrade path. Need stability and modularity in DSpace.
  • 22. Services: Can Help Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications.
  • 23. Services: Can Help Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications. Lessens JAR Hell: API contracts, default implementations off limits. Want to change behavior, write changes separately.
  • 24. Services: Can Help Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications. Lessens JAR Hell: API contracts, default implementations off limits. Want to change behavior, write changes separately. Removes God Objects: Services separate functional areas, separate Data Models without interdependency assure separation.
  • 25. Services: Architecture: services-util services-api services-impl
  • 26. Services: Architecture: services-util services-api services-impl DSpaceKernel- ServletContextListener DSpaceWebapp- DSpaceKernelManager DSpaceKernelInit ServletFilter JMX <<Interface>> DSpaceKernelImpl DSpaceKernel
  • 27. Services: Architecture: services-util services-api services-impl DSpaceKernel- ServletContextListener DSpaceWebapp- DSpaceKernelManager DSpaceKernelInit ServletFilter JMX <<Interface>> DSpaceKernelImpl DSpaceKernel Guice <<Interface>> DSpace ServiceManager DSpaceServiceManager Spring OSGi <<Interface>> EventServiceImpl EventService
  • 28. Services: Architecture: services-util services-api services-impl <<Interface>> DSpace ServiceManager <<Interface>> EventService
  • 29. Services: Architecture: services-util services-api services-impl /* Instantiate the Utility Class */ DSpace dspace = new DSpace(); /* Access get the Service Manager by convenience method */ ServiceManager manager = dspace.getServiceManager(); /* Or access by convenience method for default services */ EventService service = dspace.getEventService(); <<Interface>> DSpace ServiceManager <<Interface>> EventService
  • 30. Services: Default Services services-util DSpace services-api <<Interface>> ServiceManager <<Interface>> EventService <<Interface>> ConfigurationService <<Interface>> RequestService <<Interface>> SessionService
  • 31. Services: Default Services services-util DSpace DSpace dspace = new DSpace(); services-api EventService es = dspace.getEventService(); <<Interface>> ServiceManager ConfigurationService cs = dspace.getConfigurationService(); <<Interface>> EventService RequestService rs = dspace.getRequestService(); <<Interface>> ConfigurationService SessionService ss = dspace.getSessionService(); <<Interface>> RequestService <<Interface>> SessionService
  • 32. Services: Default Services dspace-xmlui-webapp services-util Spring Application Context DSpace services-api registerService <<Interface>> Your Own Services ServiceManager Your Own Event registerEventListener <<Interface>> Listeners EventService addConfiguration <<Interface>> Your Own Configs ConfigurationService addInterceptor Your Own Request <<Interface>> Interceptors RequestService <<Interface>> SessionService
  • 34. Spring: Registering Event Listeners <?xml version="1.0" encoding="UTF-8"?> <beans> <bean id="dspace" class="org.dspace.utils.DSpace"/> <bean id="dspace.eventService" factory-bean="dspace" factory-method="getEventService"/> <bean class="org.my.EventListener"> <property name="eventService" > <ref bean="dspace.eventService"/> </property> </bean>
  • 35. Spring: Java Analogy DSpace dspace = new DSpace(); EventService service = dspace.getEventService(); MyEventListener listener = new MyEventListener(); service.registerEventListener(listener);
  • 36. DSpace 1.6 Statistics Our first example of service usage DSpace XMLUI Webapp Cocoon UsageEvent EventService SolrUsage LoggingActor EventListener SolrLogger DSpace Solr Webapp fireEvent receiveEvent post HTTP Solr HTTP LogUsage Request EventListener receiveEvent Writes to log dspace .log
  • 37. Services: Firing Events DSpace dspace = new DSpace(); Event event = new UsageEvent( UsageEvent.Action.VIEW, request, context, object); dspace.getEventService().fireEvent(event);
  • 38. Proposed Next Steps: Integrate remaining Services
  • 39. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool
  • 40. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool UserService: Auth and Permissions
  • 41. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool UserService: Auth and Permissions StorageService: ContentStorage
  • 42. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool UserService: Auth and Permissions StorageService: ContentStorage MetaRegistryService: Content Models, Metadata Schema, DCMI Application Profiles.
  • 43. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool UserService: Auth and Permissions StorageService: ContentStorage MetaRegistryService: Content Models, Metadata Schema, DCMI Application Profiles. SearchService: Unified search and browse
  • 44. Proposed Next Steps: Integrate remaining Services DSpaceDataSource: DB Connection Pool UserService: Auth and Permissions StorageService: ContentStorage MetaRegistryService: Content Models, Metadata Schema, DCMI Application Profiles. SearchService: Unified search and browse MappingService: External Identifier Mapping to DSpace objects.
  • 45. Proposed Next Steps: Replacement of Legacy Managers
  • 46. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService
  • 47. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService ConfigurationManager <-------------- ConfigurationService
  • 48. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService ConfigurationManager <-------------- ConfigurationService DatabaseManager <---------- DSpaceDataSource Service
  • 49. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService ConfigurationManager <-------------- ConfigurationService DatabaseManager <---------- DSpaceDataSource Service EPerson/ResourceBundle <-------------------- UserService
  • 50. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService ConfigurationManager <-------------- ConfigurationService DatabaseManager <---------- DSpaceDataSource Service EPerson/ResourceBundle <-------------------- UserService DSO and BitstreamStorage <------------- StorageService
  • 51. Proposed Next Steps: Replacement of Legacy Managers EventManager <-------------------------------- EventService ConfigurationManager <-------------- ConfigurationService DatabaseManager <---------- DSpaceDataSource Service EPerson/ResourceBundle <-------------------- UserService DSO and BitstreamStorage <------------- StorageService Search and Configurable Browse <--------- SearchSevice
  • 52. Proposed Next Steps: Remove God Objects DSpace Database Manager Database Pool Context DB cac ID he Authentication Manager
  • 53. Proposed Next Steps: Remove God Objects DSpace Database Manager Database Context is composite object Pool Context DB cac ID he Authentication Manager
  • 54. Proposed Next Steps: Remove God Objects DSpace Database Manager Database Context is composite object Pool Gets passed around everywhere Context DB cac ID he Authentication Manager
  • 55. Proposed Next Steps: Remove God Objects DSpace Database Manager Database Context is composite object Pool Gets passed around everywhere Context Represents: DB cac ID he Authentication Manager
  • 56. Proposed Next Steps: Remove God Objects DSpace Database Manager Database Context is composite object Pool Gets passed around everywhere Context Represents: DB cac State, Identity, Transaction ID he Authentication Manager
  • 57. Proposed Next Steps: Kernel as “Context Container” DSpace Kernel Service Manager Session Session Service Request Request Service Your Cache Code Service User Service Data Source Service
  • 58. Proposed Next Steps: Liberate the Implementation
  • 59. Proposed Next Steps: Liberate the Implementation Remove Static Accessors allowing for proper API contracts and usage of Extensibility.
  • 60. Proposed Next Steps: Liberate the Implementation Remove Static Accessors allowing for proper API contracts and usage of Extensibility. Decouple Initialization of “StaticManagers” as Services into either core Spring, Guice or Application startup.
  • 61. Proposed Next Steps: Liberate the Implementation Remove Static Accessors allowing for proper API contracts and usage of Extensibility. Decouple Initialization of “StaticManagers” as Services into either core Spring, Guice or Application startup. Enforce contracts and backward compatability as a community practice to assure reliable API + Services.
  • 63. In Summary DSpace 2.0 is successful project to date.
  • 64. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate.
  • 65. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate. Work is incremental, projects need to be tractable.
  • 66. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate. Work is incremental, projects need to be tractable. Work needs to be kept close to the trunk
  • 67. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate. Work is incremental, projects need to be tractable. Work needs to be kept close to the trunk DSpace Services are here as the first step.
  • 68. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate. Work is incremental, projects need to be tractable. Work needs to be kept close to the trunk DSpace Services are here as the first step. Faster when we all collaborate in migration activities.
  • 69. In Summary DSpace 2.0 is successful project to date. Yet, will take multiple releases to integrate. Work is incremental, projects need to be tractable. Work needs to be kept close to the trunk DSpace Services are here as the first step. Faster when we all collaborate in migration activities. Could always use a little more “$upport”
  • 70. Special Thanks: Ben Bosman Graham Triggs Art Lowel Kevin Van de velde Bradley McLean Aaron Zeckoski
  • 71. Supporting Organizations: Mark Diggory mdiggory@atmire.com
  • 72. BACK-PORTING DSPACE 2.0: DSPACE SERVICES Mark Diggory DSUG 2009

Editor's Notes

  1. What do we think is the problem? Community Developers need to maintain and improve DSpace. End User Developers need to Customize installations. Developers manipulating same code. Results in Developers butting heads over merging contributions and new versions. repeated changes to adapt DSpace to new customizations.
  2. But is it the developers fault that these conflict occur? No, its not their fault? Need to innovate, Need to change code, Need to solve immediate issues first.
  3. But is it the developers fault that these conflict occur? No, its not their fault? Need to innovate, Need to change code, Need to solve immediate issues first.
  4. But is it the developers fault that these conflict occur? No, its not their fault? Need to innovate, Need to change code, Need to solve immediate issues first.
  5. But is it the developers fault that these conflict occur? No, its not their fault? Need to innovate, Need to change code, Need to solve immediate issues first.
  6. While DSpace Static Manager Design is simple. While they helped original developers be innovative and get their job done, they now limit us in the DSpace of today. And static methods do not make an API, Application Programming Interface) static methods are not extensible. Static methods cannot be overridden or re-implemented And we have a lot of these in DSpace Examples: PluginManager, ConfigurationManager, DatabaseManager, BitstreamStorageManager They are even present in DSpaceObject Model Static method even reference into other static Manager methods hardcoded in implementation. Users forced to customize static methods directly Repackaging modules: same Class, different behavior. Everyone (Users and Developers) are changing the implementation directly.
  7. So, Anti-patterns represent possibly bad practices we might wnat to consider avoiding in the codebase. I can identify a few in both DSpace and how we use/customize it... [click] Hardcoding the Initialization of Configuration Hardcoding Database Access into Data Model. [click] God Objects, ConfigurationManager (config, but also templates and logging) Context (db, events, cache, authen) DSpaceObject (data model and storage) [click] JAR Hell, users have to alter source and override implementation to change behavior Continuing practice with Maven and Overlays... leads to &amp;#x201C;jar hell&amp;#x201D; and &amp;#x201C;classloader hell&amp;#x201D; where users change behavior by readding same class with changes in front of original ont he classpath. Not in criticism of all the hard work that went into DSpace initially. But an analysis of the codebase given best practices that evolved since its creation.
  8. So, Anti-patterns represent possibly bad practices we might wnat to consider avoiding in the codebase. I can identify a few in both DSpace and how we use/customize it... [click] Hardcoding the Initialization of Configuration Hardcoding Database Access into Data Model. [click] God Objects, ConfigurationManager (config, but also templates and logging) Context (db, events, cache, authen) DSpaceObject (data model and storage) [click] JAR Hell, users have to alter source and override implementation to change behavior Continuing practice with Maven and Overlays... leads to &amp;#x201C;jar hell&amp;#x201D; and &amp;#x201C;classloader hell&amp;#x201D; where users change behavior by readding same class with changes in front of original ont he classpath. Not in criticism of all the hard work that went into DSpace initially. But an analysis of the codebase given best practices that evolved since its creation.
  9. So, Anti-patterns represent possibly bad practices we might wnat to consider avoiding in the codebase. I can identify a few in both DSpace and how we use/customize it... [click] Hardcoding the Initialization of Configuration Hardcoding Database Access into Data Model. [click] God Objects, ConfigurationManager (config, but also templates and logging) Context (db, events, cache, authen) DSpaceObject (data model and storage) [click] JAR Hell, users have to alter source and override implementation to change behavior Continuing practice with Maven and Overlays... leads to &amp;#x201C;jar hell&amp;#x201D; and &amp;#x201C;classloader hell&amp;#x201D; where users change behavior by readding same class with changes in front of original ont he classpath. Not in criticism of all the hard work that went into DSpace initially. But an analysis of the codebase given best practices that evolved since its creation.
  10. [click] Many clients with similar need for customization. [click] All Products dependent on DSpace, in some cases we have some cases, we too overlay existing dspace-api classes and are subject to these problems during upgrading. [click] But, as a commercial company, we NEED to guarantee upgrade path for our clients. [click] Thus we really need stable and clearly defined API in DSpace. Both for reliability and for our own customiations.
  11. [click] Many clients with similar need for customization. [click] All Products dependent on DSpace, in some cases we have some cases, we too overlay existing dspace-api classes and are subject to these problems during upgrading. [click] But, as a commercial company, we NEED to guarantee upgrade path for our clients. [click] Thus we really need stable and clearly defined API in DSpace. Both for reliability and for our own customiations.
  12. [click] Many clients with similar need for customization. [click] All Products dependent on DSpace, in some cases we have some cases, we too overlay existing dspace-api classes and are subject to these problems during upgrading. [click] But, as a commercial company, we NEED to guarantee upgrade path for our clients. [click] Thus we really need stable and clearly defined API in DSpace. Both for reliability and for our own customiations.
  13. [click] Many clients with similar need for customization. [click] All Products dependent on DSpace, in some cases we have some cases, we too overlay existing dspace-api classes and are subject to these problems during upgrading. [click] But, as a commercial company, we NEED to guarantee upgrade path for our clients. [click] Thus we really need stable and clearly defined API in DSpace. Both for reliability and for our own customiations.
  14. But what is modularity... separating the code into smaller and more specific projects. We work to separate the libraries into Functionally separate units. Use dependency relationships to clarify inter-dependencies. But... Have to be cautious that we don&amp;#x2019;t increase complexity that we are seeking to reduce. We do need modularity. But, modularity is not a complete solution on its own. We need something else...
  15. We need to eliminate dependencies where ever we can and focus on implementations not being tightly bound to other implementations. [click] and most importantly, we need to identify key important interfaces as contracts within the application.
  16. API are contracts, implementation are separate. What to change something, write your own service or reimplement an existing service.Everything is replaceable. Everything is packaged separately. Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications. Lessens JAR Hell: API contracts, default implementations off limits.Want to change behavior, write changes separately. Removes God Objects: Services separate functional areas, separate Data Models without interdependency assure separation.
  17. API are contracts, implementation are separate. What to change something, write your own service or reimplement an existing service.Everything is replaceable. Everything is packaged separately. Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications. Lessens JAR Hell: API contracts, default implementations off limits.Want to change behavior, write changes separately. Removes God Objects: Services separate functional areas, separate Data Models without interdependency assure separation.
  18. API are contracts, implementation are separate. What to change something, write your own service or reimplement an existing service.Everything is replaceable. Everything is packaged separately. Removes Hardcode: Data Models are anemic, Services implemented separate from interfaces used by applications. Lessens JAR Hell: API contracts, default implementations off limits.Want to change behavior, write changes separately. Removes God Objects: Services separate functional areas, separate Data Models without interdependency assure separation.
  19. Not actually part of the DSPace 1.6.0 trunk More like a 3rd party dependency Released separately under its own revision path Dividied into 3 projects API ....
  20. ConfigurationService: Configuration properties for the DSpace system Event Service: Register Event Listeners. Generate Events. Request Service: Transactional window for completing tasks. Provides hooks for Request Interceptors to allow other services to participate in the transaction. Session Service: Provides a state across requests. Caching Service: Holds onto references to objects for later use.
  21. Point out that : Contains configuration User defined Asynchronous DSpace Services. exists in both XMLUI and JSPUI Note that more files can be added here, Which is a more appropriate use of overlays that replacing files wholesale.
  22. Spring XML configuration example
  23. Same analogy in Java But there are other ways as well. Google Guice, annotations, etc.
  24. So our first reall example of service usage in DSpace 1.6
  25. An example of firing events..
  26. Request is transactional window User can get it from Request service Not passed around Retained in Thread Local Database Connection no longer transactional window (not present in 1.6) Code must register Request-Interceptors to close database transactions.
  27. Inversion of Control will free the User/Developer to be able to choose the appropriate configuration and modules used by DSpace. However, we may want to port whatever we can in DSpace 1.x to retain a continuum of the intelligent work and bug fixes that have gone into 1.x Rather than Hardcoded Initialization forcing DSpace Users to accept DSpace existing Configuration. Or altering that implmentation directly. Decide what implementations should be isolated from API directly used by users customizing DSpace.
  28. Inversion of Control will free the User/Developer to be able to choose the appropriate configuration and modules used by DSpace. However, we may want to port whatever we can in DSpace 1.x to retain a continuum of the intelligent work and bug fixes that have gone into 1.x Rather than Hardcoded Initialization forcing DSpace Users to accept DSpace existing Configuration. Or altering that implmentation directly. Decide what implementations should be isolated from API directly used by users customizing DSpace.
  29. Inversion of Control will free the User/Developer to be able to choose the appropriate configuration and modules used by DSpace. However, we may want to port whatever we can in DSpace 1.x to retain a continuum of the intelligent work and bug fixes that have gone into 1.x Rather than Hardcoded Initialization forcing DSpace Users to accept DSpace existing Configuration. Or altering that implmentation directly. Decide what implementations should be isolated from API directly used by users customizing DSpace.
  30. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  31. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  32. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  33. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  34. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  35. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  36. [click] DSpace 2.0 is a successful, but immense and multifaceted project. [click] Will take multiple version releases introducing new functionality as we go [click] Work is incremental, projects need to remain tractable and adopted quickly [click] Work needs to be kept close to the trunk where it can be integrated. [click] Services are here as the first step towards that integration. [click] All Developers need to plan together to for these migrations My ultimate hope is to emphasize to the community the immense need for you to come forward and contribute within the DSpace developers group, not only working on 2.0, but also on the neccessary effort that will be needed to bring these needed improvements to mainstream usage within the DSpace community. In doing this integration of dspace-services into DSpace 1.6.0 my interest is in assuring the preservation of this effort by spearheading its adoption onto the community.
  37. We really need to thank Aaron Zeckoski for providing us with dspace-services. We would not have this solution if it were not for his initiative and the contribution of his time by CARET and funding by JISC.
  38. We really need to thank Aaron Zeckoski for providing us with dspace-services. We would not have this solution if it were not for his initiative and the contribution of his time by CARET and JISC.