SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Building the Google Plugin for Eclipse
                         What We Learned
                         Presented by:
                         Rajeev Dayal

                         Originally Presented by:
                         Miguel Mendez
                         (at Eclipse Day 2009)




                                                    Google Confidential and Proprietary   1

Monday, April 25, 2011                                                                        1
Agenda

      Background
      Plugin Design Principles
      Challenges, Solutions, and Lessons




                                           GWT = Google Web Toolkit

                                           GPE = Google Plugin for Eclipse


                                                      Google Confidential and Proprietary   2


Monday, April 25, 2011                                                                          2
Background
                         GPE, GWT, and App Engine




                                                    Google Confidential and Proprietary   3

Monday, April 25, 2011                                                                        3
What is the Google Plugin for Eclipse?

      Collection of Eclipse plugins

      Assists in the creation of Web Apps that use:
      • Google Web Toolkit
      • App Engine for Java




                                                      Google Confidential and Proprietary   4


Monday, April 25, 2011                                                                          4
What is the Google Web Toolkit?

      Writing AJAX apps is hard
      • JavaScript is a dynamically-typed language
      • Each browser has its own quirks

      What if you could write AJAX apps in Java?
      • great tooling support (Eclipse!)
      • autocompletion, refactoring
      • first-class debugging

      Enter GWT
      • Debug your web app code in Eclipse while executing against a real browser
      • Cross-compile your application into stand-alone, optimized JavaScript for
        each browser
      • Developers can still get to raw JavaScript via JavaScript Native Interface
        (JSNI)
                                                                   Google Confidential and Proprietary   5


Monday, April 25, 2011                                                                                       5
What is App Engine?

      App Engine is a cloud computing platform
      • write a web app in Java (or Python) and deploy it
      • lives at <app id>.appspot.com (or a custom domain)

      We provide the container and services (Platform-as-a-Service)
      • Hardware connectivity
      • JVM
      • Servlet Container
      • Software services
      • Automatic scaling

      Your app is isolated from other running apps
      • Sandboxing - restrict JVM permissions, whitelist JRE classes
      • DevAppServer - local development server that emulates the production
        environment                                             Google Confidential and Proprietary   6


Monday, April 25, 2011                                                                                    6
Plugin Design Principles




                                                    Google Confidential and Proprietary   7

Monday, April 25, 2011                                                                        7
Design Principles

      Stability is paramount

      Make it easy to get started

      Reward sophisticated developers

      Control is happiness

      Keep things simple

      Blend naturally into Eclipse

      Developer’s time is valuable - help them maximize it

      Minimize plugin magic



                                                             Google Confidential and Proprietary   8


Monday, April 25, 2011                                                                                 8
Challenges, Solutions, and Lessons




                                                Google Confidential and Proprietary   9

Monday, April 25, 2011                                                                    9
Installation
      Challenge
      • Don’t make the user download all of the pieces individually
      • GPE is ready for use once installation completes
      • People behind firewalls

      Solution
      • Bundle the App Engine and GWT SDKs as plugins
      • Produce stand-alone archives for people behind firewalls

      Lessons
      • P2 garbage collection
             don’t solve this by burning the SDK version number into the plugin id :)
             make ‘SDK plugins’ non-singletons

      • GPE has dependencies that are not in the standalone Eclipse distro -
        producing archives to be placed in ‘archives’ is a bad idea
      • Optional plugins - P2 is GREEDY                                     Google Confidential and Proprietary   10


Monday, April 25, 2011                                                                                                 10
New Web Application
      Challenge
      • Quickly create web apps that use GWT and/or App Engine
      • Use an exploded WAR layout

      Solution
      • Create a wizard that generates web apps that are ready-for-launch
      • Allow users to select which versions of GWT/App Engine to use
      • Use project natures to indicate what is being used, allow users to add GWT/
        App Engine after the fact
      • Manage SDK jars in the WEB-INF/lib folder

      Lessons
      • Not everyone wants sample code generated
      • Did not make it easy to import GWT/App Engine samples


                                                                  Google Confidential and Proprietary   11


Monday, April 25, 2011                                                                                       11
Run/Debug Web Apps
      Challenge
      • Create a simple, customizable launch configuration
      • Handle possible combinations of GWT & App Engine
      • App Engine and GWT use different development servers
      • Maximize transparency - users should be able to see additional program and
        VM args

      Solution
      • Extend Java launch configurations and add some guiding UI
      • Classpath provider to add source paths needed by GWT
      • Launch configuration processors - keep program args and VM args in sync
        with changes in the launch config settings in the UI




                                                                Google Confidential and Proprietary   12


