Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

GeoServer Developers Workshop


Published on

GeoServer is an amazing project, and an amazing project to work on!

Please attend this workshop to:
* Get Started with the GeoServer codebase
* Orientation with a Tour of the GeoServer architecture
* Introduction the service dispatch framework, includin creating your own service
* Built chain and test facilities
* Create a custom function for use with map styling
* Create a custom process for use with style transformations and web processing service
* Anatomy of a successful pull request

Attendees will build their own GeoServer, learn a bit about how our community operates, and enjoy extending the base application.

If you are a developer looking to support GeoServer, or join us for a sprint or bug-stomp, this workshop is great introduction.

This course features hands-on development. We encourage and expect you to bring your favourite Java development environment.

For a good time with open source join GeoServer today!

Published in: Software
  • ⇒ ⇐ This service will write as best as they can. So you do not need to waste the time on rewritings.
    Are you sure you want to  Yes  No
    Your message goes here
  • My brother found Custom Writing Service ⇒ ⇐ and ordered a couple of works. Their customer service is outstanding, never left a query unanswered.
    Are you sure you want to  Yes  No
    Your message goes here
  • If you have any problems with writing, feel free to ask our writers for help! The team of Paper Help ⇒ ⇐ is ready to help with any kind of academic writing!
    Are you sure you want to  Yes  No
    Your message goes here
  • Got a new Iphone 6 in just 7 days completing surveys and offers! Now I'm just a few days away from completing and receiving my samsung tablet! Highly recommended! Definitely the best survey site out there! ◆◆◆
    Are you sure you want to  Yes  No
    Your message goes here
  • This Single Mother Makes Over $700 per Week Helping Businesses with their Facebook and Twitter Accounts! and Now You Can Too! ▲▲▲
    Are you sure you want to  Yes  No
    Your message goes here

