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.
Adopt OpenJDK 
Hackathon, 11 Dec. 2014
Agenda of the hackathon 
 Build OpenJDK 
 Improve OpenJDK 
 Write some tests 
 Create patch 
 Submit patch
Agenda of the hackathon 
 Build OpenJDK 
 Improve OpenJDK 
 Write some tests 
 Create patch 
 Submit patch 
 While b...
Let’s get it going 
 Import VM and login 
 Change to openjdk directory 
cd $SOURCE_CODE/jdk9 
 Get the sources 
bash ge...
OpenJDK overview 
 Free and open-source implementation of 
the Java Platform, Standard Edition 
 Base for the Oracle VM ...
Why bother? 
 Move Java forward 
 Give back something to the platform 
 Help our JUG gain its own identity and 
focus 
...
How can we help? 
 Introductory level 
◦ Fix compiler warnings 
◦ Generify, coinify and labdify internal APIs 
◦ Add new ...
Development process 
 Sign OCA 
 Find interesting bug or enhancement 
 Discuss with sponsoring project 
mailing list 
...
Task selection (1) 
 Add getStackTraceString() to 
Throwable 
 Usually people do: 
catch (MyException e) { 
StringWriter...
Task selection (2) 
 Generic support to Collection bulk 
methods 
 addAll, containsAll, removeAll, 
retainAll can only r...
Task selection (3) 
 Replace array parameters with 
varargs 
 Look throughout all internal APIs 
 Supported since JDK 1...
Write some tests 
 JTreg: the legacy 
◦ Java program with main method 
◦ If test fails, testcase should throw an exceptio...
Test “docklets” 
@test – defines a test. Mandatory. 
@run – tells how to perform a test. 
@summary – text description. 
@l...
TestNG support 
 TestNG is cool and nicely supported 
 TestNG test cases are run through jtreg 
 Two types of tests 
 ...
Create a patch 
 Let’s contribute 
cd $SOURCE_CODE/jdk9 
 Commit in Mercurial 
hg status 
hg commit 
 Run webrev 
ksh ....
Upcoming SlideShare
Loading in …5
×

First adoption hackathon at BGJUG

446 views

Published on

Introductory slides on what is OpenJDK and why and how we should contribute to it. Given to the Bulgarian JUG before the first real adopt OpenJDK hackathon

Published in: Software
  • Be the first to comment

  • Be the first to like this

First adoption hackathon at BGJUG

  1. 1. Adopt OpenJDK Hackathon, 11 Dec. 2014
  2. 2. Agenda of the hackathon  Build OpenJDK  Improve OpenJDK  Write some tests  Create patch  Submit patch
  3. 3. Agenda of the hackathon  Build OpenJDK  Improve OpenJDK  Write some tests  Create patch  Submit patch  While building… ◦ Intro to OpenJDK
  4. 4. Let’s get it going  Import VM and login  Change to openjdk directory cd $SOURCE_CODE/jdk9  Get the sources bash get_sources.sh  Configure bash configure  Make images make clean images
  5. 5. OpenJDK overview  Free and open-source implementation of the Java Platform, Standard Edition  Base for the Oracle VM  GPL v2 for the VMs and GPL v2 + classpath exception for class libraries  Major contributors: ◦ IBM ◦ Apple ◦ RedHat ◦ SAP ◦ A lot of JUGs
  6. 6. Why bother?  Move Java forward  Give back something to the platform  Help our JUG gain its own identity and focus  Acquire new knowledge  Have some fun and socialize
  7. 7. How can we help?  Introductory level ◦ Fix compiler warnings ◦ Generify, coinify and labdify internal APIs ◦ Add new tests, convert existing tests ◦ Fix typos, add javadoc  Next level ◦ Affiliate with an existing project (Jigsaw, Nashorn) ◦ Help with new stuff in project Valhalla
  8. 8. Development process  Sign OCA  Find interesting bug or enhancement  Discuss with sponsoring project mailing list  Get together and create a patch ◦ Don’t forget the tests!  Upload the patch and contact ML again  Be proud of yourself!
  9. 9. Task selection (1)  Add getStackTraceString() to Throwable  Usually people do: catch (MyException e) { StringWriter sw = new StringWriter(); e.printStackTrace( new PrintWriter(sw)); }  Look at existing solutions (Apache Commons)  https://bugs.openjdk.java.net/browse/JD K-5050783
  10. 10. Task selection (2)  Generic support to Collection bulk methods  addAll, containsAll, removeAll, retainAll can only receive other collections  You have to an intermediate Arrays.asList: collection.addAll(Arrays.asList("a", "b", "c"));  Consider using default methods  https://bugs.openjdk.java.net/browse/J DK-6201180
  11. 11. Task selection (3)  Replace array parameters with varargs  Look throughout all internal APIs  Supported since JDK 1.5  Discuss with Joe Darcy and team  https://bugs.openjdk.java.net/browse/J DK-4974893
  12. 12. Write some tests  JTreg: the legacy ◦ Java program with main method ◦ If test fails, testcase should throw an exception ◦ If it succeeds, testcase should return normally /* @test * @summary StringBuffer.isEmpty(); * @run main IsEmptyTest */ public class IsEmptyTest { public static void main(String[] args) { StringBuffer buffer = new StringBuffer(); if (!buffer.isEmpty()) { throw new RuntimeException("StringBuffer isEmpty on new object failed"); } } }
  13. 13. Test “docklets” @test – defines a test. Mandatory. @run – tells how to perform a test. @summary – text description. @library – reference library source files. @build – compile class or library before running test @bug – bug number reference @key – keywords
  14. 14. TestNG support  TestNG is cool and nicely supported  TestNG test cases are run through jtreg  Two types of tests  Type 1 ◦ Describe the test in JTreg “docklets” ◦ No main method required /* @test * @summary comments about your test; * @run testng YourTest */  Type 2 ◦ Describe the test in TEST.ROOT or TESTS.properties TestNG.dirs = . othervm.dirs = tck/java/time/chrono test/java/time/chrono test/java/time/format
  15. 15. Create a patch  Let’s contribute cd $SOURCE_CODE/jdk9  Commit in Mercurial hg status hg commit  Run webrev ksh ../webrev.ksh  Upload to web server $SOURCE_CODE/jdk9/webrev

×