SlideShare une entreprise Scribd logo
1  sur  18
Télécharger pour lire hors ligne
Apache James:
The Java Apache Mail Enterprise Server

              Hupa:
      The James WebMail client




                         Manuel Carrasco Moñino
                                manolo@apache.org
                                        @dodotis
About me
●   Apache James
    ●   HUPA
●   GWT:
    ●   Gquery & Gquery-plugins
    ●   GwtExporter
    ●   GwtUpload
    ●   Chronoscope
●   Jenkins
    ●   Performance plugin
    ●   Emma plugin
●   Linux
    ●   LXP a light and visual window manager based on icewm
Contents
●
    Introduction to the James Project
       –   Components
       –   What is new in the release 3.0-beta3
●
    Hupa
       –   Architecture
       –   What is GWT, MVP, How to Test
       –   Hupa Status
       –   Hupa Roadmap
●
    Becoming an open-source contributor.
What is James?


“The Apache James Project delivers a rich set of
  open source modules and libraries, written in
  Java, related to Internet mail communication
  which build into an advanced enterprise mail
                      server”.
Server Components
●
    Server is the main project in James and
    delivers a full featured modular mail-server
    composed by:
       –   SMTP, LMTP
       –   POP3
       –   IMAP4 (James-v3)
       –   NNTP (James-v2)
       –   Queue/Spool
       –   Mail Storage
       –   FetchMail
Projects
James is divided in projects, so as they can be used in other products easily:
●   Server: Enterprise mail server, it depends on other modules to be built.
●   Protocols: framework for mail protocols implementations (smtp, lmtp).
●   IMAP: flexible codec for IMAP and command processors .
●   MailBox: a library providing a flexible Mailbox storage accessible by mail protocols
    (Imap, pop, smtp), supports maildir, openjpa, hbase, jackrabbit.
●   Mime4J: parser for mime messages like javax.mail but more tolerant.
●   Mailets: email processing engine, it defines and implements a Mailet-API.
●   JSieve [*]: Java Framework implementation of the Sieve mail filtering language.
●   JSPF [*]: Java Sender Policy Framework implementation.
●   JDKIM [*]: Java Framework Implementation for DomainsKeys identification Mail.
●   MPT: Mail Protocol Tester (testing of ASCII based line protocols).
●   PostAge: application for generating mail traffic on mail servers.
●   HUPA: Hupa is an IMAP-based RIA Webmail written in GWT.

    [*] These frameworks provide mailet implementations to make easier to integrate with James Server
Advantages of using James
●   Pure java implementation.
●   Performance in mind.
●   Test based developing: TDD
●   Open-Source components.
●   Easy to Build (maven).
●   Easy to Install in any platform.
●   Easy to Use, Manage, and Integrate (APIs).
●   Easy email processing: Mailets and Matchers
●   Active developing and mailing lists.
Whats new in James-3beta
●   Imap
●   Mailboxes (maildir, hbase, openjpa, jcr)
●   More ddbb are supported (ie: Oracle)
●   Better logging
●   JMX management
●   Performance (Sockets, storage, etc)
●   NIO support (Using Netty)
●   Easy writing SMTP extensions, filters, etc.
●   NNTP not supported any more, it is left in v2 because
    it is not widely used.
HUPA
(Pure Java RIA Mail Client)
Hupa Architecture

             Pure JavaScript




             Pure Java




             Any server (James, Gmail ...)
What is GWT

  Java to Javascript Compiler and Optimizer




It is a full SDK.               Not a Js Framework
                                Not a Js Library
Why a compiler? And why Java?
●   A high level language allows that the developer doesn't get lost with
    low level details (DOM, Ajax, Cross domain, Compression, Obfuscation,
    Dependencies ...)
●   Java syntax is closed to JS, so in theory the Java to Js compiler was
    easier to develop
●   Huge Java ecosystem: IDE, re-factoring, Debug, Code reuse, Maven,
    TDD, CI …
●   Patterns, MVP, RPC, Pojos …
●   Type checking, reduce errors.
●   Separate code maintenance from the effectiveness of the executable.
●   Normally the compiler would produce better js code that the code we
    could write by hand (less code, compressed, obfuscated, remove
    unused stuff, etc).
What does the SDK provide
●
    Generators, Compiler, Linker, Optimizer, Obfuscater: one
    compiled js per browser (like c++ asm per processor).
●
    Client side libraries: DOM, XML, JSON, RPC, RF, I18n, MVP,
    Widgets
●
    Server libraries: RPC, RF