Monday, April 25, 2011                                                                                     12
Run/Debug Web Apps
      Lessons
      • Classpath modifications and reset are imperative
      • Eclipse’s launch configuration infrastructure is not meant to handle the case
        of one launch configuration tab affecting another
             there’s no consistent ‘model’ for all of the tabs

      • Be careful when using performApply and updateLaunchConfigurationDialog
        as a hook point for launch configuration processors
             slow launch configuration processors slow down the launch config UI
             launch configuration processors that rely on class lookups slow down in
               proportion to the size of the classpath
      • What do you do if the user modifies an argument that a launch configuration
        processor is responsible for?




                                                                          Google Confidential and Proprietary   13


Monday, April 25, 2011                                                                                               13
SDKs
      Challenge
      • Plugin should support multiple versions of the App Engine and GWT SDKs
      • Make it easy to switch versions
      • Properly configure complex classpaths

      Solution
      • Classpath containers, e.g. JRE containers
      • Classpath dialog and project properties enable trival SDK switching

      Lessons
      • Be careful what you do inside of ClasspathContainerInitializers
      • Default SDK may not have been a great idea
      • People ignore warnings in the problems view
      • Classpath containers reduce project portability
      • Implicit SDKs (especially Maven)
                                                                   Google Confidential and Proprietary   14


Monday, April 25, 2011                                                                                        14
GWT JSNI: Embed JavaScript in Java files
      Challenge
      • Embed JavaScript code in Java files
      • GWT overloads native methods and Java block comment for JSNI
      • Unfortunately, JSNI delimiters /*-{ }-*/ make JSNI blocks into multi-line
        comments, and they get formatted as such

      Solution
      • Declare a new document partition for JSNI methods
      • Color JSNI method bodies as JavaScript
      • Fix up “formatting” performed by auto-format

      Lessons
      • Smokescreen pattern
      • Redoing the formatting works, but alters undo stack
      • Difference between code path for CTRL-SHIFT-F formatting and auto-format
        on save                                                Google Confidential and Proprietary 15


Monday, April 25, 2011                                                                                  15
GWT JSNI: Refactoring, Search, and
     Completion
      Challenge
      • JSNI uses JSNI-like signatures that are subject to typos and can invalidated
        by refactoring
      • Invisible to Java dependency and Java search

      Solution
      • Add completion proposals (based on Java completion proposals) to expand
        JSNI refs
      • Add validation (via a compilation participant) to check the validity of JSNI refs
      • Participate in Java refactoring to update JSNI refs
      • Participate in Java searches to include refs from JSNI

      Lessons
      • Indexing for speed
      • “This method is not used” for JSNI refs to private methods
             @SuppressWarnings(“jsni”)
                                                                     Google Confidential and Proprietary   16


Monday, April 25, 2011                                                                                          16
GWT UiBinder - Validation
      Challenge
      • UiBinder files - .ui.xml - are associated with an “owner type”
      • Validations need to be triggered on the owner type when the .ui.xml file is
        changed, and vice versa
      • The .ui.xml file can have references to other Java types - when those types
        change, the .ui.xml file has to be re-validated

      Solution
      • compilation participant looks for Java file changes and triggers a validation
        on associated .ui.xml files
             changes on the owner type
             changes in any type referenced by a .ui.xml file

      • Use a IResourceChangeListener to trigger rebuilds on Java types referenced
        by a .ui.xml file



                                                                     Google Confidential and Proprietary   17


Monday, April 25, 2011                                                                                          17
GWT UiBinder - Validation
      Lessons
      • Be very conservative when triggering rebuilds - workspace can be constantly
        rebuilding if this is done incorrectly
      • It would be nice if JDT could model dependencies between resources and
        Java types




                                                                 Google Confidential and Proprietary   18


Monday, April 25, 2011                                                                                      18
App Engine JRE Whitelist
      Challenge
      • Inform developers when they’re using unsupported JRE APIs

      Solution
      • compilation participant
      • Load whitelist out of App Engine SDK
      • Provide quick-fixes to flag a class as not being used on the server side (a
        GWT class)

      Lessons
      • Caching whitelist can be tricky because the underlying SDK can be changed
      • Having the IDE change behavior based on the project’s classpath can be
        confusing




                                                                    Google Confidential and Proprietary   19


Monday, April 25, 2011                                                                                         19
App Engine ORM
      Challenge
      • App Engine Datanucleus-based ORM uses bytecode enhancement
      • Flag enhancement problems before the user runs the app

      Solution
      • Drive the Datanucleus enhancer as part of the build
      • Provide ability to select which classes should be enhanced

      Lessons
      • Datanucleus wants to report errors to standard out
      • Feedback via the console is less than optimal
      • Want feedback as red squiggly in file
      • Class file changes are what matter; not source file changes
      • Do not let exceptions escape from your builders!
      • Do not perform a refresh(...) in your builder - infinite build time :)
                                                                        Google Confidential and Proprietary   20