GeoServer Developers Workshop

  1. 1. GeoServer Developers Workshop
  2. 2. Welcome Ian Turon Open Source Evangelist @ijturton Astun technologies Passionate about geography and passionate about open (source, standards and data). Jody Garnett Community Lead @jodygarnett Boundless Provides geospatial tools and services for managing data and building applications.
  3. 3. Overview
  4. 4. ● Welcome ● Development Environment ○ Exercise: checkout and Build ● GeoServer Software Stack Developer Orientation ● GeoServer Design ○ Architecture ● Dispatch ○ Open Web Services ○ Spring Application Context ○ Exercise: ■ Hello Service ● Web Admin ○ Wicket
  5. 5. ● GeoTools Architecture ○ Optional: Checkout and Build ● Data Model: ○ Feature ○ Geometry ○ CRS ○ Grid Coverage GeoServer: Data Access and Visualization ● Factory SPI ● Function ○ Exercise: create a function ● Process ○ Exercise: create a process
  6. 6. ● Catalog API ○ Data management ○ Service configuration ○ Settings ● Extensions and Community modules ○ Optional: build with community profile GeoServer Internals ● Java JUnit Testing ● GeoServer Testing ○ GeoServerSystemTest ○ Mock Objects ● Dispatcher ○ Request/Response ○ KVP Parser
  7. 7. Explore Java Development ● Git/GitHub feature workflow ● Java ○ Interface/Factory/SPI ○ JUnit/TestCoverage ○ Mock Objects ● Spring ○ applicationContext ○ GeoServerExternals Development topics to explore Explore GeoServer Ecosystem ● Documentation Sphinx/RST ● Vector internals ○ JTS Topology Suite ○ GeoTools DataStore ● Image Processing ○ JAI / JAI-Ext / JAI Tools / Jiffle ● Raster Formats ○ World Image, GeoTIFF internals ● Renderer ○ Streaming Renderer ● REST API
  8. 8. GeoServer Community ● Open Source ○ License / Providence ○ Open checklist ● Accountability ○ Governance ○ Quality Control ● Explore Java Development ○ Git/GitHub feature workflow ○ Java ■ Interface/Factory/SPI ■ JUnit/TestCoverage ■ Mock Objects ○ Spring ■ applicationContext ■ GeoServerExternals
  9. 9. Developer Orientation GeoServer Developer Workshop
  10. 10. Before we start
  11. 11. GeoServer checkout and build ● Developers Guide “Latest” ● Scroll down to Tools, Source Code and Quickstart sections Q: Do I need to make a fork? A: Yes this is a course on GeoServer development? Q: Internet is slow, can I make a shallow local copy? A: When checking out use a shallow copy for today git clone --depth 3 git://<username>/geoserver.git
  12. 12. Optional: GeoTools checkout and build ● User Guide "Latest" ● Scroll down to Building section Q: Download maven source? A: No download the binary Q: Clone is taking too long! A: When checking out use a shallow copy for today git clone --depth 3 git://
  13. 13. Development Environment
  14. 14. Development Environment ● Java 8 ○ We are not in a position to use Java 10 at present ○ As a server project GeoServer is a conservative preferring long-term-support releases ● Git ○ On windows we recommend github windows client which also provides command line tools ○ On macOS github client can be a great place to start, may also consider paying Tower client ○ On linux you already love the command line ● Maven ○ Maven will download and use other tools as required ● Integrated Development Environment ○ ○
  15. 15. Development Environment: Windows Windows is not a very common development environment ● You will be "popular" as one of the few developers able to directly experience and fix windows specific problems! ● Administrator access is useful for installing software and tools ● NTFS struggles creating/deleting thousands of files during compile and test If you are getting "file lock" failures ● Check windows search is not indexing your development folders (it is sure to get a file lock failure trying to index files as we delete them) ● Config your antivirus software to ignoring development folders
  16. 16. Environmental Variables ● M2_HOME - maven install directory ● JAVA_HOME - java install directory ● PATH - windows ○ Should include %M2_HOME%/bin - for mvn tool ○ Should include %JAVA_HOME%/bin - for java command ● PATH - linux and OS X ○ Should include $M2_HOME/bin;$JAVA_HOME/bin
  17. 17. > java -version java version "1.8.0_152" Java(TM) SE Runtime Environment (build 1.8.0_152-b16) Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode) > mvn -version Apache Maven 3.5.3 Maven home: /usr/local/Cellar/maven/3.5.3/libexec Java version: 1.8.0_152, vendor: Oracle Corporation Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_152.jdk/Contents/Home/jre Default locale: en_CA, platform encoding: UTF-8 OS name: "mac os x", version: "10.13.6", arch: "x86_64", family: "mac" Ready to go on?
  18. 18. Maven
  19. 19. How Maven differs from Make and Ant Make and ANT are task based ● Execution model is a series of "build targets" ● Make files are great for copy and paste, but hard to maintain ● Ant files are just as "good" but with the power of XML Maven is the opposite of ANT ● Popular "tasks" are packaged on the internet as a "maven plugin" ● maven assumes a "standard" directory structure so they can share tasks ● Tasks are mapped to your project directories and "run" ● This allows many projects to share the same "task" steps! (much easier to maintain, but more magic when you watch it go)
  20. 20. How Maven Works ● Your project directories are described using a "pom.xml" file ● pom.xml defines a "project object model" ○ documents how *your* directories are laid out (src/ or src/main/java) ○ describing everything about your project! ● jar management (ie "dependency" management) ○ a common ant task downloads a list of jars and puts them in a "lib" folder ○ Maven takes a list of "dependencies" and downloads it to a "repository" folder in your home directory ■ This "local repository" folder is shared between all projects ■ If you build a tool locally and "install" it into the "local repository" folder other projects will not be able to tell if it came from the internet or not!
  21. 21. Maven Repository Local Repository ● on your machine ● holds everything downloaded from the internet ● both "maven plugins" ● also "dependencies" External Repositories ● maven central is "official" ● OSGeo repo for geotools ○ geotools releases ○ third-party dependencies ● ○ geoserver releases ○ generated snapshots ○ cache of osgeo repo
  22. 22. ● Plugin:goal ○ Dependency:tree ○ eclipse:eclipse ● Profiles ○ -Poracle ● Variables ○ -Dall ○ -DskipTests ● Options ○ -nsu (don’t fetch snapshots) ○ -o (offline don’t download any new jars) ○ -T (threads to use) life cycle ● validate ● compile ● test ● package ● integration-test ● verify ● install (local repository) ● deploy Using maven
  23. 23. GeoServer cd src mvn install -DskipTests -T 2C cd web cd app mvn jetty:run http://localhost:8080/geoserver mvn jetty:run -DconfigId=release -DconfigDirectory=../../../data/realease Building GeoTools (Optional) mvn install -Dall -DskipTests -T 2C
  24. 24. Git and GitHub
  25. 25. git setup ● upstream: this is the original geoserver ○ master: this is the latest ○ 2.13.x: this is the stable branch ○ factory-registry: this is a "feature branch where developers were working together ● origin: this is your "fork" of geoserver ○ master: this is the latest ○ fix_me: this is a feature branch where you are working on a fix ● local: ○ pull from upstream:master and then push to origin:master ○ publish origin:fix_me, and do a pull request to upstream:master local origin upstream factory-registry 2.13.x master fix_me master fix_me master remote repositories local repository
  26. 26. feature branch Distributed Development local origin upstream 2.13.x master 2.13.x master feature branch master pull request stash workspace index GitHub Local Machine File System fetch/pull push checkout commit
  27. 27.
  28. 28. Workshop hint: Reset the origin of your repo Workshop internet is slow, please copy geoserver checkout from Ian: git remote -v git remote remove origin git remote add origin<user>/geoserver.git git remote add upstream git remote -v
  29. 29. git workflow ● feature branch for each fix ● submit pull request to master ● backport to stable branches ● Guidelines 1. Ensure your IDE is properly configured (we now use google formatter in build) 2. Include only relevant changes 3. Fix one thing at a time 4. Always add a test 5. Reference Jira ticket in commit message a. Used to create the release notes! 6. Be patient a. Devs are contributing their own time b. Writing a test showing functionality / fix
  30. 30. IDE Setup
  31. 31. IntelliJ ● great maven integration out of the box ● Fast enough to have both geoserver and geotools loaded at the same time
  32. 32. Eclipse IDE Maven Developers Guide: Eclipse M2 Quickstart ● Maven integration provided out-of-the box ● Provides build steps and editors for Eclipse IDE ● Teaches eclipse how to interact with maven build and repositories ● Tips ○ To fix “errors” right click on project and run maven->UpdateProject
  33. 33. Eclipse IDE Maven Glitches ● java-cc-maven-plugin ○ Build once on the command line first (to create generated java files) ● Import trouble with some build steps! ○ Treat as warning in Preferences ○ Use “Resolve Later” during import ○ Exclude in lifecycle mappings ● fmt-maven-plugin ○ Configure google formatter in Eclipse ● Missing closed source jars? (oracle) ○ download and install into local repo ○ or simply close those projects in eclipse cd src/wcs1_1 mvn compile [INFO] --- javacc-maven-plugin:2.3:jjtree (jjtree) @ gs-wcs1_1 --- Java Compiler Compiler Version 4.0 (Tree Builder) (type "jjtree" with no arguments for help) "/Users/jgarnett/java/geoserver/jodygarnett/src/wcs1_1/target/jjtree/org/geoserver/wcs/kvp/rangesubset/ASTFieldI" does not exist. Will create one. ... Annotated grammar generated successfully in /Users/jgarnett/java/geoserver/jodygarnett/src/wcs1_1/target/jjtree/org/geoserver/wcs/kvp/rangesubset/rangeset.jj [INFO] [INFO] --- javacc-maven-plugin:2.3:javacc (javacc) @ gs-wcs1_1 --- Java Compiler Compiler Version 4.0 (Parser Generator) (type "javacc" with no arguments for help) Reading from file /Users/jgarnett/java/geoserver/jodygarnett/src/wcs1_1/target/jjtree/org/geoserver/wcs/kvp/rangesubset/rangeset.jj . . . File "" does not exist. Will create one. File "" does not exist. Will create one. ... Parser generated successfully. [INFO] [INFO] --- fmt-maven-plugin:2.4.0:format (default) @ gs-wcs1_1 --- [debug] Using AOSP style [INFO] Processed 47 files (0 reformatted). [INFO]
  34. 34. Developers Guide: Maven Eclipse Plugin Quickstart ● mvn eclipse:eclipse generates: ○ .project - eclipse project description allowing IDE to load an existing project ○ .classpath - used during compile and deploy, and ties projects in the IDE together ● Execute from root directory so resulting eclipse projects reference each other ● Add optional sources and/or javadocs -DdownloadSources -DdownloadJavadocs Eclipse IDE with mvn eclipse plugin
  35. 35. Eclipse IDE with mvn eclipse plugin Glitches ● maven eclipse plugin not really supported ○ But it works well :) ○ Faster that built-in eclipse functionality ● No sync, so if you change a pom.xml ○ run “mvn eclipse:eclipse” again ○ refresh in eclipse ● Both command line maven and eclipse generate to the same output directory ○ clean when switching to IDE ○ Use “mvn clean” for command line ○ Alternative: -DbuildOutputDirectory=bin Frustrating but fast, this is a “manual option” so you will need to duck out to the command line all the time :)
  36. 36. Running from IDE The quickstart instructions show how to run: 1. Locate web-app project 2. Set up a configuration to run org.geoserver.web.Start 3. Add program arguments to specify the data directory: -DGEOSERVER_DATA_DIR=/Users/home/java/geoserver/data/release
  37. 37. GeoServer Software Stack
  38. 38. Key Components of Software Stack ● GeoServer - "spring" application built with the following: ● GeoTools - GIS implementation(referencing, data formats, rendering) ● JTS Topology Suite - geometry implementation ● Java Advanced Imaging (JAI) - image processing by Sun/Oracle ● JAI-Image-IO (ImageIO) - image formats by Sun/Oracle ● ImageIO-EXT - geospatial image formats such as GeoTIFF ● JAI-EXT - geospatial operations with no-data and footprint support ○ this is a new addition for GeoServer 2.8 scheduled for September release ● JAI-Tools - helpful image processing tools ○ JAI-Tools-Jiffle - really cool "raster calculator" domain specific language
  39. 39. Creating a Custom Module
  40. 40. How GeoServer uses Modules The GeoServer “web application” is comprised of a series of modules: ● Modules are compiled and packaged into jars for distribution ● We will be creating a custom module for use in today’s course There are two good ways to work on a custom module: ● Alternative 1: Custom WebApp with Snapshots ○ Approached is used by project teams to make a custom web application for their customers ● Alternative 2: Community Module ○ Approached used for collaborative RnD work with the GeoServer community.
  41. 41. Alternative 1: Custom WebApp with Snapshots Approached is used by project teams to make a custom web application for their customers ● Pros: ○ Team members only have the modules they are working on in IDE, better on slow machines ○ Great control over exactly what is being published ● Cons: ○ Depends on publishing a nightly SNAPSHOT ○ Developers working 'downstream' from community and are not in position to quickly fix issues
  42. 42. ● project/pom.xml ○ has web-app and custom as modules project/custom/pom.xml ● project/custom/pom.xml ○ your custom function, process, and web pages ● project/web-app/pom.xml ○ depends on custom and community snapshots Alternative 1: Custom WebApp with Snapshots
  43. 43. Alternative 1: Custom WebApp with Snapshots Directory Structure project/pom.xml project/custom/pom.xml project/app/pom.xml
  44. 44. Approached used for collaborative RnD work with the GeoServer community. ● Pros: ○ Developers working 'upstream' with community and in position to quickly fix issues ○ Migration path to including work in geoserver release ● Cons: ○ the entire geoserver checkout may be a stretch for slow machines ○ Small risk of breaking the build on (and interrupting developers around the globe) Alternative 2: Community Module
  45. 45. Alternative 2: Community Module ● community/custom/pom.xml ○ Your custom function,process,web page etc.. ○ Module is a child of community. ● community/pom.xml ○ add profile to include your custom module (or modules) in the build ● web/app/pom.xml ○ Add profile to include dependencies on your custom module (or modules) ○ Profile used when we build a WAR or run GeoServer
  46. 46. Directory Structure src/community/pom.xml src/community/custom/pom.xml src/extension/… src/web/app/pom.xml - profile added to depend on custom! Alternative 2: Community Module
  47. 47. Alternative 2: Community Module src/community/custom/pom.xml <parent> <groupId>org.geoserver</groupId> <artifactId>community</artifactId> <version>2.15-SNAPSHOT</version> </parent> <groupId></groupId> <artifactId>gs-custom</artifactId> <packaging>jar</packaging> <version>2.15-SNAPSHOT</version> <name>Custom Module</name> this is the parent module this is our custom module artifact description
  48. 48. Alternative 2: Community Module src/community/pom.xml <profile> <id>custom</id> <modules> <module>custom</module> </modules> </profile> id of profile we will type on the command line folder name of your custom module
  49. 49. Alternative 2: Community Module src/web/app/pom.xml <profile> <id>custom</id> <dependencies> <dependency> <groupId></groupId> <artifactId>gs-custom</artifactId> <version>${project.version}</version> </dependency> </dependencies> </profile>
  50. 50. ● mvn eclipse:eclipse -Pcustom ○ pom.xml description generates eclipse .project and .classpath files ● Eclipse File --> Import and then General --> Existing Projects ○ import your geoserver/src folder ○ new projects, including custom, will be available to be imported ● Result: ○ maven projects (including custom) are tied together ○ You can now edit files and then immediately run from IDE ○ When debugging you can "live update" your code IDE Build with Custom Profile
  51. 51. GeoServer Service Implementation Dispatch, Service and Operations
  52. 52. Dispatcher ● Developers Guide: OWS Services ● Dispatcher reads the Service definitionsfrom applicationContext.xml ○ maps incoming service / version / request to appropriate implementation
  53. 53. applicationContext.xml <beans> <bean id="helloService" class="org.geoserver.custom.HelloWorld"/> <bean id="helloService-1.0.0" class="org.geoserver.platform.Service"> <constructor-arg index="0" value="hello"/> <constructor-arg index="1" ref="helloService"/> <constructor-arg index="2" value="1.0.0"/> <constructor-arg index="3"> <list> <value>sayHello</value> </list> </constructor-arg> </bean> </beans>
  54. 54. RequestResponseOutputFormat ● WMS, WFS and WCS services handle: ○ GET Requests defined using Request URL ○ POST Requests defined using Request XML body ● GET Requests ○ KVP Parsers and Handlers produce Request Object ○ Example: GetMapRequest ● POST Requests ○ XML "Bindings" are used with GeoTools GTXML parser to produce Request object ○ Example: GetMapRequest ● Dispatcher responsible for ○ looking up Response object and output format ○ Example: GetFeatureInfoResponse, CSVOutputFormat
  55. 55. Catalog Configuration and "Data Directory" access
  56. 56. Catalog ● Two implementations: ○ Data Directory - stored xml files using xstream library ■ Extended with hz-cluster-plugin and jms-cluster-plugin ○ JDBCConfig (community) - stored in database using jdbc ■ Extended with jdbcstore-plugin ● Configuration Model: ○ Catalog - data access object supporting lookup ○ WorkspaceInfo ○ StoreInfo (ie FeatureStoreInfo and CoverageStoreInfo) ○ LayerInfo / ResourceInfo ○ StyleInfo ● Internally details: ○ ResourcePool - internal cache for "datastore" connections ○ ResourceStore - "file" access to sld, template and icons
  57. 57. Catalog Design ● Configuration Proposal ○ original design documentation ○ Key feature for GeoServer 2.x ● GSIP 52 ○ Refactor out DAO for Catalog and Configuration ● GSIP 69 ○ Catalog scalability enhancements ● GSIP 106 ○ ResourceStore to replace file use ● GSIP 155 ○ Core improvements for large catalogs
  58. 58. Testing Server testing and quality assurance
  59. 59. Test Libraries and Tools ● JUnit ○ provides @Test annotations, good integration with Eclipse and Maven ● XMLUnit ○ asserts for DOMs ● easymock (we use an older version) ○ Used to create fake "mock" objects ● Mockrunner ○ provides a mock of ServletRequest and ServletRespose ● jacoco ○ measure test coverage
  60. 60. Testing ● GeoServerSystemTestSupport - 7 seconds ○ starts up a complete GeoServer based on test data ● GeoServerMockTestSupport - 1.5 seconds ○ provides a "complete" mocked GeoServer Catalog! ● Unit Test - 0.5 seconds ○ short, sweet, minimal setup ○ use a fake "mock" object to stub out complicated classes ● See Setup Instructions and Discussion: ○
  61. 61. GeoServerSystemTestSupport @TestSetup(run = TestSetupFrequency.REPEAT) public class HelloIntegrationTest extends GeoServerSystemTestSupport { @Test public void testSayService() throws Exception { String result = getAsString( "/ows?request=sayHello&service=hello&version=1.0.0" ); assertNotNull("Result expected", result); assertTrue("Expected messsage", result.contains("Hello")); assertTrue("Expect 5 Workspaces", result.contains("5")); } }
  62. 62. GeoServerMockTestSupport public class MockTest extends GeoServerMockTestSupport { @Test public void requestTest() throws Exception { HelloWorld service = new HelloWorld(); Catalog catalog = getCatalog(); service.setCatalog(catalog); HttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); service.sayHello( request, response ); String output = response.getOutputStreamContent(); assertNotNull("Result expected", output); assertTrue("Expected messsage", output.contains("Hello")); assertTrue("Expect 5 Workspaces", output.contains("5")); } }
  63. 63. UnitTest public class UnitTest { @Test public void requestTest() throws Exception { HelloWorld service = new HelloWorld(); Catalog catalog = createMock( "catalog", Catalog.class ); List<WorkspaceInfo> list = new ArrayList<WorkspaceInfo>(); for( int i=0; i<5;i++) list.add( createMock( "workspace "+i,WorkspaceInfo.class )); expects( catalog ).andReturn( list ); replay(catalog) service.setCatalog(catalog); HttpServletRequest request = new MockHttpServletRequest(); MockHttpServletResponse response = new MockHttpServletResponse(); service.sayHello( request, response ); String output = response.getOutputStreamContent(); assertNotNull("Result expected", output); assertTrue("Expected messsage", output.contains("Hello")); assertTrue("Expect 5 Workspaces", output.contains("5")); } }
  64. 64. Code Coverage ● Run jacoco report using provided profile: mvn test -Pjacoco ● The resulting report is in: target/site/jacoco/index.html ● Modules are required to have 40% coverage (and documentation) to be before being proposed as an extension
  65. 65. GeoServer Community Open source, open development
  66. 66. GeoServer Developers Guide ● Committing ● Submitting Patches ● Code Review ● Community Process ● GeoServer Improvement Proposals ● Community Modules ● Project Steering Committee
  67. 67. Committing ● OSGeo corporate and individual contributor agreements ● Community commit access ○ send an email the the developer list and ask ○ "play area" not subject to IP review, or included in the release ● Core commit access ○ nominated (after submitting several patches) ● Commit Guidelines ○ headers, code formatting ○ don't commit large binary data or jars (use maven)
  68. 68. Submitting Patches / Pull Requests ● GitHub Pull Requests (automated way to manage patches) ○ "Fork" GeoServer git repository ○ Create a "feature branch" to work on your fix ○ When ready publish your feature branch to your git repository ○ visit github page and create pull request ● Guidelines ○ Make sure you run mvn to fix formatting before making your commit! ○ Include only relevant changes ○ one thing at time ○ include a test case! ○ Tips: create a JIRA issue for the release notes! If not we can’t thank you!
  69. 69. Pull request: ● Everything needs a code review! ● Formatting is wrong? Update: We fixed it, code formater runs as part of the build :) ● The test case should show your fix ● Don’t forget the documentation ○ Changes the the user interface …. should also update the user guide! Code Reviews
  70. 70. Community Planning ● Previously we had roadmap (short term, long term, ….) ○ This was a terrible idea! ○ Release would always get delayed for “one more thing” ○ Disappointment - proposing an idea for a roadmap is not the same as having funding ● Time Boxed Release ○ new release release every 6 months ○ releases have 6 months support and 6 months maintenance ● Adding Features ○ GeoServer Improvement Process (GSIP) - ie change control request
  71. 71. GeoServer Improvement Process ● Change control for developers ● Create wiki page ○ there is a template ○ Include and design documents or timeframe concerns
  72. 72. Project Steering Committee ● Responsible for ○ voting on GSIP proposals ○ care and feeding of GeoServer ● Nominated based on community involvement / service ○ Ideally a mix of developers, management and user representation
  73. 73. Easy ways to get started!
  74. 74. Last friday of the month ● Coordinate on gitter! ○ Ask for code reviews! ○ Ask for help, suggestions, ● Use the bug tracker ○ Review new tickets ○ tickets labeled “sprint” are ■ good candidate for fix ■ has clear steps to reproduce ○ Comment on tickets that are incomplete Monthly bug stomp
  75. 75. Community Modules ● Easy way to get involved with GeoServer ○ Email to geoserver-devel to request community module(Project Steering Committee member will approve) ○ You are provided with commit access to work on your module ○ community modules can be "published" in the nightly build(But are NOT included in the official release) ● When your module is ready to "graduate" ○ review of headers / license ○ documentation and test "coverage" of 40% ○ When complete your module will move to extension/ folder (and be included in the official release)
  76. 76. Adventure and Exploration
  77. 77. Creating a Function ● GeoTools ○ Factory Tutorial ○ Function Tutorial ● Key concepts ○ Factory Service Provider Interface (SPI) ○ Factory Design Pattern ○ Function ● How to use ○ WFS Query ○ SLD Geometry Transformation ○ WPS
  78. 78. Creating a Process ● GeoTools ○ Process Tutorial ● GeoServer ○ WPS Services ● Key concepts ○ Factory Service Provider Interface (SPI) ○ Factory Design Pattern ○ Process ● How to use ○ WPS ○ Geometry Transformation ○ Rendering Transformation
  79. 79. Web Administration Application / Wicket UI ● GeoServer ○ Web User Interface ○ Wicket Development in GeoServer ● Key concepts ○ Apache Wicket ● How to use ○ Create admin page for service
  80. 80. REST Service ● GeoServer ○ Implementing a RESTful Service ● Key concepts ○ Spring, Spring Annotations ● How to use ○ Create REST endpoint for service configuration
  81. 81. Security ● GeoServer ○ Security ● Key concepts ○ GeoServerSecurityManager ● How to use ○ Check authentication and authorization