●
    Eclipse plugin
●
    Multi-browser Dev mode
●
    Unit testing and Debug tools.
●
    Performance tools (speed tracer)
●
    Compiler Statistics
●
    Everything is open sourced (Apache v2.0)
Java Code (IDE)

                             Java Server             Java Client
                                Side                    Side



Toolkit (SDK)

                                    GWT development                         GWT compiler
                                    Debug/Hosted/Test                     Compiler/Optimizer
   GWT server                                                              JRE Emulation
   libs RPC/RF                                                             Libs & Widgets

                                  Test Runner    FF/IE/Ch-Plugin



   3ª Party                                                                         3ª Party
  Server libs                                                                      Server libs
                                                     JavaScript Bundles
                    J-Byte Code
                                                     (css, sprite)


                      RPC/RF/JSON/XML                   RF/JSON/XML       Other Backends
   JVM App-Server                          Browser
                                                                          (php, ruby, ...)
MVP: Model View Presenter




                ●   Define the View Interface and
                    decouple the Presenter so as it do not
                    need any browser specific stuff.
                ●   Testing of the view is not necessary
                    since we use tested components
                    (widgets)
                ●   Fast developing using TDD and
                    MockView run in JVM instead of
                    browser using Gin and Guice for DI
                    (minimize usage of GWTTestCase).
                ●   EventBus facilitate decoupling of
                    presenters.
                ●   The Dispatcher (Command pattern) or
                    RF simplifies the transport layer and
                    data binding.
Hupa, Status
●   Time ago, Hupa was a reference of a GWT MVP application.
●   Hupa MVP design is based of a set of libraries available for
    gwt a couple of years ago:
       –   Gwt-presenter: for the 'MVP' and 'EventBus' patterns
       –   Gwt-dispatch: for the 'Command' pattern
       –   Gin + Guice: for dependency injection.
●   Hupa was developed before GWT-2.0 was released, when
    LayoutPanels, uibinders, Cells, etc. were not available.
●   Many of the libraries which Hupa are using are unmaintained
    or have an equivalent feature in modern GWT.
Hupa, RoadMap
●   Replace gwt-dispatch by RequestFactory
●   Replace gwt-presenter with the available stuff in GWT-2.4
●   Remove gwt-incubator dependency in favor of CellTable
    and CellTree
●   Use LayoutPanels instead of css workarounds
●   Use gwt-decorated panels
●   Use gQuery in client side to enhance and simply views
●   Implement new features: Contact management, Oauth,
    LocalStorage, Gadgets, etc.
Become an opensource
                 contributor
●   Checkout the code.
●   Play with it, test it, find bugs.
●   Open JIRA tickets reporting problems, asking for improvements.
●   Attach patches which fix bugs, add new features, improve performance,
    contribute to readability, etc. Don't forget unit Tests.
●   Subscribe to mailing lists, and participate asking and answering
    questions.
●   Committers will appreciate your work and will propose you to be part of
    the team.
●   Other way you can utilize is to propose new projects: Apache incubator,
    labs, GSOC, etc. Find a mentor or use mailing-lists for that.

Contenu connexe

Tendances

Elegant Systems Integration w/ Apache Camel
Elegant Systems Integration w/ Apache CamelElegant Systems Integration w/ Apache Camel
Elegant Systems Integration w/ Apache CamelPradeep Elankumaran
 
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...Alexandre Morgaut
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQJames Carr
 
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...StreamNative
 
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...StreamNative
 
Apache Kafka - Martin Podval
Apache Kafka - Martin PodvalApache Kafka - Martin Podval
Apache Kafka - Martin PodvalMartin Podval
 
Scaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsScaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsGavin Roy
 
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...StreamNative
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosebiznext
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQAll Things Open
 
Tomcat Optimisation & Performance Tuning
Tomcat Optimisation & Performance TuningTomcat Optimisation & Performance Tuning
Tomcat Optimisation & Performance Tuninglovingprince58
 
1. Core Features of Apache RocketMQ
1. Core Features of Apache RocketMQ1. Core Features of Apache RocketMQ
1. Core Features of Apache RocketMQ振东 刘
 
Kafka Technical Overview
Kafka Technical OverviewKafka Technical Overview
Kafka Technical OverviewSylvester John
 
Deep dive into Apache Kafka consumption
Deep dive into Apache Kafka consumptionDeep dive into Apache Kafka consumption
Deep dive into Apache Kafka consumptionAlexandre Tamborrino
 