Monday, April 25, 2011                                                                                             20
Maven Support
      Challenge
      • Have GPE recognize a Maven project that uses GWT and/or App Engine as
        an actual GWT/App Engine project
      • Respect the GWT/App Engine SDK that Maven has configured

      Solution
      • Integrate with m2Eclipse to apply the App Engine/GWT Nature to a project
        on the import of a Maven project (and download any needed artifacts)
      • Prevent users from switching SDKs on a Maven project, and “synthesize” a
        GWT/App Engine SDK for Maven projects based on the build path

      Lessons
      • Maven breaks up the canonical SDK and renames its jars
      • Build classpath != launch classpath (Maven is VERY specific about this)
      • Sometimes the jars that you need for launch have not been downloaded from
        Maven central!
                                                                  Google Confidential and Proprietary   21


Monday, April 25, 2011                                                                                       21
Compilation Participants and ASTs
      Challenge
      • Need to perform fine-grained validation on Java files
             for UiBinder, RPC, JSNI, App Engine JRE)


      Solution
      • Use compilation participants to give you access to the Java AST as the user
        types (reconcile()), and as a pre-build hook on the Java Builder
      • Create ASTs from compilation units in buildStarting()

      Lessons
      • Compilation participants do not have access to the compile-time AST
      • Resolving type bindings in an AST takes a long time and takes up lots of
        memory; proportional to your classpath and source size
             use ASTBatchParser to speed things up

      • compilation participants must complete before the Java Build can complete
      • penalty for full rebuilds (from a type rename, classpath change)
                                                                   Google Confidential and Proprietary   22


Monday, April 25, 2011                                                                                        22
Other Challenges
      GWT RPC support
      • paired interfaces that need to be kept in sync
      • interfaces do not have a common ancestor type
      • refactoring is tricky - we need to perform the rename of the paired type after
        JDT’s real refactoring

      GWT CSS support
      • static “extensions” to CSS
      • need to modify WTP’s parser for the XML editor to understand GWT’s CSS
        constructs
      • generated a new CSS tokenizer from .flex rules
      • formatter would corrupt CSS constructs that it was not aware of; had to
        replace these with known constructs, allow the formatting to take place, and
        then put the originals back


                                                                    Google Confidential and Proprietary   23


