Modularizing your Grails Application with Private Plugins - SpringOne 2GX 2012kennethaliu
The document discusses modularizing a Grails application using private plugins. It covers Grails plugin development basics like creating a new plugin, the plugin descriptor file, excluded files, running and packaging a plugin. It also discusses application architecture with private plugins, including moving common functionality into plugins to avoid forking code.
This document provides an introduction to the Grails framework. It discusses the major components of Grails including controllers, views, domain objects, services, tag libraries and plugins. It also summarizes common Grails commands and techniques for extending applications using plugins.
This document discusses using React with Grails 3. It begins with an overview of React, explaining key concepts like components, props, and state. It then covers different approaches to using React in Grails projects, including with the Asset Pipeline, Webpack, and the React profile for Grails which generates a project setup with React and Webpack configured. Isomorphic React, which allows server-side rendering with Nashorn, is also demonstrated. Resources for further learning about React, Grails plugins, and integrating the two frameworks are provided.
SpringOne 2021
Session Title: A Tour of the Modern Java Platform
Speakers: Bruce Eckel, President at Mindview LLC; James Ward, Developer Relations Engineer at Google Cloud
Grails is an open-source framework that enables high-velocity development of Spring applications. It uses conventions over configuration, integrates best-of-breed Java technologies like Spring and Hibernate, and provides a full-stack framework with object-relational mapping, web controllers, and view rendering. Grails aims to increase developer productivity through sensible defaults and simplified APIs.
Spring Boot on Amazon Web Services with Spring Cloud AWSVMware Tanzu
SpringOne 2021
Session Title: Spring Boot on Amazon Web Services with Spring Cloud AWS
Speakers: Maciej Walkowiak, Software Consultant at Independent; Matej Nedic, Software engineer at Ingemark
L’evoluzione delle pratiche di sviluppo, delle architetture e delle infrastrutture è un processo che anche Drupal ha abbracciato, trasformandosi da un CMS per community a un framework PHP moderno.
Drupal oggi permette di creare un'esperienza developer-friendly e può essere la base su cui costruire la vostra applicazione cloud-native.
Reconciling ReactJS as a View Layer Replacement (MidwestJS 2014)Zach Lendon
This document discusses React, a JavaScript library for building user interfaces. It notes that React uses virtual DOM for faster rendering. React components render on state changes and use props and state as inputs. Scaling with React involves using Flux architecture and stores instead of MVC controllers. React can also be integrated with other frameworks like Backbone and Angular by triggering re-renders on data changes.
MidwestJS 2014 Reconciling ReactJS as a View Layer ReplacementZach Lendon
This document discusses React, a JavaScript library for building user interfaces. It notes that React uses virtual DOM for faster rendering. React components render on state changes and use props and state as inputs. Scaling with React involves using Flux architecture and stores instead of MVC controllers. React can also be integrated with other frameworks like Backbone and Angular by triggering re-renders on data changes.
The document discusses adopting Grails for web application development. It summarizes several episodes or lessons learned:
1. GORM constraints were ignored when domain classes were loaded by a shared classloader rather than the Grails classloader. The constraints had to be extracted to a shared library.
2. Using BlazeDS for Flex communication caused data objects to lose field values after round trips. DTOs and mapping tools like Dozer were needed.
3. Web services should treat the UI as another automation client to avoid duplicating XML flows. Domain data can be mapped to XML in GSPs without DTOs.
4. When domain classes were no longer stored in the database, meta-
Headless Drupal: A modern approach to (micro)services and APIssparkfabrik
Drupal offre agli sviluppatori un ambiente di lavoro moderno, che permette di modellare dati ed esporli via API nativamente; questo lo rende un ottimo candidato sia per sviluppare un CMS headless usando un frontend framework moderno, sia per lo sviluppo di microservizi.
In questo talk vi presenteremo alcuni casi d’uso per sfruttare al meglio le potenzialità di Drupal fuori dal classico contesto CMS.
Gavin Hogan presented on using Grails, a rapid web application development framework built on Groovy and Spring. Some key points:
- Grails leverages Groovy and Spring to provide convention over configuration and generate Spring beans and wiring automatically.
- Object-relational mapping is handled through GORM, which is built on Hibernate. Dynamic finders and validation are also included.
- Views use Groovy Server Pages (GSP) which are similar to JSP. Taglibs allow reusable view components to be created.
- Plugins extend functionality and can package entire aspects like security. The plugin ecosystem contains solutions for many common needs.
This document provides an overview of several core technologies used in React applications, including React, Flux, Node.js, Browserify, and Gulp. It discusses that React is a JavaScript library for building user interfaces and rendering UI as HTML. It uses virtual DOM for efficient updates. Flux is an architecture for uni-directional data flow. Node.js is used for server-side JavaScript with npm. Browserify allows using Node modules in the browser. Gulp is a build system for tasks like bundling files.
This document provides an overview of JavaFX presented by Mansi Babbar. It discusses what JavaFX is, why it is needed, its features and structure. The key components of JavaFX like controls, layouts, charts, media etc. are explained. An example JavaFX application structure and code is given. The presentation ends with a demo of JavaFX.
I've been working a lot with React lately and thought it would be a good idea to share what I've learned with the group.
During this talk we'll take a look at Facebook's React library while drawing comparisons to frameworks like Angular. We'll see how we can use React and friends to create a fast and efficient single page app. Attendees are expected to have some familiarity with ES6/ES7 since we the codebase we will be looking at leverages features from the spec.
What we'll be taking a look at:
• React
• React Router
• Redux
• Redux Sagas
• Webpack
• Babel
The document discusses the history and evolution of JavaScript, TypeScript, and related technologies. It describes how JavaScript originated as LiveScript in 1995 and was standardized as ECMAScript. It outlines the development of JavaScript engines like V8 and environments like Node.js that expanded JavaScript beyond browsers. Finally, it introduces TypeScript as a typed superset of JavaScript that transpiles to JavaScript and allows development of client-side and server-side apps using JavaScript and Node.js.
With Grails 3, the plugin development experience changes a little bit compared to that of Grails 2. In this talk, Álvaro (member of the Grails team at OCI, Grails committer and author of several plugins) will cover several topics to understand how plugins work in Grails 3, focusing on best practices.
The session is structured as a set of tips and tricks with code samples in the following areas: modularisation, build system, testing and publishing.
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...Srijan Technologies
The document discusses Kubernetes operators and provides an overview of a Drupal operator called Druperator that is being developed by Srijan. It summarizes Kubernetes operators, how they automate application lifecycles on Kubernetes. It then discusses extending the Kubernetes control plane through custom resource definitions and controllers. Finally, it mentions that Druperator is a custom controller for managing the lifecycle of Drupal applications on Kubernetes.
Spring Framework provides a comprehensive infrastructure to develop Java applications. It handles dependency injection and inversion of control so developers can focus on domain logic rather than plumbing. Spring promotes best practices like clean code, test-driven development, and design patterns. It includes aspects for cross-cutting concerns and supports web development through frameworks like Spring MVC. The document introduces Spring's lightweight and modular IoC container and AOP capabilities for separating concerns.
JAX 2013: Modern Architectures with Spring and JavaScriptmartinlippert
This document discusses modern application architectures using Spring and JavaScript. It describes how typical applications have moved from monolithic architectures running on application servers with relational databases to more modular architectures with services, NoSQL databases, and rich client applications built with JavaScript running in browsers. It outlines challenges in developing modular applications with JavaScript on the client and RESTful services on the server using technologies like Spring, and opportunities to leverage platforms as a service.
Dropwizard is a Java framework that provides tools for building RESTful web services. It bundles several popular Java libraries - like Jersey for JAX-RS, Jetty as an embedded HTTP server, Jackson for JSON processing, Metrics for monitoring, and Hibernate Validator - into an easy to use package. Dropwizard makes it simple to build robust, production-ready REST APIs without needing a separate application server. The framework also makes it easy to integrate with Spring for dependency injection. Overall, Dropwizard provides a best-of-breed toolkit for building RESTful services in Java.
Juergen Hoeller outlines plans for Spring Framework 6.0, which will mark the beginning of a new generation with Java 17 and Jakarta EE 9 as the new baseline. It will include foundational support for native executables and AOT processing via Spring Native as well as unified observability APIs. Some outdated features will be pruned or deprecated to future-proof the framework. An initial milestone release is planned for late 2021 with a general availability target of October 2022. Community feedback on target infrastructure, configuration preferences, and relevance of EE APIs is sought to guide the roadmap.
This document provides an overview of React Native, summarizing that it allows building mobile apps using JavaScript and React by rendering UI components to native platform elements. It discusses that React Native uses no HTML, browser or webview, instead being completely powered by JavaScript communicating directly with native platform views. It then demonstrates how to build React Native apps using common components like TouchableHighlight and ListView, inline styles, and platform APIs while also addressing debugging, testing and future considerations.
High Performance Microservices with Ratpack and Spring BootDaniel Woods
This document provides an overview of using Ratpack and Spring Boot to build high performance microservices. It discusses Ratpack's asynchronous and non-blocking execution model which uses promises to deterministically process asynchronous calls. It describes how Ratpack uses registries for dependency injection which can integrate with Spring Boot. It presents an example microservice application and includes performance numbers from testing on cloud infrastructure showing how much burst traffic can be sustained.
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...chbornet
The document discusses connecting JHipster applications to APIs using OpenAPI and gRPC. It provides an overview of SOA protocols like REST and compares gRPC to HTTP-JSON. gRPC offers features like bidirectional streaming, deadline propagation, and cancellation propagation. The JHipster generator-jhipster-grpc module allows generating gRPC services in JHipster apps and uses the reactive-grpc library. The presentation explores documenting APIs with Swagger/OpenAPI, generating clients from OpenAPI specs, and implementing API-first development.
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
Is it possible to write a program that significantly changes its behaviour during the runtime without changing its source code? Have you ever wondered about native TypeScript support in Node.js? Or whether it is possible to write JavaScript code that syntactically feels a lot different but is still valid? The answers to these and a lot of other questions will be discussed in detail in this talk. From the basics of metaprogramming theory to practical examples of its application in enterprise projects. We are going to talk about metalinguistic abstractions, domain-specific languages, and how they can help us solve software engineering problems. We will take a look at how popular frameworks and libraries like React.js, Express.js, Nest.js and Lodash use metaprogramming to develop systems that are used worldwide. Moreover, we will learn how to think in terms of metaprograms and broaden our outlook towards the great world of metasystems.
This document provides an overview of Reactor, an open source library for building reactive and fast data applications on the JVM. Reactor allows building components and applications using reactive patterns like selectors to route events. It includes abstractions like streams, promises and processors that provide composable ways to work with asynchronous and event-driven data. The document outlines Reactor's capabilities and roadmap, and how it can be used from Java and Groovy to build reactive applications.
This document discusses using asynchronous programming and reactive programming with events to build highly scalable applications. It introduces the Grails Events plugin, which provides an eventing framework based on the Reactor library. The Grails Events plugin allows applications and plugins to listen for and publish events to support asynchronous processing. It also provides stream processing capabilities and integration with technologies like GORM and Atmosphere for browser push notifications.
Reconciling ReactJS as a View Layer Replacement (MidwestJS 2014)Zach Lendon
This document discusses React, a JavaScript library for building user interfaces. It notes that React uses virtual DOM for faster rendering. React components render on state changes and use props and state as inputs. Scaling with React involves using Flux architecture and stores instead of MVC controllers. React can also be integrated with other frameworks like Backbone and Angular by triggering re-renders on data changes.
MidwestJS 2014 Reconciling ReactJS as a View Layer ReplacementZach Lendon
This document discusses React, a JavaScript library for building user interfaces. It notes that React uses virtual DOM for faster rendering. React components render on state changes and use props and state as inputs. Scaling with React involves using Flux architecture and stores instead of MVC controllers. React can also be integrated with other frameworks like Backbone and Angular by triggering re-renders on data changes.
The document discusses adopting Grails for web application development. It summarizes several episodes or lessons learned:
1. GORM constraints were ignored when domain classes were loaded by a shared classloader rather than the Grails classloader. The constraints had to be extracted to a shared library.
2. Using BlazeDS for Flex communication caused data objects to lose field values after round trips. DTOs and mapping tools like Dozer were needed.
3. Web services should treat the UI as another automation client to avoid duplicating XML flows. Domain data can be mapped to XML in GSPs without DTOs.
4. When domain classes were no longer stored in the database, meta-
Headless Drupal: A modern approach to (micro)services and APIssparkfabrik
Drupal offre agli sviluppatori un ambiente di lavoro moderno, che permette di modellare dati ed esporli via API nativamente; questo lo rende un ottimo candidato sia per sviluppare un CMS headless usando un frontend framework moderno, sia per lo sviluppo di microservizi.
In questo talk vi presenteremo alcuni casi d’uso per sfruttare al meglio le potenzialità di Drupal fuori dal classico contesto CMS.
Gavin Hogan presented on using Grails, a rapid web application development framework built on Groovy and Spring. Some key points:
- Grails leverages Groovy and Spring to provide convention over configuration and generate Spring beans and wiring automatically.
- Object-relational mapping is handled through GORM, which is built on Hibernate. Dynamic finders and validation are also included.
- Views use Groovy Server Pages (GSP) which are similar to JSP. Taglibs allow reusable view components to be created.
- Plugins extend functionality and can package entire aspects like security. The plugin ecosystem contains solutions for many common needs.
This document provides an overview of several core technologies used in React applications, including React, Flux, Node.js, Browserify, and Gulp. It discusses that React is a JavaScript library for building user interfaces and rendering UI as HTML. It uses virtual DOM for efficient updates. Flux is an architecture for uni-directional data flow. Node.js is used for server-side JavaScript with npm. Browserify allows using Node modules in the browser. Gulp is a build system for tasks like bundling files.
This document provides an overview of JavaFX presented by Mansi Babbar. It discusses what JavaFX is, why it is needed, its features and structure. The key components of JavaFX like controls, layouts, charts, media etc. are explained. An example JavaFX application structure and code is given. The presentation ends with a demo of JavaFX.
I've been working a lot with React lately and thought it would be a good idea to share what I've learned with the group.
During this talk we'll take a look at Facebook's React library while drawing comparisons to frameworks like Angular. We'll see how we can use React and friends to create a fast and efficient single page app. Attendees are expected to have some familiarity with ES6/ES7 since we the codebase we will be looking at leverages features from the spec.
What we'll be taking a look at:
• React
• React Router
• Redux
• Redux Sagas
• Webpack
• Babel
The document discusses the history and evolution of JavaScript, TypeScript, and related technologies. It describes how JavaScript originated as LiveScript in 1995 and was standardized as ECMAScript. It outlines the development of JavaScript engines like V8 and environments like Node.js that expanded JavaScript beyond browsers. Finally, it introduces TypeScript as a typed superset of JavaScript that transpiles to JavaScript and allows development of client-side and server-side apps using JavaScript and Node.js.
With Grails 3, the plugin development experience changes a little bit compared to that of Grails 2. In this talk, Álvaro (member of the Grails team at OCI, Grails committer and author of several plugins) will cover several topics to understand how plugins work in Grails 3, focusing on best practices.
The session is structured as a set of tips and tricks with code samples in the following areas: modularisation, build system, testing and publishing.
[Srijan Wednesday Webinar] How to Run Stateless and Stateful Services on K8S ...Srijan Technologies
The document discusses Kubernetes operators and provides an overview of a Drupal operator called Druperator that is being developed by Srijan. It summarizes Kubernetes operators, how they automate application lifecycles on Kubernetes. It then discusses extending the Kubernetes control plane through custom resource definitions and controllers. Finally, it mentions that Druperator is a custom controller for managing the lifecycle of Drupal applications on Kubernetes.
Spring Framework provides a comprehensive infrastructure to develop Java applications. It handles dependency injection and inversion of control so developers can focus on domain logic rather than plumbing. Spring promotes best practices like clean code, test-driven development, and design patterns. It includes aspects for cross-cutting concerns and supports web development through frameworks like Spring MVC. The document introduces Spring's lightweight and modular IoC container and AOP capabilities for separating concerns.
JAX 2013: Modern Architectures with Spring and JavaScriptmartinlippert
This document discusses modern application architectures using Spring and JavaScript. It describes how typical applications have moved from monolithic architectures running on application servers with relational databases to more modular architectures with services, NoSQL databases, and rich client applications built with JavaScript running in browsers. It outlines challenges in developing modular applications with JavaScript on the client and RESTful services on the server using technologies like Spring, and opportunities to leverage platforms as a service.
Dropwizard is a Java framework that provides tools for building RESTful web services. It bundles several popular Java libraries - like Jersey for JAX-RS, Jetty as an embedded HTTP server, Jackson for JSON processing, Metrics for monitoring, and Hibernate Validator - into an easy to use package. Dropwizard makes it simple to build robust, production-ready REST APIs without needing a separate application server. The framework also makes it easy to integrate with Spring for dependency injection. Overall, Dropwizard provides a best-of-breed toolkit for building RESTful services in Java.
Juergen Hoeller outlines plans for Spring Framework 6.0, which will mark the beginning of a new generation with Java 17 and Jakarta EE 9 as the new baseline. It will include foundational support for native executables and AOT processing via Spring Native as well as unified observability APIs. Some outdated features will be pruned or deprecated to future-proof the framework. An initial milestone release is planned for late 2021 with a general availability target of October 2022. Community feedback on target infrastructure, configuration preferences, and relevance of EE APIs is sought to guide the roadmap.
This document provides an overview of React Native, summarizing that it allows building mobile apps using JavaScript and React by rendering UI components to native platform elements. It discusses that React Native uses no HTML, browser or webview, instead being completely powered by JavaScript communicating directly with native platform views. It then demonstrates how to build React Native apps using common components like TouchableHighlight and ListView, inline styles, and platform APIs while also addressing debugging, testing and future considerations.
High Performance Microservices with Ratpack and Spring BootDaniel Woods
This document provides an overview of using Ratpack and Spring Boot to build high performance microservices. It discusses Ratpack's asynchronous and non-blocking execution model which uses promises to deterministically process asynchronous calls. It describes how Ratpack uses registries for dependency injection which can integrate with Spring Boot. It presents an example microservice application and includes performance numbers from testing on cloud infrastructure showing how much burst traffic can be sustained.
JHipster Conf 2018 : Connect your JHipster apps to the world of APIs with Ope...chbornet
The document discusses connecting JHipster applications to APIs using OpenAPI and gRPC. It provides an overview of SOA protocols like REST and compares gRPC to HTTP-JSON. gRPC offers features like bidirectional streaming, deadline propagation, and cancellation propagation. The JHipster generator-jhipster-grpc module allows generating gRPC services in JHipster apps and uses the reactive-grpc library. The presentation explores documenting APIs with Swagger/OpenAPI, generating clients from OpenAPI specs, and implementing API-first development.
"Applied Enterprise Metaprogramming in JavaScript", Vladyslav DukhinFwdays
Is it possible to write a program that significantly changes its behaviour during the runtime without changing its source code? Have you ever wondered about native TypeScript support in Node.js? Or whether it is possible to write JavaScript code that syntactically feels a lot different but is still valid? The answers to these and a lot of other questions will be discussed in detail in this talk. From the basics of metaprogramming theory to practical examples of its application in enterprise projects. We are going to talk about metalinguistic abstractions, domain-specific languages, and how they can help us solve software engineering problems. We will take a look at how popular frameworks and libraries like React.js, Express.js, Nest.js and Lodash use metaprogramming to develop systems that are used worldwide. Moreover, we will learn how to think in terms of metaprograms and broaden our outlook towards the great world of metasystems.
This document provides an overview of Reactor, an open source library for building reactive and fast data applications on the JVM. Reactor allows building components and applications using reactive patterns like selectors to route events. It includes abstractions like streams, promises and processors that provide composable ways to work with asynchronous and event-driven data. The document outlines Reactor's capabilities and roadmap, and how it can be used from Java and Groovy to build reactive applications.
This document discusses using asynchronous programming and reactive programming with events to build highly scalable applications. It introduces the Grails Events plugin, which provides an eventing framework based on the Reactor library. The Grails Events plugin allows applications and plugins to listen for and publish events to support asynchronous processing. It also provides stream processing capabilities and integration with technologies like GORM and Atmosphere for browser push notifications.
The document discusses Grails, a web application framework built on Groovy and Java. It provides an overview of Grails and Groovy, how they simplify Java web development through conventions over configuration, integration with Java and tools like Hibernate and Spring, and how domain classes, GORM, and scaffolding are used to build the model-view-controller structure of a Grails app. Key features highlighted include dynamic typing through Groovy, seamless use of Java code and libraries, and enhanced developer productivity.
Becoming a Productive Groovy, Grails and Spring Developer with IntelliJ IDEAAndrey Cheptsov
When it comes to productivity, what counts is reliable and smart support from your IDE for the frameworks in your project. IntelliJ IDEA’s support for Groovy, Grails and Spring has been going strong for the last few years, expanding and refining its features with each new release.
Let’s explore the most tricky features of the IDE that help developers to be more productive.
This document provides a tutorial for connecting a Grails application to a MySQL database and performing basic CRUD operations. It describes creating databases in MySQL, generating a Grails application, configuring the data source properties to connect to MySQL, generating a domain class and controller with scaffolding, and verifying the application works by interacting with the database. The tutorial shows how to set up the development and production environments to use different databases.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms.
Groovy is a dynamic language for the Java Virtual Machine that aims to bring dynamic capabilities like Python and Ruby to Java developers. It has many features inspired by dynamic languages like closures, duck typing and metaprogramming, but also maintains compatibility with Java by having a Java-like syntax and the ability to interoperate with Java code. Groovy code can either be run directly from scripts or compiled into Java bytecode to be used within Java applications.
This document discusses message driven architecture in Grails. It provides an overview of Spring Integration and describes how to build a message driven architecture skeleton as a messaging pipeline. It then gives examples of functions for room search and booking, illustrating them as message driven pipelines with different services as handlers. The document explains that message driven architecture is not always the same as distributed architecture and discusses reasons for adopting a message driven approach.
AppSync.org: open-source patterns and code for data synchronization in mobile...Niko Nelissen
AppSync.org is an open-source project for mobile app developers, that provides patterns, algorithms and source code to implement data synchronization between mobile apps (clients) and backends (server or mBaaS platform).
Reactive Microservice Architecture with Groovy and GrailsSteve Pember
Steve Pember gave a presentation on reactive oriented architecture with Grails and Groovy. He discussed some key points:
1. Monolithic applications will not scale well as they grow in complexity, which can negatively impact development and maintenance.
2. Service oriented architecture (SOA) and microservices can help break applications into independent components, but SOA implementations have issues like increased complexity from interconnected services.
3. Architecture choices are more important than any specific framework. Microservices aim to distill SOA principles by focusing each component on a single context to reduce complexity.
JavaScript Test-Driven Development with Jasmine 2.0 and Karma Christopher Bartling
This document discusses JavaScript test-driven development using Jasmine 2.0 and Karma. It introduces test-driven development principles and benefits, then covers the Karma test runner, PhantomJS browser, and features of the Jasmine testing framework including describe blocks, expectations, matchers, spies, and custom matchers. It also provides an example of mapping earthquakes and testing color-coded circles using magnitude and discusses code coverage and sustaining test-driven practices.
There are a lot of great things about the cloud, but the "destroy and rebuild" philosophy which is really good for building a continuous delivery pipeline, really sucks when applied to troubleshooting production problems. When your application goes haywire, the most valuable engineering skill is not the the ability to bring up a copy of your system or even the knowledge of your technology stack (although it doesn't hurt). It is the skill of understanding and solving problems.
Finding the root cause of the issue and mitigating it with minimal disruption in production is a must-have skill for engineers responsible for managing and maintaining production systems, which nowadays includes ops, dbas and devs alike. In this talk I will discuss the skills required to troubleshoot complex systems, traits that prevent engineers from being successful at troubleshooting and discuss some techniques and tips and trick for troubleshooting complex systems in production.
To view recording of this webinar please use below URL:
http://wso2.com/library/webinars/2015/09/event-driven-architecture/
Enterprise systems today are moving towards being dynamic where change has become the norm rather than the exception. Such systems need to be loosely coupled, autonomous, versatile and adaptive. There arises the need to model such systems, and event driven architecture (EDA) is how such systems can be modelled and explained.
This webinar will discuss
The basics of EDA
How it can benefit your enterprise
How the WSO2 product stack complements this architectural pattern
Microservices and functional programmingMichael Neale
A talk I did recently on microservices and functional programming. Microservices are small, single purpose apps that are run as a service, which are usually composed together to provide the real app.
OpenDolphin: Enterprise Apps for collaboration on Desktop, Web, and MobileDierk König
The document describes OpenDolphin, an open source library that facilitates communication between views and controllers in an asynchronous and remote manner using shared presentation models. It allows building enterprise applications for desktop, web and mobile with features like multi-user collaboration, multi-channel support, and real-time updates. OpenDolphin promotes clean architecture, low coupling between components, and testability. It aims to help developers create applications that are flexible, maintainable and performant.
A two-hour introduction to AngularJS, delivered at the Angular Meetup DC, on 11/13/13. Demo files available at https://github.com/xmlilley/ng-demos
Backbone.js helps structure you javascript application code in a scalable way.
In this keynote I demonstrate how to use it in a simple walk-through example, and discuss the advantages of using an MVC framework.
This document discusses the design and implementation of client libraries (CL) that mediate access to system services from client Java runtimes. It describes a CL design model including assumptions about services and clients. The model covers various capabilities like endpoint bindings, fault management, queries and discovery, asynchronous and streamed operations. It proposes a CL framework that implements a common API and addresses requirements like consistency, ease of use and purity. The framework would distribute standard proxy templates and delegates to build reusable CLs.
The document discusses using the Model-View-ViewModel (MVVM) pattern to maximize code reuse across platforms when building native apps. MVVM separates an app's view logic from its user interface code, allowing the view logic to be shared while keeping platform-specific UI code separate. This approach allows most of an app's model and view model code to be written once and shared across platforms like iOS and MacOS when using Xamarin. The document provides an example of how an internal support app called Halp was built with shared view models and platform-specific views for Mac and iPhone apps. Some challenges of applying MVVM in Cocoa are also discussed.
SpringOne Tour St. Louis - Serverless SpringVMware Tanzu
Serverless Spring allows developing Spring applications that can be deployed to serverless platforms. Spring Cloud Function enables developing Java functions as Spring beans that can be deployed to functions-as-a-service providers like AWS Lambda. This provides an event-driven programming model and scales costs based on usage. While cold starts can impact performance, serverless applications benefit from automatic scaling and reduced operational costs compared to always-on servers. Both serverless functions and containers will likely be used together with functions suitable for event-driven code and containers for synchronous request-driven components.
Paper by Paco Nathan (Mesosphere) and Girish Kathalagiri (AgilOne) presented at the PMML Workshop (2013-08-11) at KDD 2013 in Chicago http://kdd13pmml.wordpress.com/
The paper uses Open Data from the City of Chicago to build predictive models for crime based on seasonality, geolocation, and other factors. The modeling illustrates use of the Pattern library https://github.com/Cascading/pattern in Cascading to import PMML -- in this case, the use of model chaining to create ensembles.
This document discusses activities for optimizing a Siebel application after it goes into production, including monitoring performance with SARM, reviewing scripts for errors, and optimizing the database. SARM can monitor response times and traffic across different application areas. eScriptAdvisor and QueryAdvisor tools help review scripts and database queries. The document also provides an overview of setting up SARM monitoring and estimated timelines for scripting/repository reviews and further optimization work.
This document discusses the rendering process in Webkit and Chromium. It describes how layers are created and composited during rendering. It also covers the multi-process architecture in Chromium including the browser process, render process, and rendering threads. Key classes involved in inter-process communication like RenderViewHost and RenderView are introduced.
CartoSet is a new Open Source framework to develop great geospatial websites. Based on the experience by Vizzuality developing highly visual geospatial websites, like protectedplanet.net, CartoSet is a Ruby on Rails framework based on CartoDB. Despite the number of existing geoportal websites none of them allow the creation of highly customized interfaces. On the other hand libraries like geoRuby provide great foundation but still it takes too much time to develop nice websites. CartoSet is a FOSS framework in the middle, allowing great customization but providing an easy building block for agile developers.
The document discusses best practices for testing web applications. It recommends integrating automated testing into the development workflow and automating as many steps as possible. Specific techniques mentioned include using tools like RSpec, Cucumber, and Selenium for automated testing, and Jenkins for continuous integration. The document provides guidance on writing tests for the most used, frequently changing, data-handling, and failure-prone parts of the code. It also discusses techniques like code coverage analysis, testing across browsers and devices, load testing, and integrating testing with version control and issue tracking systems.
Project LASSO intends to deploy, improve and extend Linked Data (LD) infrastructure in three different use cases. Central feature of all use cases is a lookup service which helps to augment already existing, formalized knowledge with facts from the Linked Open Data (LOD) cloud. These three use cases are Semantic Desktop, Enterprise Collaboration and Inspiration Services. Currently available systems in all of these application domains are sparsely using data from the Semantic Web.
http://www.lassoproject.org/
Homer wants to drive from Athens, GA to NYC and have his favorite burger along the way. He downloads an app to find restaurants but realizes it is too complicated. The document then discusses creating a simpler app to help Homer find McDonald's restaurants on his route. It outlines a 4-step process: 1) finding relevant services, 2) integrating the services, 3) ensuring they work together, and 4) identifying issues when used. The rest of the document describes semantic techniques like RDF that could be used to build such an app.
Oredev 2013: Building Web Apps with Ember.jsJesse Cravens
Architected by Yehuda Katz (core Ruby on Rails contributor) and Tom Dale, Ember.js is a JavaScript MVC framework which evolved from Sproutcore 2.0. Seen as an alternative to other popular client MVC solutions like Backbone.js and Angular.js, Ember.js differs in that it provides 'Rails-like' defaults by convention to common coding patterns, intelligent memory management, built-in integration testing, and a next generation client side persistence solution called ember-data.
Join O'Reilly authors, Jesse Cravens and Thomas Brady, as they take the audience through the construction of a demo application: setting up client side models and exploring the use of various persistence solutions, using data bindings to live update the UI in response to data changes, and showing how Ember’s router manages application state.
Attendees should leave this session with an understanding of how to build and deploy Ember.js applications using various server side web frameworks and the latest in client-side build, package management, and workflow.
Covers the following topics:
- Build "Single Page Applications” with the following JS MVC frameworks: Angular.js, Ember.js, BackBone.js
- Node.js
- Trends in Web Application Development
- Architectural patterns
This document discusses why Gradle is a useful build tool. It provides automation, repeatability, and efficiency for software builds. Gradle models builds as a directed acyclic graph (DAG) of tasks, allowing any build process to be represented. It handles common conventions but also allows custom tasks when needed. Gradle aims to fully automate builds, make them repeatable across environments, and only re-execute tasks when necessary to improve efficiency.
Gradle is easy to use for building standard Java projects, but it’s rare to find a project that is completely standard. Whenever you have some custom requirement, you need to start using Gradle’s power features. It’s at that point that you can find yourself producing an unmaintainable mess and a hard-to-use build.
This talk will start by explaining Gradle’s model, which you need to understand if you want to retain control over your builds. I will then introduce you to some simple but effective guidelines that will ensure that your builds stay clean and effective.
Explains why software builds are important and what build tools should offer to users in terms of features. It also looks at how Gradle satisfies these requirements.
This document introduces Groovy, an object-oriented programming language for the Java Virtual Machine (JVM) that has a Java-like syntax. Groovy code compiles to Java bytecode, so it integrates seamlessly with Java and can be used for cross-platform scripting, testing, and application development. The document explains how to install Groovy and development tools, and provides examples of using Groovy in action.
Open source projects need community involvement to be sustainable. Successful projects fulfill user expectations, have a clear vision and values, and make contributing approachable. Both small, focused projects and those with large company backing can work, but all require engaging with and encouraging contributions from a diverse community.
Groovy & Grails for Spring/Java developersPeter Ledbrook
This document discusses Groovy and Grails for Java developers. It provides an overview of Groovy and Grails, including what Grails is (a rapid web application development framework for the JVM), its model-view-controller structure, and how it handles things like database access and internationalization out of the box. It also addresses how Grails integrates with tools like Gradle and how it can be used with different databases, including legacy databases. The document demonstrates some Groovy concepts and provides resources for learning more.
This document discusses how the Grails framework can help developers build applications for the modern web. It describes how Grails supports building rich client-side applications using technologies like HTML5, building for mobile with plugins, and connecting to social APIs. It also covers how Grails helps with challenges like scaling applications through the cloud, using NoSQL databases, and implementing CQRS patterns using event buses. The document provides examples of these concepts in action and outlines ideas for further enhancing the Grails platform.
This document discusses migrating applications to Cloud Foundry. It notes that new application types like mobile, social, and SaaS apps are being released early and often. It also discusses that applications are becoming more data intensive. Cloud Foundry is presented as an open Platform as a Service that allows deploying and scaling applications in seconds across multiple clouds without lock-in. It reviews core Cloud Foundry services and the developer experience. Challenges like caching, jobs, search, logging and configuration are discussed. Overall, it promotes Cloud Foundry as the application platform for the cloud era and encourages learning more and getting involved.
The document discusses new features and improvements in Grails 2.0, including enhanced plugin support, NoSQL integration, improved unit testing, static resource handling, GORM updates, and SQL database migration tools. It provides an overview of several new capabilities and summarizes key areas that received attention in the latest Grails release.
A look at the changing development landscape and how we may have to rearchitect our Grails applications.
Also looks at existing, new, or potential Grails features that can help navigate this new world order.
Cloud Foundry is an open platform as a service (PaaS) that handles infrastructure management and allows developers to focus on building applications. It supports multiple languages and frameworks. Cloud Foundry provides automatic provisioning of services, automatic configuration of connection settings, and automatic scaling of applications. Developers can deploy applications to Cloud Foundry hosted providers or run their own local instance for testing deployments. Cloud Foundry aims to make deployment and management of cloud applications simple by abstracting away underlying infrastructure.
Complete Guide to Advanced Logistics Management Software in Riyadh.pdfSoftware Company
Explore the benefits and features of advanced logistics management software for businesses in Riyadh. This guide delves into the latest technologies, from real-time tracking and route optimization to warehouse management and inventory control, helping businesses streamline their logistics operations and reduce costs. Learn how implementing the right software solution can enhance efficiency, improve customer satisfaction, and provide a competitive edge in the growing logistics sector of Riyadh.
TrustArc Webinar: Consumer Expectations vs Corporate Realities on Data Broker...TrustArc
Most consumers believe they’re making informed decisions about their personal data—adjusting privacy settings, blocking trackers, and opting out where they can. However, our new research reveals that while awareness is high, taking meaningful action is still lacking. On the corporate side, many organizations report strong policies for managing third-party data and consumer consent yet fall short when it comes to consistency, accountability and transparency.
This session will explore the research findings from TrustArc’s Privacy Pulse Survey, examining consumer attitudes toward personal data collection and practical suggestions for corporate practices around purchasing third-party data.
Attendees will learn:
- Consumer awareness around data brokers and what consumers are doing to limit data collection
- How businesses assess third-party vendors and their consent management operations
- Where business preparedness needs improvement
- What these trends mean for the future of privacy governance and public trust
This discussion is essential for privacy, risk, and compliance professionals who want to ground their strategies in current data and prepare for what’s next in the privacy landscape.
Quantum Computing Quick Research Guide by Arthur MorganArthur Morgan
This is a Quick Research Guide (QRG).
QRGs include the following:
- A brief, high-level overview of the QRG topic.
- A milestone timeline for the QRG topic.
- Links to various free online resource materials to provide a deeper dive into the QRG topic.
- Conclusion and a recommendation for at least two books available in the SJPL system on the QRG topic.
QRGs planned for the series:
- Artificial Intelligence QRG
- Quantum Computing QRG
- Big Data Analytics QRG
- Spacecraft Guidance, Navigation & Control QRG (coming 2026)
- UK Home Computing & The Birth of ARM QRG (coming 2027)
Any questions or comments?
- Please contact Arthur Morgan at [email protected].
100% human made.
AI Changes Everything – Talk at Cardiff Metropolitan University, 29th April 2...Alan Dix
Talk at the final event of Data Fusion Dynamics: A Collaborative UK-Saudi Initiative in Cybersecurity and Artificial Intelligence funded by the British Council UK-Saudi Challenge Fund 2024, Cardiff Metropolitan University, 29th April 2025
https://alandix.com/academic/talks/CMet2025-AI-Changes-Everything/
Is AI just another technology, or does it fundamentally change the way we live and think?
Every technology has a direct impact with micro-ethical consequences, some good, some bad. However more profound are the ways in which some technologies reshape the very fabric of society with macro-ethical impacts. The invention of the stirrup revolutionised mounted combat, but as a side effect gave rise to the feudal system, which still shapes politics today. The internal combustion engine offers personal freedom and creates pollution, but has also transformed the nature of urban planning and international trade. When we look at AI the micro-ethical issues, such as bias, are most obvious, but the macro-ethical challenges may be greater.
At a micro-ethical level AI has the potential to deepen social, ethnic and gender bias, issues I have warned about since the early 1990s! It is also being used increasingly on the battlefield. However, it also offers amazing opportunities in health and educations, as the recent Nobel prizes for the developers of AlphaFold illustrate. More radically, the need to encode ethics acts as a mirror to surface essential ethical problems and conflicts.
At the macro-ethical level, by the early 2000s digital technology had already begun to undermine sovereignty (e.g. gambling), market economics (through network effects and emergent monopolies), and the very meaning of money. Modern AI is the child of big data, big computation and ultimately big business, intensifying the inherent tendency of digital technology to concentrate power. AI is already unravelling the fundamentals of the social, political and economic world around us, but this is a world that needs radical reimagining to overcome the global environmental and human challenges that confront us. Our challenge is whether to let the threads fall as they may, or to use them to weave a better future.
AI EngineHost Review: Revolutionary USA Datacenter-Based Hosting with NVIDIA ...SOFTTECHHUB
I started my online journey with several hosting services before stumbling upon Ai EngineHost. At first, the idea of paying one fee and getting lifetime access seemed too good to pass up. The platform is built on reliable US-based servers, ensuring your projects run at high speeds and remain safe. Let me take you step by step through its benefits and features as I explain why this hosting solution is a perfect fit for digital entrepreneurs.
Mobile App Development Company in Saudi ArabiaSteve Jonas
EmizenTech is a globally recognized software development company, proudly serving businesses since 2013. With over 11+ years of industry experience and a team of 200+ skilled professionals, we have successfully delivered 1200+ projects across various sectors. As a leading Mobile App Development Company In Saudi Arabia we offer end-to-end solutions for iOS, Android, and cross-platform applications. Our apps are known for their user-friendly interfaces, scalability, high performance, and strong security features. We tailor each mobile application to meet the unique needs of different industries, ensuring a seamless user experience. EmizenTech is committed to turning your vision into a powerful digital product that drives growth, innovation, and long-term success in the competitive mobile landscape of Saudi Arabia.
Special Meetup Edition - TDX Bengaluru Meetup #52.pptxshyamraj55
We’re bringing the TDX energy to our community with 2 power-packed sessions:
🛠️ Workshop: MuleSoft for Agentforce
Explore the new version of our hands-on workshop featuring the latest Topic Center and API Catalog updates.
📄 Talk: Power Up Document Processing
Dive into smart automation with MuleSoft IDP, NLP, and Einstein AI for intelligent document workflows.
DevOpsDays Atlanta 2025 - Building 10x Development Organizations.pptxJustin Reock
Building 10x Organizations with Modern Productivity Metrics
10x developers may be a myth, but 10x organizations are very real, as proven by the influential study performed in the 1980s, ‘The Coding War Games.’
Right now, here in early 2025, we seem to be experiencing YAPP (Yet Another Productivity Philosophy), and that philosophy is converging on developer experience. It seems that with every new method we invent for the delivery of products, whether physical or virtual, we reinvent productivity philosophies to go alongside them.
But which of these approaches actually work? DORA? SPACE? DevEx? What should we invest in and create urgency behind today, so that we don’t find ourselves having the same discussion again in a decade?
Spark is a powerhouse for large datasets, but when it comes to smaller data workloads, its overhead can sometimes slow things down. What if you could achieve high performance and efficiency without the need for Spark?
At S&P Global Commodity Insights, having a complete view of global energy and commodities markets enables customers to make data-driven decisions with confidence and create long-term, sustainable value. 🌍
Explore delta-rs + CDC and how these open-source innovations power lightweight, high-performance data applications beyond Spark! 🚀
Role of Data Annotation Services in AI-Powered ManufacturingAndrew Leo
From predictive maintenance to robotic automation, AI is driving the future of manufacturing. But without high-quality annotated data, even the smartest models fall short.
Discover how data annotation services are powering accuracy, safety, and efficiency in AI-driven manufacturing systems.
Precision in data labeling = Precision on the production floor.
The Evolution of Meme Coins A New Era for Digital Currency ppt.pdfAbi john
Analyze the growth of meme coins from mere online jokes to potential assets in the digital economy. Explore the community, culture, and utility as they elevate themselves to a new era in cryptocurrency.
Increasing Retail Store Efficiency How can Planograms Save Time and Money.pptxAnoop Ashok
In today's fast-paced retail environment, efficiency is key. Every minute counts, and every penny matters. One tool that can significantly boost your store's efficiency is a well-executed planogram. These visual merchandising blueprints not only enhance store layouts but also save time and money in the process.
Artificial Intelligence is providing benefits in many areas of work within the heritage sector, from image analysis, to ideas generation, and new research tools. However, it is more critical than ever for people, with analogue intelligence, to ensure the integrity and ethical use of AI. Including real people can improve the use of AI by identifying potential biases, cross-checking results, refining workflows, and providing contextual relevance to AI-driven results.
News about the impact of AI often paints a rosy picture. In practice, there are many potential pitfalls. This presentation discusses these issues and looks at the role of analogue intelligence and analogue interfaces in providing the best results to our audiences. How do we deal with factually incorrect results? How do we get content generated that better reflects the diversity of our communities? What roles are there for physical, in-person experiences in the digital world?
Designing Low-Latency Systems with Rust and ScyllaDB: An Architectural Deep DiveScyllaDB
Want to learn practical tips for designing systems that can scale efficiently without compromising speed?
Join us for a workshop where we’ll address these challenges head-on and explore how to architect low-latency systems using Rust. During this free interactive workshop oriented for developers, engineers, and architects, we’ll cover how Rust’s unique language features and the Tokio async runtime enable high-performance application development.
As you explore key principles of designing low-latency systems with Rust, you will learn how to:
- Create and compile a real-world app with Rust
- Connect the application to ScyllaDB (NoSQL data store)
- Negotiate tradeoffs related to data modeling and querying
- Manage and monitor the database for consistently low latencies
9. “The database is just a
detail that you don’t need
to figure out right away”
NO DB - May 2012
Robert “Uncle Bob” Martin
Wednesday, 11 September 13
10. Domain-driven Design
Wednesday, 11 September 13
Not the same as domain classes first
Model your domain first without integration concerns
It’s in operation at all stages of development, not just up-front
Reminded of a problem domain related to managing meetings and attendees - focused so
hard on the DB tables that the program logic was a dog’s breakfast.
12. from Wikmedia Commons
Wednesday, 11 September 13
We can use the model to calculate useful information, such as how long it takes for a ball to
roll down a hill
The model only includes significant complexity - ignores the rest
Formula 1 makes use of CFD because they need it at the bleeding edge
13. Remember: you’re
trying to solve a
business problem
Wednesday, 11 September 13
You need to understand the problem domain
The model needs to reflect that understanding
Gradle is a great example of a rich, evolving, and useful domain model
15. An example - reporting
ReportController ReportService
Jasper
Wednesday, 11 September 13
High volume transactional web site, optimised for write
Everything was OK at this point
16. An example - reporting
ReportController ReportService
Jasper + HTML reports with paging
Breakage!
Wednesday, 11 September 13
The logic for building reports was complex
Who is responsible for the paging? The HTML generation?
Where is the state kept? The service? A domain class?
17. An example - reporting
PublisherReport
HTTP
Request
Summary
Table 1
Table 2
...
Table N
It’s a command object!
Wednesday, 11 September 13
Let’s try again
The logic for building the report and pagination is in the PublisherReport class
18. An example - reporting
class ReportController {
def print(PublisherReport report) {
JasperRenderer.render report
}
def json(PublisherReport report) {
render report as JSON
}
...
}
Wednesday, 11 September 13
The controller is now very thin
The report can support parameters for sub-reports etc.
The domain model is embodied in the command object
21. What is my domain?
Domain Model
HTTP Database
? ?
Wednesday, 11 September 13
Always ask yourself this question throughout life of project
And is it closer to the user’s perspective or the persistence model? Or neither?
Former argues for a model based on command objects, the latter based on domain classes.
23. Wednesday, 11 September 13
Query model much more complex
Multiple timelines
Conversation threads
Retweets
24. Wednesday, 11 September 13
So working from your domain first is a good thing
And remember that different contexts have potentially different views of the model, i.e. the
user/client, persistence, other system components
DDD doesn’t preclude the CRUD/service-based architecture
So what are the driving forces behind architecture beyond the model?
28. Java
Wednesday, 11 September 13
Remember applets?
Liked the approach (particularly WebStart) but not often used. The browser was a delivery
mechanism, not a platform
29. It’s all about the
Javascript!
AngularJS
Knockout.js
Backbone.js
Underscore.js
jQuery.js
Moustache
Wednesday, 11 September 13
The browser is now a platform for rich applications
But how do these impact the Grails app?
The whole process of building a page on each request goes out the window
30. Google I/O 2012
Android activations to date
400 million
Apple WWDC 2012
iOS devices sold to date
365 million
Wednesday, 11 September 13
Let’s not forget Firefox OS
Lots of people potentially hitting a site at any one time!
Typical Grails architecture may struggle to handle the load (OpenSessionInViewInterceptor,
transactions, GSPs, thread-per-request)
31. An aside
If the whole Java client thing had worked out, would
you use it for every web application you wrote?
Would you use it for Wikipedia?
Wednesday, 11 September 13
Before jumping onto the whole “single-page app” bandwagon, work out whether it’s
appropriate for your app
32. Shared templates
HandlebarsViewResolver
or
<hbt:render template="..."/>
GSP
Wednesday, 11 September 13
Not much to talk about on client architecture, but template reuse is something to think about
View resolver only makes sense if client-side templates are complete views
hbt is a fictitious tag namespace representing a plugin based on Handlebars for Java
33. AJAX + JSON endpoints
enabler for async
Wednesday, 11 September 13
Rich UIs don’t talk HTML - use JSON endpoints (aka “REST”)
Asset delivery via Resources or asset-pipeline plugins
More scope for asynchronicity, since no wait for full page update
Grails 2.3 introduces some nice features for REST
34. What’s the need for
SiteMesh & GSP then?
Wednesday, 11 September 13
Difficult to impossible to remove these currently
Grails 3 will finally extricate them, allowing you to remove them from your project
35. Aside 2
Don’t be afraid to use Ruby/Node.js tooling
Grunt
Bower
Yeoman
Compass/SASS
Wednesday, 11 September 13
If you go for a heavy Javascript UI, consider Ruby/Node.js tooling
Generally richer than Java-based tooling
36. Async
for scalability
Wednesday, 11 September 13
To solve the problem of dealing with large number of concurrent requests
Without adding lots more servers
37. Grails Promise API
import static grails.async.Promises.*
class ReportController {
def print(PublisherReport report) {
task {
// Expensive report creation here
}
}
...
}
Wednesday, 11 September 13
We can now return Promise instances from actions
The expensive task no longer blocks the request thread, but...
38. Controller
Request
Thread Pool
Worker
Thread Pool
HTTP
Request
Offload
Task
Return thread
Wednesday, 11 September 13
The request threads are now free, but burden is on worker thread pool
If all worker tasks are synchronous, have we gained scalability?
In cases where just a few URLs are blocking for long(ish) periods of time, yes (kind of)
But otherwise, now bottleneck is on worker thread pool
39. Make efficient use of
server resources
Wednesday, 11 September 13
Async all the way through - Grails Promises, GPars, messaging
Remember that some things are inherently synchronous (think Fibonacci)
41. Async controllers
import static grails.async.Promises.*
class ReportController {
def tagService
def postService
def home() {
tasks tags: tagService.tagsWithCount()
trends: tagService.trendingTags()
timeline: postService.timeline(
params.userId)
}
...
}
Wednesday, 11 September 13
tagService and postService are both async
The model values are evaluated in parallel
This is a PromiseMap - view rendered only when all map values evaluated
42. Async controllers
import static grails.async.Promises.*
class TagService {
def remoteTagService
def tagsWithCount() {
task {
remoteTagService.tagsWithCount()
}
}
...
}
Wednesday, 11 September 13
You can also use @DelegateAsync to create async version of synchronous service
Currently not Grails’ sweet spot due to the solution’s lightweight nature...
...perhaps makes sense with Grails 3?
43. Rich domain model +
Promises API/GPars?
Wednesday, 11 September 13
Fully async backend
A good domain model makes it easy to identify parallelisable work
No simple solutions though! Concurrency is still a tricky problem.
44. GPars supports
• Dataflow
• Communicating Sequential Processes (CSP)
• Actor model
Wednesday, 11 September 13
50. Spring Integration
MyController
MyService
message
DB Persister
SplitterJMS Twitter
A channel (pipe)
Message endpoint
Wednesday, 11 September 13
Based on Enterprise Integration Patterns (filters & pipes)
Many options for routing and transforming messages
Logging adapters and wire tapping for debug
51. Spring Integration Groovy DSL
def builder = new IntegrationBuilder()
def ic = builder.doWithSpringIntegration {
messageFlow("flow") {
filter { it == "World" }
transform(inputChannel: "transformerChannel") {
"Hello " + it
}
handle { println "**** $it ****" }
}
}
ic.send "flow.inputChannel", "World"
ic.send "transformerChannel", "Earth"
Wednesday, 11 September 13
57. Event bus - (grails-)events
Event bus (Reactor)
PluginService
publish
PluginUpdateService YourListener
Wednesday, 11 September 13
58. Event bus - (grails-)events
Event bus (Reactor)
Browser
RabbitMQ (pending)
events-push plugin
Wednesday, 11 September 13
59. Event bus - (grails-)events
class PluginService {
def publish(PluginDetails info) {
...
event "pluginUpdate", info
}
}
class PluginUpdateService {
@Selector
def pluginUpdate(PluginDetails info) {
...
}
}
Wednesday, 11 September 13
with spring-events plugin
60. AppEvents.groovy
includes = ["push"]
doWithReactor = {
reactor("grailsReactor") {
ext "browser", ["pluginUpdate"]
}
}
Wednesday, 11 September 13
In grails-app/conf
Can control which events are propagated to the browser
The “push” include sets up a
62. A CQRS architecture
Updates
Views
Concurrency
via event bus
Store changes
Separate data stores
for queries
Wednesday, 11 September 13
Why? Updates and querying often have different data requirements.
For example, Lanyrd use Redis structured data support
All read databases can be rebuilt from master events DB
CQRS designed for scale