High Performance Drupal Sites
High Performance Drupal SitesHigh Performance Drupal Sites
High Performance Drupal SitesAbayomi Ayoola
 

Tendances (20)

Elegant Systems Integration w/ Apache Camel
Elegant Systems Integration w/ Apache CamelElegant Systems Integration w/ Apache Camel
Elegant Systems Integration w/ Apache Camel
 
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...
State of the art: Server-Side JavaScript - WebWorkersCamp IV - Open World For...
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 
High powered messaging with RabbitMQ
High powered messaging with RabbitMQHigh powered messaging with RabbitMQ
High powered messaging with RabbitMQ
 
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...
Using Apache Pulsar as a Modern, Scalable, High Performing JMS Platform - Pus...
 
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
Introducing Kafka-on-Pulsar: bring native Kafka protocol support to Apache Pu...
 
Apache Kafka - Martin Podval
Apache Kafka - Martin PodvalApache Kafka - Martin Podval
Apache Kafka - Martin Podval
 
Spring RabbitMQ
Spring RabbitMQSpring RabbitMQ
Spring RabbitMQ
 
Scaling PostgreSQL with Skytools
Scaling PostgreSQL with SkytoolsScaling PostgreSQL with Skytools
Scaling PostgreSQL with Skytools
 
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
Introducing HerdDB - a distributed JVM embeddable database built upon Apache ...
 
Scala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macrosScala io2013 : Our journey from UML/MDD to Scala macros
Scala io2013 : Our journey from UML/MDD to Scala macros
 
Messaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQMessaging Standards and Systems - AMQP & RabbitMQ
Messaging Standards and Systems - AMQP & RabbitMQ
 
XMPP Academy #2
XMPP Academy #2XMPP Academy #2
XMPP Academy #2
 
Tomcat Optimisation & Performance Tuning
Tomcat Optimisation & Performance TuningTomcat Optimisation & Performance Tuning
Tomcat Optimisation & Performance Tuning
 
1. Core Features of Apache RocketMQ
1. Core Features of Apache RocketMQ1. Core Features of Apache RocketMQ
1. Core Features of Apache RocketMQ
 
Ruby On Rails Ecosystem
Ruby On Rails EcosystemRuby On Rails Ecosystem
Ruby On Rails Ecosystem
 
Kafka Technical Overview
Kafka Technical OverviewKafka Technical Overview
Kafka Technical Overview
 
Deep dive into Apache Kafka consumption
Deep dive into Apache Kafka consumptionDeep dive into Apache Kafka consumption
Deep dive into Apache Kafka consumption
 
AMQP with RabbitMQ
AMQP with RabbitMQAMQP with RabbitMQ
AMQP with RabbitMQ
 
High Performance Drupal Sites
High Performance Drupal SitesHigh Performance Drupal Sites
High Performance Drupal Sites
 

Similaire à Apache James/Hupa & GWT

GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011Manuel Carrasco Moñino
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And BeyondVMware Tanzu
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTManuel Carrasco Moñino
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13Fred Sauer
 
Jalimo Slides Linuxtag2007 (English)
Jalimo Slides Linuxtag2007 (English)Jalimo Slides Linuxtag2007 (English)
Jalimo Slides Linuxtag2007 (English)smancke
 
Comparison between zookeeper, etcd 3 and other distributed coordination systems
Comparison between zookeeper, etcd 3 and other distributed coordination systemsComparison between zookeeper, etcd 3 and other distributed coordination systems
Comparison between zookeeper, etcd 3 and other distributed coordination systemsImesha Sudasingha
 
Loadrunner vs Jmeter
Loadrunner vs JmeterLoadrunner vs Jmeter
Loadrunner vs JmeterAtul Pant
 
Diff between win runner vs and qtp
Diff between win runner vs and qtpDiff between win runner vs and qtp
Diff between win runner vs and qtpRamu Palanki
 
RAP vs GWT Which AJAX Technology is for you?
RAP vs GWT Which AJAX Technology is for you?RAP vs GWT Which AJAX Technology is for you?
RAP vs GWT Which AJAX Technology is for you?Mark Russell
 
How to deploy a Java application on Google App engine Flexible environment
How to deploy a Java application on Google App engine Flexible environmentHow to deploy a Java application on Google App engine Flexible environment
How to deploy a Java application on Google App engine Flexible environmentMichelantonio Trizio
 
Java keynote preso
Java keynote presoJava keynote preso
Java keynote presoArtur Alves
 
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps WayDevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Waysmalltown
 

