SlideShare a Scribd company logo
1 of 72
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-casellentuck
 
Spring 3.1: a Walking Tour
Spring 3.1: a Walking TourSpring 3.1: a Walking Tour
Spring 3.1: a Walking TourJoshua 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 MillidgeC2B2 Consulting
 
DevOps Enabling Your Team
DevOps Enabling Your TeamDevOps Enabling Your Team
DevOps Enabling Your TeamGR8Conf
 
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 ReleaseDavid Bosschaert
 
Above the clouds: introducing Akka
Above the clouds: introducing AkkaAbove the clouds: introducing Akka
Above the clouds: introducing Akkanartamonov
 
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 OnAppWalter 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 7Kevin 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, PunoElwin Huaman
 
REPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITALREPOSITORIOS DE INFORMACION DIGITAL
REPOSITORIOS DE INFORMACION DIGITALAlessandra Venegas
 
Proquest y Dspace
Proquest y DspaceProquest y Dspace
Proquest y DspaceL1arizala
 
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 VigoLolaPereira
 
Qué son los repositorios
Qué son los repositoriosQué son los repositorios
Qué son los repositoriosErnest Abadal
 
Repositorios de recursos
Repositorios de recursosRepositorios de recursos
Repositorios de recursosfeditic
 
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ónJuan José Mendoza Castillo
 
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 ejemplosJulio 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 Back-porting DSpace 2.0 Services

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 vNextRodolfo 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 FrameworkDaniel Spector
 
Running High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclioRunning High-Speed Serverless with nuclio
Running High-Speed Serverless with nuclioiguazio
 
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 iPhoneHeiko 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 2017Amazon 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.pdfAmazon 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 presentationSufanhk
 
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 讓您專注「應用優先」.pptxAmazon Web Services
 
Advanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAdvanced Serverless Apps With Step Functions
Advanced Serverless Apps With Step FunctionsAmazon 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 ServiceAmazon 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 FunctionsAmazon Web Services
 
Serverless Development Deep Dive
Serverless Development Deep DiveServerless Development Deep Dive
Serverless Development Deep DiveAmazon 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 FunctionsbeSharp
 
Acme Packet Provisioning Framework
Acme Packet Provisioning FrameworkAcme Packet Provisioning Framework
Acme Packet Provisioning FrameworkMislav 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 2018AWS Germany
 
PeopleSoft: HACK THE Planet^W university
PeopleSoft: HACK THE  Planet^W universityPeopleSoft: HACK THE  Planet^W university
PeopleSoft: HACK THE Planet^W universityDmitry Iudin
 

Similar to Back-porting DSpace 2.0 Services (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

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationRidwan Fadjar
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsMaria Levchenko
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 

Recently uploaded (20)

Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
My Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 PresentationMy Hashitalk Indonesia April 2024 Presentation
My Hashitalk Indonesia April 2024 Presentation
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed textsHandwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 

Back-porting DSpace 2.0 Services

  • 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.