Monday, April 25, 2011                                                                                         23
Other Challenges
      The Google Build System
      • specific rules about how GWT and App Engine projects are built and pull in
        dependencies
      • the assumptions that we make about project and SDK structure do not hold
      • parallels to the problems with Maven (sdks, build classpath != launch
        classpath)

      Development Mode View
      • shows information about active GWT sessions
      • server information is displayed to the console; console fights with
        development mode view for focus
      • which perspective do you contribute to?

      Deploy to Google
      • saving credentials - secure storage may prompt you for a password :(
      • having GWT participate in the compile
                                                                    Google Confidential and Proprietary   24


Monday, April 25, 2011                                                                                         24
Questions




                         ?       ?
                             ?
                     ?
                                 Google Confidential and Proprietary   25


Monday, April 25, 2011                                                      25
Thank You

      Documentation
             http://code.google.com/eclipse


      Update sites
             Eclipse 3.6 (Helios) - http://dl.google.com/eclipse/plugin/3.6
             Eclipse 3.5 (Galileo) - http://dl.google.com/eclipse/plugin/3.5
             Eclipse 3.4 (Ganymede) - http://dl.google.com/eclipse/plugin/3.4


      Google Web Toolkit and general GPE Feedback
             Group - http://groups.google.com/group/Google-Web-Toolkit
             Issue Tracker - http://code.google.com/p/google-web-toolkit/issues


      App Engine Feedback
             Group - http://groups.google.com/group/google-appengine-java
             Issue Tracker - http://code.google.com/p/googleappengine/issues



                                                                                Google Confidential and Proprietary   26


Monday, April 25, 2011                                                                                                     26

Weitere ähnliche Inhalte

Was ist angesagt?

Drupal 8 Quick Start: An Overview of Lightning
Drupal 8 Quick Start: An Overview of LightningDrupal 8 Quick Start: An Overview of Lightning
Drupal 8 Quick Start: An Overview of LightningAcquia
 
Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM ICF CIRCUIT
 
Eclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And TricksEclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And TricksChris Aniszczyk
 
Developing for Remote Bamboo Agents, AtlasCamp US 2012
Developing for Remote Bamboo Agents, AtlasCamp US 2012Developing for Remote Bamboo Agents, AtlasCamp US 2012
Developing for Remote Bamboo Agents, AtlasCamp US 2012Atlassian
 
PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015Justin Edelson
 
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...Jitendra Bafna
 
SharePoint Framework tips and tricks
SharePoint Framework tips and tricksSharePoint Framework tips and tricks
SharePoint Framework tips and tricksGiuseppe Marchi
 
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014Mark Leusink
 
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...Agile Testing Alliance
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenMert Çalışkan
 
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEM
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEMDo more with LESS, Handlebars, Coffeescript and other Web Resources in AEM
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEMBob Paulin
 
Step by Step Guide on Lazy Loading in Angular 11
Step by Step Guide on Lazy Loading in Angular 11Step by Step Guide on Lazy Loading in Angular 11
Step by Step Guide on Lazy Loading in Angular 11Katy Slemon
 
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...Eric Sembrat
 
Jenkins introduction
Jenkins introductionJenkins introduction
Jenkins introductionGourav Varma
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Diego Zuluaga
 
Running Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native ImagesRunning Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native ImagesVMware Tanzu
 
Dr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentDr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentUlrich Krause
 
Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Eugenio Minardi
 

Was ist angesagt? (20)

Drupal 8 Quick Start: An Overview of Lightning
Drupal 8 Quick Start: An Overview of LightningDrupal 8 Quick Start: An Overview of Lightning
Drupal 8 Quick Start: An Overview of Lightning
 
Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM Maximize the power of OSGi in AEM
Maximize the power of OSGi in AEM
 
Eclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And TricksEclipse Plug-in Develompent Tips And Tricks
Eclipse Plug-in Develompent Tips And Tricks
 
Developing for Remote Bamboo Agents, AtlasCamp US 2012
Developing for Remote Bamboo Agents, AtlasCamp US 2012Developing for Remote Bamboo Agents, AtlasCamp US 2012
Developing for Remote Bamboo Agents, AtlasCamp US 2012
 
PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015PhoneGap Enterprise Viewer - ConnectCon 2015
PhoneGap Enterprise Viewer - ConnectCon 2015
 
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
MuleSoft Surat Virtual Meetup#36 - MuleSoft Composer for Salesforce - No Code...
 
ReactJS
ReactJSReactJS
ReactJS
 
What is new in elgg 1.8?
What is new in elgg 1.8?What is new in elgg 1.8?
What is new in elgg 1.8?
 
SharePoint Framework tips and tricks
SharePoint Framework tips and tricksSharePoint Framework tips and tricks
SharePoint Framework tips and tricks
 
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
Get the best out of Bootstrap with Bootstrap4XPages - Engage 2014
 
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...
#ATAGTR2019 Presentation "iOS App Automation, GitHub and Jenkins integration"...
 
BMO - Intelligent Projects with Maven
BMO - Intelligent Projects with MavenBMO - Intelligent Projects with Maven
BMO - Intelligent Projects with Maven
 
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEM
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEMDo more with LESS, Handlebars, Coffeescript and other Web Resources in AEM
Do more with LESS, Handlebars, Coffeescript and other Web Resources in AEM
 
Step by Step Guide on Lazy Loading in Angular 11
Step by Step Guide on Lazy Loading in Angular 11Step by Step Guide on Lazy Loading in Angular 11
Step by Step Guide on Lazy Loading in Angular 11
 
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
October 2016 - USG Rock Eagle - Everything You Need to Know to Plan Your Drup...
 
Jenkins introduction
Jenkins introductionJenkins introduction
Jenkins introduction
 
Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0Apigee deploy grunt plugin.1.0
Apigee deploy grunt plugin.1.0
 
Running Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native ImagesRunning Spring Boot Applications as GraalVM Native Images
Running Spring Boot Applications as GraalVM Native Images
 
Dr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin developmentDr. Strangelove, or how I learned to love plugin development
Dr. Strangelove, or how I learned to love plugin development
 
Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)Drupal Continuous Integration (European Drupal Days 2015)
Drupal Continuous Integration (European Drupal Days 2015)
 

Andere mochten auch

An easy guide to Plugin Development
An easy guide to Plugin DevelopmentAn easy guide to Plugin Development
An easy guide to Plugin DevelopmentShinichi Nishikawa
 
jQuery Plugin Creation
jQuery Plugin CreationjQuery Plugin Creation
jQuery Plugin Creationbenalman
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third PluginJustin Ryan
 
Jumping Into WordPress Plugin Programming
Jumping Into WordPress Plugin ProgrammingJumping Into WordPress Plugin Programming
Jumping Into WordPress Plugin ProgrammingDougal Campbell
 