Similaire à Apache James/Hupa & GWT (20)

GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011GQuery a jQuery clone for Gwt, RivieraDev 2011
GQuery a jQuery clone for Gwt, RivieraDev 2011
 
The Java alternative to Javascript
The Java alternative to JavascriptThe Java alternative to Javascript
The Java alternative to Javascript
 
Spring Boot 3 And Beyond
Spring Boot 3 And BeyondSpring Boot 3 And Beyond
Spring Boot 3 And Beyond
 
Rapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWTRapid and Reliable Developing with HTML5 & GWT
Rapid and Reliable Developing with HTML5 & GWT
 
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
SF JUG - GWT Can Help You Create Amazing Apps - 2009-10-13
 
Jalimo Slides Linuxtag2007 (English)
Jalimo Slides Linuxtag2007 (English)Jalimo Slides Linuxtag2007 (English)
Jalimo Slides Linuxtag2007 (English)
 
Nodejs
NodejsNodejs
Nodejs
 
Gwt Presentation1
Gwt Presentation1Gwt Presentation1
Gwt Presentation1
 
Node.js an Exectutive View
Node.js an Exectutive ViewNode.js an Exectutive View
Node.js an Exectutive View
 
Comparison between zookeeper, etcd 3 and other distributed coordination systems
Comparison between zookeeper, etcd 3 and other distributed coordination systemsComparison between zookeeper, etcd 3 and other distributed coordination systems
Comparison between zookeeper, etcd 3 and other distributed coordination systems
 
Loadrunner vs Jmeter
Loadrunner vs JmeterLoadrunner vs Jmeter
Loadrunner vs Jmeter
 
GCP overview
GCP overviewGCP overview
GCP overview
 
Diff between win runner vs and qtp
Diff between win runner vs and qtpDiff between win runner vs and qtp
Diff between win runner vs and qtp
 
RAP vs GWT Which AJAX Technology is for you?
RAP vs GWT Which AJAX Technology is for you?RAP vs GWT Which AJAX Technology is for you?
RAP vs GWT Which AJAX Technology is for you?
 
Grape golilath
Grape golilathGrape golilath
Grape golilath
 
GWT-Basics
GWT-BasicsGWT-Basics
GWT-Basics
 
GWT-Basics
GWT-BasicsGWT-Basics
GWT-Basics
 
How to deploy a Java application on Google App engine Flexible environment
How to deploy a Java application on Google App engine Flexible environmentHow to deploy a Java application on Google App engine Flexible environment
How to deploy a Java application on Google App engine Flexible environment
 
Java keynote preso
Java keynote presoJava keynote preso
Java keynote preso
 
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps WayDevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
DevOpsDays Taipei 2019 - Mastering IaC the DevOps Way
 

Plus de Manuel Carrasco Moñino

Present and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectivePresent and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectiveManuel Carrasco Moñino
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWAManuel Carrasco Moñino
 
Intro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsIntro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsManuel Carrasco Moñino
 
GwtQuery the perfect companion for GWT, GWT.create 2013
GwtQuery the perfect companion for GWT,  GWT.create 2013GwtQuery the perfect companion for GWT,  GWT.create 2013
GwtQuery the perfect companion for GWT, GWT.create 2013Manuel Carrasco Moñino
 
GWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryGWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryManuel Carrasco Moñino
 

Plus de Manuel Carrasco Moñino (20)

GWT and PWA
GWT and PWAGWT and PWA
GWT and PWA
 
Present and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspectivePresent and Future of GWT from a developer perspective
Present and Future of GWT from a developer perspective
 
GWT Contributor Workshop
GWT Contributor WorkshopGWT Contributor Workshop
GWT Contributor Workshop
 
CRUD with Polymer 2.0
CRUD with Polymer 2.0CRUD with Polymer 2.0
CRUD with Polymer 2.0
 
Web Components and PWA
Web Components and PWAWeb Components and PWA
Web Components and PWA
 
Building Components for Business Apps
Building Components for Business AppsBuilding Components for Business Apps
Building Components for Business Apps
 
Web Components the best marriage for a PWA
Web Components the best marriage for a PWAWeb Components the best marriage for a PWA
Web Components the best marriage for a PWA
 
Intro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin ElementsIntro to Web Components, Polymer & Vaadin Elements
Intro to Web Components, Polymer & Vaadin Elements
 
Rock GWT UI's with Polymer Elements
Rock GWT UI's with Polymer ElementsRock GWT UI's with Polymer Elements
Rock GWT UI's with Polymer Elements
 
