<!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>&nbsp;&raquo&nbsp;<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 &amp; 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 &copy; 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>