Plugin jQuery, Design Patterns
Plugin jQuery, Design PatternsPlugin jQuery, Design Patterns
Plugin jQuery, Design PatternsRobert Casanova
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)andrewnacin
 
Creating a Plug-In Architecture
Creating a Plug-In ArchitectureCreating a Plug-In Architecture
Creating a Plug-In Architectureondrejbalas
 

Andere mochten auch (7)

An easy guide to Plugin Development
An easy guide to Plugin DevelopmentAn easy guide to Plugin Development
An easy guide to Plugin Development
 
jQuery Plugin Creation
jQuery Plugin CreationjQuery Plugin Creation
jQuery Plugin Creation
 
Writing your Third Plugin
Writing your Third PluginWriting your Third Plugin
Writing your Third Plugin
 
Jumping Into WordPress Plugin Programming
Jumping Into WordPress Plugin ProgrammingJumping Into WordPress Plugin Programming
Jumping Into WordPress Plugin Programming
 
Plugin jQuery, Design Patterns
Plugin jQuery, Design PatternsPlugin jQuery, Design Patterns
Plugin jQuery, Design Patterns
 
Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)Best Practices in Plugin Development (WordCamp Seattle)
Best Practices in Plugin Development (WordCamp Seattle)
 
Creating a Plug-In Architecture
Creating a Plug-In ArchitectureCreating a Plug-In Architecture
Creating a Plug-In Architecture
 

Ähnlich wie Building GPE: What We Learned

Top 3 selenium IDE alternatives for Chrome and Firefox
Top 3 selenium IDE alternatives for Chrome and FirefoxTop 3 selenium IDE alternatives for Chrome and Firefox
Top 3 selenium IDE alternatives for Chrome and FirefoxKatalon Studio
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemBruno Borges
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...CloudBees
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Mastering DevOps with Oracle
Mastering DevOps with Oracle Mastering DevOps with Oracle
Mastering DevOps with Oracle jeckels
 
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)Mickael Istria
 
Intro to App Engine - Agency Dev Day NYC 2011
Intro to App Engine - Agency Dev Day NYC 2011Intro to App Engine - Agency Dev Day NYC 2011
Intro to App Engine - Agency Dev Day NYC 2011ikailan
 
Gradle 2.Breaking stereotypes
Gradle 2.Breaking stereotypesGradle 2.Breaking stereotypes
Gradle 2.Breaking stereotypesStrannik_2013
 
Continuous delivery with Jenkins Enterprise and Deployit
Continuous delivery with Jenkins Enterprise and DeployitContinuous delivery with Jenkins Enterprise and Deployit
Continuous delivery with Jenkins Enterprise and DeployitXebiaLabs
 
Kube applications in action
Kube applications in actionKube applications in action
Kube applications in actionKarthik Gaekwad
 
android_android + app engine- a developer's dream combination
android_android + app engine- a developer's dream combinationandroid_android + app engine- a developer's dream combination
android_android + app engine- a developer's dream combinationbrada
 
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015Chris Jang
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXoArnaud Héritier
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Provectus
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperMike Melusky
 
Oracle WebLogic Server 12.2.1 Do More with Less
Oracle WebLogic Server 12.2.1 Do More with LessOracle WebLogic Server 12.2.1 Do More with Less
Oracle WebLogic Server 12.2.1 Do More with LessEd Burns
 
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...Gil Hoffer
 
MicroProfile for MicroServices
MicroProfile for MicroServicesMicroProfile for MicroServices
MicroProfile for MicroServicesMert Çalışkan
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchHoward Greenberg
 

Ähnlich wie Building GPE: What We Learned (20)

Top 3 selenium IDE alternatives for Chrome and Firefox
Top 3 selenium IDE alternatives for Chrome and FirefoxTop 3 selenium IDE alternatives for Chrome and Firefox
Top 3 selenium IDE alternatives for Chrome and Firefox
 
Melhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na NuvemMelhore o Desenvolvimento do Time com DevOps na Nuvem
Melhore o Desenvolvimento do Time com DevOps na Nuvem
 
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
Jumping from Continuous Integration to Continuous Delivery with Jenkins Enter...
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Mastering DevOps with Oracle
Mastering DevOps with Oracle Mastering DevOps with Oracle
Mastering DevOps with Oracle
 
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
Whats new in Eclipse Indigo ? (@DemoCamp Grenoble 2011)
 
Intro to App Engine - Agency Dev Day NYC 2011
Intro to App Engine - Agency Dev Day NYC 2011Intro to App Engine - Agency Dev Day NYC 2011
Intro to App Engine - Agency Dev Day NYC 2011
 