Introducing GWT Polymer (vaadin)
Introducing GWT Polymer (vaadin)Introducing GWT Polymer (vaadin)
Introducing GWT Polymer (vaadin)
 
Speed up your GWT coding with gQuery
Speed up your GWT coding with gQuerySpeed up your GWT coding with gQuery
Speed up your GWT coding with gQuery
 
Vaadin codemotion 2014
Vaadin codemotion 2014Vaadin codemotion 2014
Vaadin codemotion 2014
 
GwtQuery the perfect companion for GWT, GWT.create 2013
GwtQuery the perfect companion for GWT,  GWT.create 2013GwtQuery the perfect companion for GWT,  GWT.create 2013
GwtQuery the perfect companion for GWT, GWT.create 2013
 
Aprendiendo GWT
Aprendiendo GWTAprendiendo GWT
Aprendiendo GWT
 
GWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactoryGWT: Why GWT, GQuery, and RequestFactory
GWT: Why GWT, GQuery, and RequestFactory
 
Mod security
Mod securityMod security
Mod security
 
Gwt IV -mvp
Gwt IV -mvpGwt IV -mvp
Gwt IV -mvp
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Gwt II - trabajando con gwt
Gwt II - trabajando con gwtGwt II - trabajando con gwt
Gwt II - trabajando con gwt
 
Gwt I - entendiendo gwt
Gwt I - entendiendo gwtGwt I - entendiendo gwt
Gwt I - entendiendo gwt
 

Dernier

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfAlex Barbosa Coqueiro
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsMiki Katsuragi
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity PlanDatabarracks
 

Dernier (20)

The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
Unraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdfUnraveling Multimodality with Large Language Models.pdf
Unraveling Multimodality with Large Language Models.pdf
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Vertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering TipsVertex AI Gemini Prompt Engineering Tips
Vertex AI Gemini Prompt Engineering Tips
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptxE-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
E-Vehicle_Hacking_by_Parul Sharma_null_owasp.pptx
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
How to write a Business Continuity Plan
How to write a Business Continuity PlanHow to write a Business Continuity Plan
How to write a Business Continuity Plan
 

