| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| |
| <meta charset="UTF-8"> |
| <title>Contribution Tips</title> |
| <meta name="description" content="Apache TomEE"> |
| <meta name="author" content="Apache TomEE"> |
| <meta name="google-translate-customization" content="f36a520c08f4c9-0a04e86a9c075ce9-g265f3196f697cf8f-10"> |
| <meta http-equiv="Pragma" content="no-cache"> |
| <meta http-equiv="Expires" content="0"> |
| <meta http-equiv="Cache-Control" content="no-store, no-cache, must-revalidate, max-age=0"> |
| |
| <!-- Le HTML5 shim, for IE6-8 support of HTML elements --> |
| <!--[if lt IE 9]> |
| <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
| <![endif]--> |
| |
| <!-- Le styles --> |
| <link href="./../resources/css/bootstrap.css" rel="stylesheet"> |
| <link href="./../resources/css/prettify.css" rel="stylesheet"> |
| <!--link href="./../resources/css/bootstrap-mods.css" rel="stylesheet"--> |
| <link href="./../resources/css/main.css" rel="stylesheet"> |
| <link href="./../resources/font-awesome-4.6.3/css/font-awesome.min.css" rel="stylesheet"> |
| |
| <script type="text/javascript"> |
| var t = encodeURIComponent(document.title.replace(/^\s+|\s+$/g,"")); |
| var u = encodeURIComponent(""+document.URL); |
| |
| function fbshare () { |
| window.open( |
| "http://www.facebook.com/sharer/sharer.php?u="+u, |
| 'Share on Facebook', |
| 'width=640,height=426'); |
| }; |
| function gpshare () { |
| window.open( |
| "https://plus.google.com/share?url="+u, |
| 'Share on Google+', |
| 'width=584,height=385'); |
| }; |
| function twshare () { |
| window.open( |
| "https://twitter.com/intent/tweet?url="+u+"&text="+t, |
| 'Share on Twitter', |
| 'width=800,height=526'); |
| }; |
| function pinshare () { |
| window.open("//www.pinterest.com/pin/create/button/?url="+u+"&media=http%3A%2F%2Ftomee.apache.org%2Fresources%2Fimages%2Ffeather-logo.png&description="+t, |
| 'Share on Pinterest', |
| 'width=800,height=526'); |
| }; |
| </script> |
| |
| <!-- Le fav and touch icons --> |
| <link rel="shortcut icon" href="./../favicon.ico"> |
| <link rel="apple-touch-icon" href="./../resources/images/apple-touch-icon.png"> |
| <link rel="apple-touch-icon" sizes="72x72" href="./../resources/images/apple-touch-icon-72x72.png"> |
| <link rel="apple-touch-icon" sizes="114x114" href="./../resources/images/apple-touch-icon-114x114.png"> |
| |
| <script src="./../resources/js/prettify.js" type="text/javascript"></script> |
| <script src="./../resources/js/jquery-latest.js"></script> |
| <script src="http://platform.twitter.com/widgets.js" type="text/javascript"></script> |
| <script src="./../resources/js/common.js"></script> |
| <script src="./../resources/js/prettyprint.js"></script> |
| <!--script src="//assets.pinterest.com/js/pinit.js" type="text/javascript" async></script//--> |
| |
| <script type="text/javascript"> |
| |
| var _gaq = _gaq || []; |
| _gaq.push(['_setAccount', 'UA-2717626-1']); |
| _gaq.push(['_setDomainName', 'apache.org']); |
| _gaq.push(['_trackPageview']); |
| |
| (function() { |
| var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; |
| ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; |
| var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); |
| })(); |
| |
| </script> |
| </head> |
| |
| <body> |
| |
| <div class="topbar" data-dropdown="dropdown"> |
| <div class="fill"> |
| <div class="container"> |
| <a class="brand" href="./../index.html">Apache TomEE</a> |
| <ul class="nav"> |
| <li class="dropdown"> |
| <a class="dropdown-toggle" data-toggle="dropdown" href="#"> |
| Apache |
| <b class="caret"></b> |
| </a> |
| <ul class="dropdown-menu"> |
| <!-- <li><a href="./../misc/whoweare.html">Who we are?</a></li> --> |
| <!-- <li><a href="./../misc/heritage.html">Heritage</a></li> --> |
| <li><a href="http://www.apache.org">Apache Home</a></li> |
| <!-- <li><a href="./../misc/resources.html">Resources</a></li> --> |
| <li><a href="./../misc/contact.html">Contact</a></li> |
| <li><a href="./../misc/legal.html">Legal</a></li> |
| <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li> |
| <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> |
| <li class="divider"/> |
| <li><a href="http://www.apache.org/security">Security</a></li> |
| </ul> |
| </li> |
| <li><a href="./../index.html">Home</a></li> |
| <li><a href="./../downloads.html">Downloads</a></li> |
| <li><a href="./../documentation.html">Documentation</a></li> |
| <li><a href="./../examples-trunk/index.html">Examples</a></li> |
| <li><a href="./../support.html">Support</a></li> |
| <li><a href="./../contribute.html">Contribute</a></li> |
| <li><a href="./../security/index.html">Security</a></li> |
| </ul> |
| |
| <!-- Google CSE Search Box Begins --> |
| <FORM class="pull-right" id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse"> |
| <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90"> |
| <INPUT type="hidden" name="cof" value="FORID:0"> |
| <INPUT size="18" width="130" style="width:130px" name="q" type="text" placeholder="Search"> |
| </FORM> |
| <!--<SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT>--> |
| <!-- Google CSE Search Box Ends --> |
| </div> |
| </div> |
| </div> |
| |
| <div class="container"> |
| |
| |
| <div class="page-header"> |
| <small><a href="./../index.html">Home</a> » <a href="./../dev/">Dev</a></small><br> |
| <h1>Contribution Tips |
| |
| <div style="float: right; position: relative; bottom: -10px; "> |
| <a onclick="javascript:gpshare()" class="gp-share sprite" title="Share on Google+">share [gp]</a> |
| <a onclick="javascript:fbshare()" class="fb-share sprite" title="Share on Facebook">share [fb]</a> |
| <a onclick="javascript:twshare()" class="tw-share sprite" title="Share on Twitter">share [tw]</a> |
| <a onclick="javascript:pinshare()" class="pin-share sprite" title="Share on Pinterest">share [pin]</a> |
| <a data-toggle="modal" href="#edit" class="edit-page" title="Contribute to this Page">contribute</a> |
| </div> |
| </h1> |
| </div> |
| |
| <p><a name="ContributionTips-Firststeps"></a></p> |
| |
| <h1>First steps</h1> |
| |
| <ol> |
| <li>Subscribe to the <a href="mailto:dev-subscribe@tomee.apache.org">developer mailing list</a> |
| and say Hi</li> |
| <li>Get the source code with svn |
| <ul> |
| <li>svn https://svn.apache.org/repos/asf/tomee/tomee/trunk</li> |
| </ul></li> |
| <li>Build the code (maven 3.0.5 or better required) |
| <ul> |
| <li>mvn clean install</li> |
| </ul></li> |
| </ol> |
| |
| <p>Play around with the examples under the examples/ directory. Some of the |
| neater ones are (ordered simple to complex):</p> |
| |
| <ul> |
| <li><a href="http://tomee.apache.org/examples-trunk/simple-stateless/README.html">simple-stateless</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/simple-stateful/README.html">simple-stateful</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/simple-singleton/README.html">simple-singleton</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/simple-mdb/README.html">simple-mdb</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/async-methods/README.html">async-methods</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/schedule-methods/README.html">schedule-methods</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/injection-of/README.html">injection-of-env-entry</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/injection-of/README.html">injection-of-ejbs</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/injection-of-datasource/README.html">injection-of-datasource</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/injection-of-entitymanager/README.html">injection-of-entitymanager</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/testcase-injection/README.html">testcase-injection</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/testing-transactions/README.html">testing-transactions</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/transaction-rollback/README.html">transaction-rollback</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/testing-security/README.html">testing-security</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/testing-security-2/README.html">testing-security-2</a></li> |
| <li><a href="http://tomee.apache.org/examples-trunk/simple-webservice/README.html">simple-webservice</a></li> |
| </ul> |
| |
| <p><a name="ContributionTips-Whatistheprocess?"></a></p> |
| |
| <h1>What is the process?</h1> |
| |
| <pre><code>public void contributeToOpenSource() { |
| |
| boolean stillInterestedAndHavingFun = true; |
| int taskSize = 1; // start small! |
| |
| contributing: |
| while (stillInterestedAndHavingFun) { |
| |
| Task task = findSomethingInteresting(taskSize++); |
| |
| if (!task.hasJira()) { |
| createJira(task); |
| } else { |
| requestToBeAssignedToJira(task.jiraId()); |
| } |
| |
| while (task.inProgress()) { |
| |
| chatOnListALittleGetCleverIdeas(task, new Ideas(task)); |
| hackALittle(task); |
| |
| if (task.tooHard() || task.notFun()) { |
| // no big deal, try again with something else |
| taskSize--; |
| continue contributing; |
| } |
| } |
| |
| File patchFile = createSvnOrGitPatch(task); |
| attachToJira(task.jiraId(), patchFile); |
| askForReviewOnList(task.jiraId()); |
| |
| while (!committed(patchFile)) { |
| |
| try { |
| pokeAtSometingElse(); |
| helpOnUserList(); |
| dayDream(); |
| } catch (MoreThanAWeekException e) { |
| // Assume it fell off the radar -- happens. |
| // Evidence we need more committers. |
| bumpThreadOnList(task); |
| } |
| } |
| } |
| |
| } |
| </code></pre> |
| |
| <p>After a while when people feel comfortable with you as contributor, they |
| vote you in as a committer and ... big surprise ... there's almost no |
| change in the daily routine. You get access to svn and pretty much |
| everything else stays the same. Instead of submitting patches, now you |
| have to help review them and commit them. Instead of learning how to |
| contribute to an open source project, now you have to learn how to help |
| others get involved. And of course it doesn't happen all at once, you |
| never stop learning these things and you never stop wishing you had more |
| time.</p> |
| |
| <p>No one cares how much code you can write or how fast you can write it. We |
| all just contribute what we can when we can and there are no expectations |
| on how much, how often, or where.</p> |
| |
| <p>It's very much about the journey and there is no real end as long as you're |
| having fun and learning.</p> |
| |
| <p>Probably finding something to do when you do have time is the hardest part |
| ... that never changes.</p> |
| |
| <p><a name="ContributionTips-BeBrave"></a></p> |
| |
| <h1>Be Brave</h1> |
| |
| <p>Don't assume everything has already been discussed a million times and |
| you're the only one who doesn't know and so you shouldn't bother anyone and |
| should just figure it out on your own. That thinking is your enemy. Don't |
| do that or you will get nowhere ... very slowly. So slowly that now you |
| feel you really can't ask about it because surely everyone assumes you know |
| it or have done it by now. That thinking is a terrible trap. Ask |
| questions. Post your thoughts.</p> |
| |
| <p>Don't worry about asking "stupid" questions on the list -- even simple |
| questions have great value. They often lead to surprisingly good |
| discussions. They also have a profound impact on the people around you, |
| the ones you don't see.</p> |
| |
| <p>There are always a handful of people silently reading the list and wishing |
| they could participate, but are less brave. Whenever someone like you |
| finally does show up and asks basic questions and shows it's ok, we usually |
| get another 1 or 2 new faces who suddenly find the courage to speak up.</p> |
| |
| <p>Maybe it's like Karaoke; if the people singing sound like you when you |
| sing, there are better odds you might get up and sign too. Seeing people |
| like yourself do the things you want to do is inspiring.</p> |
| |
| <p><a name="ContributionTips-StartSmall"></a></p> |
| |
| <h1>Start Small</h1> |
| |
| <p>You may suddenly get a creative surge and see many many things that could |
| be done. One thing you learn about open source is that you never know when |
| life is going to intervene and you have to stop. So it's always really |
| good to get a little tiny thing working, checked in, and just grow it |
| iteratively as time permits. It is a practice that is key for people of |
| any skill level. And it goes wonderfully with Open Source as it adds |
| plenty of space for new ideas. Stone soup starts with the stone, not the |
| soup!</p> |
| |
| <p>So no matter how big the idea or task, ask yourself "do I really need all |
| of this to get started?". Start with the tiniest possible version. And |
| then cut it down again :)</p> |
| |
| <p>Code is easier to grow than change. And with today's refactoring tools |
| even change is pretty easy. What's hard is taking a big piece of code and |
| jamming it into another big piece of code. Don't work too long in |
| isolation.</p> |
| |
| <p>Start small, get it checked in (or patch submitted) and work iteratively.</p> |
| |
| <p><a name="ContributionTips-Thingsthatalwaysneeddoing"></a></p> |
| |
| <h1>Things that always need doing</h1> |
| |
| <ul> |
| <li>Final variables & fields are preferred where possible, but a lot of the |
| code is old. Feel free to add them and hand the code back.</li> |
| <li>If you have any skills with code coverage tools, then you'll probably |
| find way too much to do! Tests are always welcome.</li> |
| <li>There are over a 1,000 TODO comments in the code. Maybe some should be |
| deleted. Maybe some could be completed. They probably all should have a |
| JIRA id on them.</li> |
| <li>Pick a random class, see if you can figure out what it is doing and |
| javadoc it.</li> |
| <li>Add @Override where applicable</li> |
| <li>Intellij has an 'Inspect Code' feature. Yikes does it produce a lot of |
| output.</li> |
| <li>No doubt there is some exception handling that can be greatly improved.</li> |
| </ul> |
| |
| <p>Obviously, one could get quite bored doing just the above. But sometimes |
| the above tasks can lead to more fun and exciting things. Anything that |
| gets you in and looking at code and actually touching and changing it |
| usually results in questions, discussions and ideas... then little passions |
| and late nights and lack of sleep and caffeine abuse.</p> |
| |
| <p><a name="ContributionTips-Thingstoavoid"></a></p> |
| |
| <h1>Things to avoid</h1> |
| |
| <p><a name="ContributionTips-Hugepatches"></a></p> |
| |
| <h4>Huge patches</h4> |
| |
| <p>Huge patches are hard to digest. Try to avoid them whenever possible. Any |
| step forward is a good one. Small steps allow people to see where you're |
| headed and give input. That's true regardless if you are a committer or |
| contributor.</p> |
| |
| <p><a name="ContributionTips-Becarefulwithreformatting"></a></p> |
| |
| <h4>Be careful with reformatting</h4> |
| |
| <p>Try to never mix logic changes with code reformatting. It makes it nearly |
| impossible for others to see what the actual change was.</p> |
| |
| <ul> |
| <li>If you are a committer and want to reformat something, do the reformat |
| as a separate commit before or after the real change. As long as they are |
| separate and clearly marked it should be easy for people to see what is |
| going on.</li> |
| <li>If you are a contributor and want to reformat something, maybe suggest |
| it on the list, but avoid submitting patches that are just reformatting.</li> |
| </ul> |
| |
| |
| |
| |
| <div id="edit" class="modal hide fade in" style="display: none; "> |
| <div class="modal-header"> |
| <a class="close" data-dismiss="modal">x</a> |
| |
| <h3>Thank you for contributing to the documentation!</h3> |
| </div> |
| <div class="modal-body"> |
| <h4>Any help with the documentation is greatly appreciated.</h4> |
| <p>All edits are reviewed before going live, so feel free to do much more than fix typos or links. If you see a page that could benefit from an entire rewrite, we'd be thrilled to review it. Don't be surprised if we like it so much we ask you for help with other pages :)</p> |
| <small>NOTICE: unless indicated otherwise on the pages in question, all editable content available from apache.org is presumed to be licensed under the Apache License (AL) version 2.0 and hence all submissions to apache.org treated as formal Contributions under the license terms.</small> |
| <!--[if gt IE 6]> |
| <h4>Internet Explorer Users</h4> |
| <p>If you are not an Apache committer, click the Yes link and enter a <i>anonymous</i> for the username and leave the password empty</p> |
| <![endif]--> |
| |
| </div> |
| <div class="modal-footer"> |
| Do you have an Apache ID? |
| <a href="javascript:void(location.href='https://cms.apache.org/redirect?uri='+escape(location.href))" class="btn">Yes</a> |
| <a href="javascript:void(location.href='https://anonymous:@cms.apache.org/redirect?uri='+escape(location.href))" class="btn">No</a> |
| </div> |
| </div> |
| <script src="./../resources/js/bootstrap-modal.js"></script> |
| |
| <footer> |
| <p>Copyright © 1999-2016 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. |
| Apache TomEE, TomEE, Apache, the Apache feather logo, and the Apache TomEE project logo are trademarks of The Apache Software Foundation. |
| All other marks mentioned may be trademarks or registered trademarks of their respective owners.</p> |
| </footer> |
| |
| </div> <!-- /container --> |
| |
| <!-- Javascript |
| ================================================== --> |
| <!-- Placed at the end of the document so the pages load faster --> |
| <script src="./../resources/js/bootstrap-dropdown.js"></script> |
| |
| </body> |
| </html> |