Gradle 2.Breaking stereotypes
Gradle 2.Breaking stereotypesGradle 2.Breaking stereotypes
Gradle 2.Breaking stereotypes
 
Continuous delivery with Jenkins Enterprise and Deployit
Continuous delivery with Jenkins Enterprise and DeployitContinuous delivery with Jenkins Enterprise and Deployit
Continuous delivery with Jenkins Enterprise and Deployit
 
Kube applications in action
Kube applications in actionKube applications in action
Kube applications in action
 
android_android + app engine- a developer's dream combination
android_android + app engine- a developer's dream combinationandroid_android + app engine- a developer's dream combination
android_android + app engine- a developer's dream combination
 
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015
Google Tech Talk with Dr. Eric Brewer in Korea Apr.27.2015
 
Mobile developments at eXo
Mobile developments at eXoMobile developments at eXo
Mobile developments at eXo
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"Сергей Моренец: "Gradle. Write once, build everywhere"
Сергей Моренец: "Gradle. Write once, build everywhere"
 
Effective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and DapperEffective .NET Core Unit Testing with SQLite and Dapper
Effective .NET Core Unit Testing with SQLite and Dapper
 
Oracle WebLogic Server 12.2.1 Do More with Less
Oracle WebLogic Server 12.2.1 Do More with LessOracle WebLogic Server 12.2.1 Do More with Less
Oracle WebLogic Server 12.2.1 Do More with Less
 
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...
Supercharge your Test & Dev Process with Ravello, Jenkins and the Cloud (Jenk...
 
MicroProfile for MicroServices
MicroProfile for MicroServicesMicroProfile for MicroServices
MicroProfile for MicroServices
 
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's WorkbenchAugust Webinar - Water Cooler Talks: A Look into a Developer's Workbench
August Webinar - Water Cooler Talks: A Look into a Developer's Workbench
 

Kürzlich hochgeladen

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Servicegiselly40
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)wesley chun
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 

Kürzlich hochgeladen (20)

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 