Apache James/Hupa & GWT

  • 1. Apache James: The Java Apache Mail Enterprise Server Hupa: The James WebMail client Manuel Carrasco Moñino manolo@apache.org @dodotis
  • 2. About me ● Apache James ● HUPA ● GWT: ● Gquery & Gquery-plugins ● GwtExporter ● GwtUpload ● Chronoscope ● Jenkins ● Performance plugin ● Emma plugin ● Linux ● LXP a light and visual window manager based on icewm
  • 3. Contents ● Introduction to the James Project – Components – What is new in the release 3.0-beta3 ● Hupa – Architecture – What is GWT, MVP, How to Test – Hupa Status – Hupa Roadmap ● Becoming an open-source contributor.
  • 4. What is James? “The Apache James Project delivers a rich set of open source modules and libraries, written in Java, related to Internet mail communication which build into an advanced enterprise mail server”.
  • 5. Server Components ● Server is the main project in James and delivers a full featured modular mail-server composed by: – SMTP, LMTP – POP3 – IMAP4 (James-v3) – NNTP (James-v2) – Queue/Spool – Mail Storage – FetchMail
  • 6. Projects James is divided in projects, so as they can be used in other products easily: ● Server: Enterprise mail server, it depends on other modules to be built. ● Protocols: framework for mail protocols implementations (smtp, lmtp). ● IMAP: flexible codec for IMAP and command processors . ● MailBox: a library providing a flexible Mailbox storage accessible by mail protocols (Imap, pop, smtp), supports maildir, openjpa, hbase, jackrabbit. ● Mime4J: parser for mime messages like javax.mail but more tolerant. ● Mailets: email processing engine, it defines and implements a Mailet-API. ● JSieve [*]: Java Framework implementation of the Sieve mail filtering language. ● JSPF [*]: Java Sender Policy Framework implementation. ● JDKIM [*]: Java Framework Implementation for DomainsKeys identification Mail. ● MPT: Mail Protocol Tester (testing of ASCII based line protocols). ● PostAge: application for generating mail traffic on mail servers. ● HUPA: Hupa is an IMAP-based RIA Webmail written in GWT. [*] These frameworks provide mailet implementations to make easier to integrate with James Server
  • 7. Advantages of using James ● Pure java implementation. ● Performance in mind. ● Test based developing: TDD ● Open-Source components. ● Easy to Build (maven). ● Easy to Install in any platform. ● Easy to Use, Manage, and Integrate (APIs). ● Easy email processing: Mailets and Matchers ● Active developing and mailing lists.
  • 8. Whats new in James-3beta ● Imap ● Mailboxes (maildir, hbase, openjpa, jcr) ● More ddbb are supported (ie: Oracle) ● Better logging ● JMX management ● Performance (Sockets, storage, etc) ● NIO support (Using Netty) ● Easy writing SMTP extensions, filters, etc. ● NNTP not supported any more, it is left in v2 because it is not widely used.
  • 9. HUPA (Pure Java RIA Mail Client)
  • 10. Hupa Architecture Pure JavaScript Pure Java Any server (James, Gmail ...)
  • 11. What is GWT Java to Javascript Compiler and Optimizer It is a full SDK. Not a Js Framework Not a Js Library
  • 12. Why a compiler? And why Java? ● A high level language allows that the developer doesn't get lost with low level details (DOM, Ajax, Cross domain, Compression, Obfuscation, Dependencies ...) ● Java syntax is closed to JS, so in theory the Java to Js compiler was easier to develop ● Huge Java ecosystem: IDE, re-factoring, Debug, Code reuse, Maven, TDD, CI … ● Patterns, MVP, RPC, Pojos … ● Type checking, reduce errors. ● Separate code maintenance from the effectiveness of the executable. ● Normally the compiler would produce better js code that the code we could write by hand (less code, compressed, obfuscated, remove unused stuff, etc).
  • 13. What does the SDK provide ● Generators, Compiler, Linker, Optimizer, Obfuscater: one compiled js per browser (like c++ asm per processor). ● Client side libraries: DOM, XML, JSON, RPC, RF, I18n, MVP, Widgets ● Server libraries: RPC, RF ● Eclipse plugin ● Multi-browser Dev mode ● Unit testing and Debug tools. ● Performance tools (speed tracer) ● Compiler Statistics ● Everything is open sourced (Apache v2.0)
  • 14. Java Code (IDE) Java Server Java Client Side Side Toolkit (SDK) GWT development GWT compiler Debug/Hosted/Test Compiler/Optimizer GWT server JRE Emulation libs RPC/RF Libs & Widgets Test Runner FF/IE/Ch-Plugin 3ª Party 3ª Party Server libs Server libs JavaScript Bundles J-Byte Code (css, sprite) RPC/RF/JSON/XML RF/JSON/XML Other Backends JVM App-Server Browser (php, ruby, ...)
  • 15. MVP: Model View Presenter ● Define the View Interface and decouple the Presenter so as it do not need any browser specific stuff. ● Testing of the view is not necessary since we use tested components (widgets) ● Fast developing using TDD and MockView run in JVM instead of browser using Gin and Guice for DI (minimize usage of GWTTestCase). ● EventBus facilitate decoupling of presenters. ● The Dispatcher (Command pattern) or RF simplifies the transport layer and data binding.
  • 16. Hupa, Status ● Time ago, Hupa was a reference of a GWT MVP application. ● Hupa MVP design is based of a set of libraries available for gwt a couple of years ago: – Gwt-presenter: for the 'MVP' and 'EventBus' patterns – Gwt-dispatch: for the 'Command' pattern – Gin + Guice: for dependency injection. ● Hupa was developed before GWT-2.0 was released, when LayoutPanels, uibinders, Cells, etc. were not available. ● Many of the libraries which Hupa are using are unmaintained or have an equivalent feature in modern GWT.
  • 17. Hupa, RoadMap ● Replace gwt-dispatch by RequestFactory ● Replace gwt-presenter with the available stuff in GWT-2.4 ● Remove gwt-incubator dependency in favor of CellTable and CellTree ● Use LayoutPanels instead of css workarounds ● Use gwt-decorated panels ● Use gQuery in client side to enhance and simply views ● Implement new features: Contact management, Oauth, LocalStorage, Gadgets, etc.
  • 18. Become an opensource contributor ● Checkout the code. ● Play with it, test it, find bugs. ● Open JIRA tickets reporting problems, asking for improvements. ● Attach patches which fix bugs, add new features, improve performance, contribute to readability, etc. Don't forget unit Tests. ● Subscribe to mailing lists, and participate asking and answering questions. ● Committers will appreciate your work and will propose you to be part of the team. ● Other way you can utilize is to propose new projects: Apache incubator, labs, GSOC, etc. Find a mentor or use mailing-lists for that.