integrating magnolia with spring framework using blossom
TRANSCRIPT
![Page 1: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/1.jpg)
Integrating Magnolia with Spring Framework using Blossomusing Blossom
Magnolia is a registered trademark used by permission
![Page 2: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/2.jpg)
Speaker Qualifications
Magnolia is a registered trademark used by permission
![Page 3: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/3.jpg)
Why use Spring?Why use Spring?
Magnolia is a registered trademark used by permission
![Page 4: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/4.jpg)
Spring is the enabler
Magnolia is a registered trademark used by permission
• Spring is a java based application framework• Focus on web applications and enterprise applications• One of the most popular frameworks in the java space
• Pioneered a broad feature set• Lightweight container• Dependency Injection (DI)• Aspect Oriented Programming (AOP)• Enterprise Service Abstraction
![Page 5: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/5.jpg)
Spring is everywhere
Magnolia is a registered trademark used by permission
• 2.5 million developers use Spring (two thirds!)• More than half of the Fortune 500 power their Java
applications with Spring• More than 70 percent of enterprises cite improved
productivity, faster project completion, improved portability and application quality as reasons for using Spring
![Page 6: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/6.jpg)
Spring is comprehensive
Magnolia is a registered trademark used by permission
• Spring Framework consists of 20 optional modules• Spring Web MVC• Spring WebFlow• Spring Security• Spring WebServices• ...
• Most new technology come with Spring integrations• Estimated 70% of Java based platforms and middleware
provides embedded support for Spring
![Page 7: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/7.jpg)
How does Blossom integrate Spring?
Magnolia is a registered trademark used by permission
• Integrates Spring into the module mechanism• Module Lifecycle• Integrates with Spring Web MVC
• And additional bridging
![Page 8: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/8.jpg)
Magnolia is a registered trademark used by permission
Model View Controller Pattern
Controller
Model
View
The controller receives input, performs requested operations and provides the resulting model. The view is responsible for providing the UI representation of the model.
Keeps business logic separated from presentation.
![Page 9: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/9.jpg)
Spring Web MVC
Annotation Based ControllerAnnotation Based Controller
Magnolia is a registered trademark used by permission
@Controllerpublic class BookController {
@Autowired private BookStoreWebService webService;
@RequestMapping("/book") public ModelAndView handleRequest(@RequestParam("id") int bookId) { ModelAndView mav = new ModelAndView("book.jsp"); mav.addAttribute("book", webService.getBook(bookId)); return mav; }}
http://acmebookstore.com/book?id=1327
![Page 10: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/10.jpg)
How can Spring Web MVC fit in Magnolia?
Magnolia is a registered trademark used by permission
Template Paragraph
Paragraph
![Page 11: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/11.jpg)
Blossom managed templates and paragraphs
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
Templates and paragraphs are decoupled from view rendering
![Page 12: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/12.jpg)
Pre-executing a controller (paragraph)
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
C
The pre-executed controller can choose to skip page rendering by sending a redirect or directly render something on its own
![Page 13: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/13.jpg)
Pre-executing a controller (paragraph)
Magnolia is a registered trademark used by permission
TemplateC
M
V
ParagraphC
M
V
ParagraphC
M
V
C
<form><blossom:pecid-input /><input type=”text” name=”email” />...</form>
Outputs:
<form><input type=”hidden” name=”_pecid”
value=”ff6cefa6-d958-47b1-af70-c82a414f17e1”/><input type=”text” name=”email” />...</form>
![Page 14: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/14.jpg)
The Blossom Programming Model
Magnolia is a registered trademark used by permission
• Based on annotations• Non-intrusive• Spring centric approach• The controller is the template• The controller is the paragraph• and they’re automatically available in Magnolia• Dialogs are created programmatically
![Page 15: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/15.jpg)
Templates
Magnolia is a registered trademark used by permission
@Controller@Template("Two Columns")public class TwoColumnsTemplate {
@RequestMapping("/twoColumns") public ModelAndView handleRequest() { return new ModelAndView("twoColumnsTemplate.jsp"); }}
![Page 16: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/16.jpg)
Paragraphs
Magnolia is a registered trademark used by permission
@Controller@Paragraph(value = "Simple paragraph", dialog=”simple-dialog”)@ParagraphDescription("Simple paragraph that renders a JSP")public class SimpleParagraph {
@RequestMapping("/simple") public ModelAndView render() { return new ModelAndView("simpleParagraph.jsp"); }}
![Page 17: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/17.jpg)
Blossom managed dialogs
Magnolia is a registered trademark used by permission
• Dialogs are created using code, not configuration• Based on annotations• Detected and automatically available in Magnolia• Validation of dialog input
![Page 18: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/18.jpg)
Blossom managed dialogs
Magnolia is a registered trademark used by permission
@DialogFactory("page-dialog")public class PageDialog {
@TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addEdit("title", "Title", "Title of this page"); tab.addCheckbox("navigation", "Navigation", "Include page in menu"); }
@TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("author", "Author", ""); tab.addEdit("keywords", "Keywords", "Keywords for this page"); tab.addEdit("description", "Description", "Concise page explanation"); }}
![Page 19: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/19.jpg)
Dialog inheritance
Magnolia is a registered trademark used by permission
public abstract class BaseDialog { @TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("keywords", "Keywords", "Keywords for this page"); tab.addEdit("description", "Description", "Concise page explanation"); }}
@DialogFactory("news-properties")@TabOrder("Content", “Meta”)public class NewsPageDialog extends BaseDialog { @TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addEdit("subject", "Subject", "News subject"); tab.addDate("date", "Publication Date", "Date of publication"); tab.addFckEditor("text", "Text", ""); tab.addFile("image", "Image", ""); }}
![Page 20: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/20.jpg)
Dialog validation
Magnolia is a registered trademark used by permission
@DialogFactory("page-properties")public class PagePropertiesDialog {
@TabFactory("Meta") public void metaTab(TabBuilder tab) { tab.addEdit("description", "Description", "A concise page explanation"); }
@TabValidator("Meta") public void validateMetaTab(DialogTab tab) { if (tab.getSub("description").getValue().length() < 20) AlertUtil.setMessage("Meta description needs to be longer"); }}
![Page 21: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/21.jpg)
Paragraphs can create their own dialogs
Magnolia is a registered trademark used by permission
@Controller@Paragraph("Text and Image")public class TextAndImageParagraph {
@RequestMapping("/textAndImage") public ModelAndView render() { return new ModelAndView("textAndImage.jsp"); }
@TabFactory("Content") public void contentTab(TabBuilder tab) throws RepositoryException { tab.addFckEditor("text", "Text", ""); tab.addFile("image", "Image", ""); }}
![Page 22: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/22.jpg)
Templates can contain dialog factories
Magnolia is a registered trademark used by permission
@Controller@Template("Section")public class SectionTemplate {
@RequestMapping("/section") public ModelAndView handleRequest() { return new ModelAndView("sectionTemplate.jsp"); }
@DialogFactory("section-properties") public void propertiesDialog(DialogBuilder dialog) { TabBuilder contentTab = dialog.addTab("Content"); contentTab.addEdit("title", "Title", "Title of this page"); TabBuilder metaTab = dialog.addTab("Meta"); metaTab.addEdit("description", "Description", "Page explanation"); }}
![Page 23: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/23.jpg)
Dialogs be dynamically populated
Magnolia is a registered trademark used by permission
@Controller@Paragraph(“Book”)public class BookParagraph {
@Autowired private BookStoreWebService webService;
@RequestMapping("/book") public ModelAndView handleRequest() { Content content = MgnlContext.getAggregationState().getCurrentContent(); String bookId = content.getNodeData("id").getString(); ModelAndView mav = new ModelAndView("book.jsp"); mav.addAttribute("book", webService.getBook(bookId)); return mav; }
@TabFactory("Content") public void contentTab(TabBuilder tab) { tab.addSelect("id", "Book", "Select the book", webService.getBooks()); }}
![Page 24: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/24.jpg)
View Technologies
Magnolia is a registered trademark used by permission
• Best of both worlds approach• Magnolia and Spring constructs work side by side• Built-in support for Freemarker and JSP• Everything Spring supports work out-of-the-box, such as
JSON, PDF, XML and RSS
![Page 25: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/25.jpg)
Ticket Privatresor AB (www.ticket.se)
Magnolia is a registered trademark used by permission
One of the largest online travel agencies in Scandinavia
•Numerous integrations via web services•Booking and reservation of plane tickets, hotel rooms, rental cars etc.•Mid office sales applications•Online payment integrations•Uses Spring Remoting to communicate with dedicated backends•Spring WebFlow conversations running embedded in paragraphs
![Page 26: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/26.jpg)
Summary
Magnolia is a registered trademark used by permission
• Spring centric approach based on annotations• Novel features like pre-execution and dialog validation• Code over configuration• Versioning• Collaboration
• Enables access to Spring features and technologies• Directly in templates, paragraphs and dialogs
![Page 27: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/27.jpg)
Project Goal
Magnolia is a registered trademark used by permission
• Make Magnolia the CMS of choice for Spring developers• Make it easier to take advantage of everything that Spring
has to offer
• What comes next?• Tell us about your Spring integration needs!• Your feedback matters!
![Page 28: Integrating Magnolia with Spring Framework using Blossom](https://reader034.vdocuments.site/reader034/viewer/2022042607/55a34c821a28ab496e8b471e/html5/thumbnails/28.jpg)
Questions?
Magnolia is a registered trademark used by permission