Building GPE: What We Learned

  • 1. Building the Google Plugin for Eclipse What We Learned Presented by: Rajeev Dayal Originally Presented by: Miguel Mendez (at Eclipse Day 2009) Google Confidential and Proprietary 1 Monday, April 25, 2011 1
  • 2. Agenda Background Plugin Design Principles Challenges, Solutions, and Lessons GWT = Google Web Toolkit GPE = Google Plugin for Eclipse Google Confidential and Proprietary 2 Monday, April 25, 2011 2
  • 3. Background GPE, GWT, and App Engine Google Confidential and Proprietary 3 Monday, April 25, 2011 3
  • 4. What is the Google Plugin for Eclipse? Collection of Eclipse plugins Assists in the creation of Web Apps that use: • Google Web Toolkit • App Engine for Java Google Confidential and Proprietary 4 Monday, April 25, 2011 4
  • 5. What is the Google Web Toolkit? Writing AJAX apps is hard • JavaScript is a dynamically-typed language • Each browser has its own quirks What if you could write AJAX apps in Java? • great tooling support (Eclipse!) • autocompletion, refactoring • first-class debugging Enter GWT • Debug your web app code in Eclipse while executing against a real browser • Cross-compile your application into stand-alone, optimized JavaScript for each browser • Developers can still get to raw JavaScript via JavaScript Native Interface (JSNI) Google Confidential and Proprietary 5 Monday, April 25, 2011 5
  • 6. What is App Engine? App Engine is a cloud computing platform • write a web app in Java (or Python) and deploy it • lives at <app id>.appspot.com (or a custom domain) We provide the container and services (Platform-as-a-Service) • Hardware connectivity • JVM • Servlet Container • Software services • Automatic scaling Your app is isolated from other running apps • Sandboxing - restrict JVM permissions, whitelist JRE classes • DevAppServer - local development server that emulates the production environment Google Confidential and Proprietary 6 Monday, April 25, 2011 6
  • 7. Plugin Design Principles Google Confidential and Proprietary 7 Monday, April 25, 2011 7
  • 8. Design Principles Stability is paramount Make it easy to get started Reward sophisticated developers Control is happiness Keep things simple Blend naturally into Eclipse Developer’s time is valuable - help them maximize it Minimize plugin magic Google Confidential and Proprietary 8 Monday, April 25, 2011 8
  • 9. Challenges, Solutions, and Lessons Google Confidential and Proprietary 9 Monday, April 25, 2011 9
  • 10. Installation Challenge • Don’t make the user download all of the pieces individually • GPE is ready for use once installation completes • People behind firewalls Solution • Bundle the App Engine and GWT SDKs as plugins • Produce stand-alone archives for people behind firewalls Lessons • P2 garbage collection  don’t solve this by burning the SDK version number into the plugin id :)  make ‘SDK plugins’ non-singletons • GPE has dependencies that are not in the standalone Eclipse distro - producing archives to be placed in ‘archives’ is a bad idea • Optional plugins - P2 is GREEDY Google Confidential and Proprietary 10 Monday, April 25, 2011 10
  • 11. New Web Application Challenge • Quickly create web apps that use GWT and/or App Engine • Use an exploded WAR layout Solution • Create a wizard that generates web apps that are ready-for-launch • Allow users to select which versions of GWT/App Engine to use • Use project natures to indicate what is being used, allow users to add GWT/ App Engine after the fact • Manage SDK jars in the WEB-INF/lib folder Lessons • Not everyone wants sample code generated • Did not make it easy to import GWT/App Engine samples Google Confidential and Proprietary 11 Monday, April 25, 2011 11
  • 12. Run/Debug Web Apps Challenge • Create a simple, customizable launch configuration • Handle possible combinations of GWT & App Engine • App Engine and GWT use different development servers • Maximize transparency - users should be able to see additional program and VM args Solution • Extend Java launch configurations and add some guiding UI • Classpath provider to add source paths needed by GWT • Launch configuration processors - keep program args and VM args in sync with changes in the launch config settings in the UI Google Confidential and Proprietary 12 Monday, April 25, 2011 12
  • 13. Run/Debug Web Apps Lessons • Classpath modifications and reset are imperative • Eclipse’s launch configuration infrastructure is not meant to handle the case of one launch configuration tab affecting another  there’s no consistent ‘model’ for all of the tabs • Be careful when using performApply and updateLaunchConfigurationDialog as a hook point for launch configuration processors  slow launch configuration processors slow down the launch config UI  launch configuration processors that rely on class lookups slow down in proportion to the size of the classpath • What do you do if the user modifies an argument that a launch configuration processor is responsible for? Google Confidential and Proprietary 13 Monday, April 25, 2011 13
  • 14. SDKs Challenge • Plugin should support multiple versions of the App Engine and GWT SDKs • Make it easy to switch versions • Properly configure complex classpaths Solution • Classpath containers, e.g. JRE containers • Classpath dialog and project properties enable trival SDK switching Lessons • Be careful what you do inside of ClasspathContainerInitializers • Default SDK may not have been a great idea • People ignore warnings in the problems view • Classpath containers reduce project portability • Implicit SDKs (especially Maven) Google Confidential and Proprietary 14 Monday, April 25, 2011 14
  • 15. GWT JSNI: Embed JavaScript in Java files Challenge • Embed JavaScript code in Java files • GWT overloads native methods and Java block comment for JSNI • Unfortunately, JSNI delimiters /*-{ }-*/ make JSNI blocks into multi-line comments, and they get formatted as such Solution • Declare a new document partition for JSNI methods • Color JSNI method bodies as JavaScript • Fix up “formatting” performed by auto-format Lessons • Smokescreen pattern • Redoing the formatting works, but alters undo stack • Difference between code path for CTRL-SHIFT-F formatting and auto-format on save Google Confidential and Proprietary 15 Monday, April 25, 2011 15
  • 16. GWT JSNI: Refactoring, Search, and Completion Challenge • JSNI uses JSNI-like signatures that are subject to typos and can invalidated by refactoring • Invisible to Java dependency and Java search Solution • Add completion proposals (based on Java completion proposals) to expand JSNI refs • Add validation (via a compilation participant) to check the validity of JSNI refs • Participate in Java refactoring to update JSNI refs • Participate in Java searches to include refs from JSNI Lessons • Indexing for speed • “This method is not used” for JSNI refs to private methods  @SuppressWarnings(“jsni”) Google Confidential and Proprietary 16 Monday, April 25, 2011 16
  • 17. GWT UiBinder - Validation Challenge • UiBinder files - .ui.xml - are associated with an “owner type” • Validations need to be triggered on the owner type when the .ui.xml file is changed, and vice versa • The .ui.xml file can have references to other Java types - when those types change, the .ui.xml file has to be re-validated Solution • compilation participant looks for Java file changes and triggers a validation on associated .ui.xml files  changes on the owner type  changes in any type referenced by a .ui.xml file • Use a IResourceChangeListener to trigger rebuilds on Java types referenced by a .ui.xml file Google Confidential and Proprietary 17 Monday, April 25, 2011 17
  • 18. GWT UiBinder - Validation Lessons • Be very conservative when triggering rebuilds - workspace can be constantly rebuilding if this is done incorrectly • It would be nice if JDT could model dependencies between resources and Java types Google Confidential and Proprietary 18 Monday, April 25, 2011 18
  • 19. App Engine JRE Whitelist Challenge • Inform developers when they’re using unsupported JRE APIs Solution • compilation participant • Load whitelist out of App Engine SDK • Provide quick-fixes to flag a class as not being used on the server side (a GWT class) Lessons • Caching whitelist can be tricky because the underlying SDK can be changed • Having the IDE change behavior based on the project’s classpath can be confusing Google Confidential and Proprietary 19 Monday, April 25, 2011 19
  • 20. App Engine ORM Challenge • App Engine Datanucleus-based ORM uses bytecode enhancement • Flag enhancement problems before the user runs the app Solution • Drive the Datanucleus enhancer as part of the build • Provide ability to select which classes should be enhanced Lessons • Datanucleus wants to report errors to standard out • Feedback via the console is less than optimal • Want feedback as red squiggly in file • Class file changes are what matter; not source file changes • Do not let exceptions escape from your builders! • Do not perform a refresh(...) in your builder - infinite build time :) Google Confidential and Proprietary 20 Monday, April 25, 2011 20
  • 21. Maven Support Challenge • Have GPE recognize a Maven project that uses GWT and/or App Engine as an actual GWT/App Engine project • Respect the GWT/App Engine SDK that Maven has configured Solution • Integrate with m2Eclipse to apply the App Engine/GWT Nature to a project on the import of a Maven project (and download any needed artifacts) • Prevent users from switching SDKs on a Maven project, and “synthesize” a GWT/App Engine SDK for Maven projects based on the build path Lessons • Maven breaks up the canonical SDK and renames its jars • Build classpath != launch classpath (Maven is VERY specific about this) • Sometimes the jars that you need for launch have not been downloaded from Maven central! Google Confidential and Proprietary 21 Monday, April 25, 2011 21
  • 22. Compilation Participants and ASTs Challenge • Need to perform fine-grained validation on Java files  for UiBinder, RPC, JSNI, App Engine JRE) Solution • Use compilation participants to give you access to the Java AST as the user types (reconcile()), and as a pre-build hook on the Java Builder • Create ASTs from compilation units in buildStarting() Lessons • Compilation participants do not have access to the compile-time AST • Resolving type bindings in an AST takes a long time and takes up lots of memory; proportional to your classpath and source size  use ASTBatchParser to speed things up • compilation participants must complete before the Java Build can complete • penalty for full rebuilds (from a type rename, classpath change) Google Confidential and Proprietary 22 Monday, April 25, 2011 22
  • 23. Other Challenges GWT RPC support • paired interfaces that need to be kept in sync • interfaces do not have a common ancestor type • refactoring is tricky - we need to perform the rename of the paired type after JDT’s real refactoring GWT CSS support • static “extensions” to CSS • need to modify WTP’s parser for the XML editor to understand GWT’s CSS constructs • generated a new CSS tokenizer from .flex rules • formatter would corrupt CSS constructs that it was not aware of; had to replace these with known constructs, allow the formatting to take place, and then put the originals back Google Confidential and Proprietary 23 Monday, April 25, 2011 23
  • 24. Other Challenges The Google Build System • specific rules about how GWT and App Engine projects are built and pull in dependencies • the assumptions that we make about project and SDK structure do not hold • parallels to the problems with Maven (sdks, build classpath != launch classpath) Development Mode View • shows information about active GWT sessions • server information is displayed to the console; console fights with development mode view for focus • which perspective do you contribute to? Deploy to Google • saving credentials - secure storage may prompt you for a password :( • having GWT participate in the compile Google Confidential and Proprietary 24 Monday, April 25, 2011 24
  • 25. Questions ? ? ? ? Google Confidential and Proprietary 25 Monday, April 25, 2011 25
  • 26. Thank You Documentation  http://code.google.com/eclipse Update sites  Eclipse 3.6 (Helios) - http://dl.google.com/eclipse/plugin/3.6  Eclipse 3.5 (Galileo) - http://dl.google.com/eclipse/plugin/3.5  Eclipse 3.4 (Ganymede) - http://dl.google.com/eclipse/plugin/3.4 Google Web Toolkit and general GPE Feedback  Group - http://groups.google.com/group/Google-Web-Toolkit  Issue Tracker - http://code.google.com/p/google-web-toolkit/issues App Engine Feedback  Group - http://groups.google.com/group/google-appengine-java  Issue Tracker - http://code.google.com/p/googleappengine/issues Google Confidential and Proprietary 26 Monday, April 25, 2011 26