tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Ulrich Stärk <...@spielviel.de>
Subject Re: [1/3] git commit: TAP5-2065 Publish MongoClient and DB as tapestry services
Date Wed, 06 Feb 2013 15:07:50 GMT
Looks good, thanks!

Uli

On 06.02.2013 15:49, Massimo Lusetti wrote:
> Thanks, please check if now is correct.
> 
> 
> On Wed, Feb 6, 2013 at 9:52 AM, Ulrich Stärk <uli@spielviel.de> wrote:
> 
>> The LICENSE file contains the licenses relevant to that module only. The
>> LICENSE file you checked in
>> contains references to javassist, tapestry-ioc, and the MPL, all of which
>> are irrelevant for
>> tapestry-mongodb. In fact, since you are not distributing any code or
>> dependency that is not
>> AL-licensed, the LICENSE file should only contain the AL. You are,
>> however, depending on the mongodb
>> java driver, which is licensed under the AL. An entry for that in NOTICE
>> is not necessary but good
>> practice IMO.
>>
>> See [1] for a good example of a LICENSE file, [2] for a sample NOTICE
>> file, and [3] for more
>> information about the ASF's licensing policies.
>>
>> Cheers,
>>
>> Uli
>>
>> [1] http://svn.apache.org/repos/asf/httpd/httpd/trunk/LICENSE
>> [2] http://svn.apache.org/repos/asf/httpd/httpd/trunk/NOTICE
>> [3] http://www.apache.org/legal/
>>
>> On 06.02.2013 09:26, Massimo Lusetti wrote:
>>> Sorry but I don't know how I should update the license, would you mind to
>>> explain a little more?
>>>
>>>
>>> On Wed, Feb 6, 2013 at 12:30 AM, Ulrich Stärk <uli@spielviel.de> wrote:
>>>
>>>> Please update the LICENSE.txt file to match the actual requirements for
>>>> this module. Simply copying
>>>> it over from tapestry-ioc is NOT sufficient.
>>>>
>>>> Uli
>>>>
>>>> On 05.02.2013 19:21, mlusetti@apache.org wrote:
>>>>> TAP5-2065 Publish MongoClient and DB as tapestry services
>>>>>
>>>>>
>>>>> Project: http://git-wip-us.apache.org/repos/asf/tapestry-5/repo
>>>>> Commit:
>>>> http://git-wip-us.apache.org/repos/asf/tapestry-5/commit/dd299fae
>>>>> Tree: http://git-wip-us.apache.org/repos/asf/tapestry-5/tree/dd299fae
>>>>> Diff: http://git-wip-us.apache.org/repos/asf/tapestry-5/diff/dd299fae
>>>>>
>>>>> Branch: refs/heads/master
>>>>> Commit: dd299faef9d7e2021a0866bc473ca22f89a71a5e
>>>>> Parents: 1e353b6
>>>>> Author: Massimo Lusetti <mlusetti@apache.org>
>>>>> Authored: Tue Feb 5 19:17:32 2013 +0100
>>>>> Committer: Massimo Lusetti <mlusetti@apache.org>
>>>>> Committed: Tue Feb 5 19:21:21 2013 +0100
>>>>>
>>>>> ----------------------------------------------------------------------
>>>>>  tapestry-mongodb/LICENSE.txt                       |  380
>>>> +++++++++++++++
>>>>>  tapestry-mongodb/NOTICE.txt                        |    2 +
>>>>>  tapestry-mongodb/build.gradle                      |   24 +
>>>>>  .../tapestry5/internal/mongodb/MongoDBImpl.java    |   81 +++
>>>>>  .../internal/mongodb/MongoDBSourceImpl.java        |   58 +++
>>>>>  .../java/org/apache/tapestry5/mongodb/MongoDB.java |   27 +
>>>>>  .../apache/tapestry5/mongodb/MongoDBSource.java    |   17 +
>>>>>  .../apache/tapestry5/mongodb/MongoDBSymbols.java   |   61 +++
>>>>>  .../apache/tapestry5/mongodb/MongodbModule.java    |  123 +++++
>>>>>  tapestry-mongodb/src/test/conf/testng.xml          |   24 +
>>>>>  .../src/test/groovy/MongoDBSpec.groovy             |   93 ++++
>>>>>  .../internal/mongodb/MongoDBTestModule.java        |   33 ++
>>>>>  .../apache/tapestry5/internal/mongodb/People.java  |   50 ++
>>>>>  13 files changed, 973 insertions(+), 0 deletions(-)
>>>>> ----------------------------------------------------------------------
>>>>>
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/LICENSE.txt
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/tapestry-mongodb/LICENSE.txt
>> b/tapestry-mongodb/LICENSE.txt
>>>>> new file mode 100644
>>>>> index 0000000..61b38cc
>>>>> --- /dev/null
>>>>> +++ b/tapestry-mongodb/LICENSE.txt
>>>>> @@ -0,0 +1,380 @@
>>>>> +
>>>>> +                                 Apache License
>>>>> +                           Version 2.0, January 2004
>>>>> +                        http://www.apache.org/licenses/
>>>>> +
>>>>> +   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
>>>>> +
>>>>> +   1. Definitions.
>>>>> +
>>>>> +      "License" shall mean the terms and conditions for use,
>>>> reproduction,
>>>>> +      and distribution as defined by Sections 1 through 9 of this
>>>> document.
>>>>> +
>>>>> +      "Licensor" shall mean the copyright owner or entity authorized
>> by
>>>>> +      the copyright owner that is granting the License.
>>>>> +
>>>>> +      "Legal Entity" shall mean the union of the acting entity and all
>>>>> +      other entities that control, are controlled by, or are under
>>>> common
>>>>> +      control with that entity. For the purposes of this definition,
>>>>> +      "control" means (i) the power, direct or indirect, to cause the
>>>>> +      direction or management of such entity, whether by contract or
>>>>> +      otherwise, or (ii) ownership of fifty percent (50%) or more of
>> the
>>>>> +      outstanding shares, or (iii) beneficial ownership of such
>> entity.
>>>>> +
>>>>> +      "You" (or "Your") shall mean an individual or Legal Entity
>>>>> +      exercising permissions granted by this License.
>>>>> +
>>>>> +      "Source" form shall mean the preferred form for making
>>>> modifications,
>>>>> +      including but not limited to software source code, documentation
>>>>> +      source, and configuration files.
>>>>> +
>>>>> +      "Object" form shall mean any form resulting from mechanical
>>>>> +      transformation or translation of a Source form, including but
>>>>> +      not limited to compiled object code, generated documentation,
>>>>> +      and conversions to other media types.
>>>>> +
>>>>> +      "Work" shall mean the work of authorship, whether in Source or
>>>>> +      Object form, made available under the License, as indicated by a
>>>>> +      copyright notice that is included in or attached to the work
>>>>> +      (an example is provided in the Appendix below).
>>>>> +
>>>>> +      "Derivative Works" shall mean any work, whether in Source or
>>>> Object
>>>>> +      form, that is based on (or derived from) the Work and for which
>>>> the
>>>>> +      editorial revisions, annotations, elaborations, or other
>>>> modifications
>>>>> +      represent, as a whole, an original work of authorship. For the
>>>> purposes
>>>>> +      of this License, Derivative Works shall not include works that
>>>> remain
>>>>> +      separable from, or merely link (or bind by name) to the
>>>> interfaces of,
>>>>> +      the Work and Derivative Works thereof.
>>>>> +
>>>>> +      "Contribution" shall mean any work of authorship, including
>>>>> +      the original version of the Work and any modifications or
>>>> additions
>>>>> +      to that Work or Derivative Works thereof, that is intentionally
>>>>> +      submitted to Licensor for inclusion in the Work by the copyright
>>>> owner
>>>>> +      or by an individual or Legal Entity authorized to submit on
>>>> behalf of
>>>>> +      the copyright owner. For the purposes of this definition,
>>>> "submitted"
>>>>> +      means any form of electronic, verbal, or written communication
>>>> sent
>>>>> +      to the Licensor or its representatives, including but not
>> limited
>>>> to
>>>>> +      communication on electronic mailing lists, source code control
>>>> systems,
>>>>> +      and issue tracking systems that are managed by, or on behalf of,
>>>> the
>>>>> +      Licensor for the purpose of discussing and improving the Work,
>> but
>>>>> +      excluding communication that is conspicuously marked or
>> otherwise
>>>>> +      designated in writing by the copyright owner as "Not a
>>>> Contribution."
>>>>> +
>>>>> +      "Contributor" shall mean Licensor and any individual or Legal
>>>> Entity
>>>>> +      on behalf of whom a Contribution has been received by Licensor
>> and
>>>>> +      subsequently incorporated within the Work.
>>>>> +
>>>>> +   2. Grant of Copyright License. Subject to the terms and conditions
>> of
>>>>> +      this License, each Contributor hereby grants to You a perpetual,
>>>>> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>>>>> +      copyright license to reproduce, prepare Derivative Works of,
>>>>> +      publicly display, publicly perform, sublicense, and distribute
>> the
>>>>> +      Work and such Derivative Works in Source or Object form.
>>>>> +
>>>>> +   3. Grant of Patent License. Subject to the terms and conditions of
>>>>> +      this License, each Contributor hereby grants to You a perpetual,
>>>>> +      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
>>>>> +      (except as stated in this section) patent license to make, have
>>>> made,
>>>>> +      use, offer to sell, sell, import, and otherwise transfer the
>> Work,
>>>>> +      where such license applies only to those patent claims
>> licensable
>>>>> +      by such Contributor that are necessarily infringed by their
>>>>> +      Contribution(s) alone or by combination of their Contribution(s)
>>>>> +      with the Work to which such Contribution(s) was submitted. If
>> You
>>>>> +      institute patent litigation against any entity (including a
>>>>> +      cross-claim or counterclaim in a lawsuit) alleging that the Work
>>>>> +      or a Contribution incorporated within the Work constitutes
>> direct
>>>>> +      or contributory patent infringement, then any patent licenses
>>>>> +      granted to You under this License for that Work shall terminate
>>>>> +      as of the date such litigation is filed.
>>>>> +
>>>>> +   4. Redistribution. You may reproduce and distribute copies of the
>>>>> +      Work or Derivative Works thereof in any medium, with or without
>>>>> +      modifications, and in Source or Object form, provided that You
>>>>> +      meet the following conditions:
>>>>> +
>>>>> +      (a) You must give any other recipients of the Work or
>>>>> +          Derivative Works a copy of this License; and
>>>>> +
>>>>> +      (b) You must cause any modified files to carry prominent notices
>>>>> +          stating that You changed the files; and
>>>>> +
>>>>> +      (c) You must retain, in the Source form of any Derivative Works
>>>>> +          that You distribute, all copyright, patent, trademark, and
>>>>> +          attribution notices from the Source form of the Work,
>>>>> +          excluding those notices that do not pertain to any part of
>>>>> +          the Derivative Works; and
>>>>> +
>>>>> +      (d) If the Work includes a "NOTICE" text file as part of its
>>>>> +          distribution, then any Derivative Works that You distribute
>>>> must
>>>>> +          include a readable copy of the attribution notices contained
>>>>> +          within such NOTICE file, excluding those notices that do not
>>>>> +          pertain to any part of the Derivative Works, in at least one
>>>>> +          of the following places: within a NOTICE text file
>> distributed
>>>>> +          as part of the Derivative Works; within the Source form or
>>>>> +          documentation, if provided along with the Derivative Works;
>>>> or,
>>>>> +          within a display generated by the Derivative Works, if and
>>>>> +          wherever such third-party notices normally appear. The
>>>> contents
>>>>> +          of the NOTICE file are for informational purposes only and
>>>>> +          do not modify the License. You may add Your own attribution
>>>>> +          notices within Derivative Works that You distribute,
>> alongside
>>>>> +          or as an addendum to the NOTICE text from the Work, provided
>>>>> +          that such additional attribution notices cannot be construed
>>>>> +          as modifying the License.
>>>>> +
>>>>> +      You may add Your own copyright statement to Your modifications
>> and
>>>>> +      may provide additional or different license terms and conditions
>>>>> +      for use, reproduction, or distribution of Your modifications, or
>>>>> +      for any such Derivative Works as a whole, provided Your use,
>>>>> +      reproduction, and distribution of the Work otherwise complies
>> with
>>>>> +      the conditions stated in this License.
>>>>> +
>>>>> +   5. Submission of Contributions. Unless You explicitly state
>>>> otherwise,
>>>>> +      any Contribution intentionally submitted for inclusion in the
>> Work
>>>>> +      by You to the Licensor shall be under the terms and conditions
>> of
>>>>> +      this License, without any additional terms or conditions.
>>>>> +      Notwithstanding the above, nothing herein shall supersede or
>>>> modify
>>>>> +      the terms of any separate license agreement you may have
>> executed
>>>>> +      with Licensor regarding such Contributions.
>>>>> +
>>>>> +   6. Trademarks. This License does not grant permission to use the
>>>> trade
>>>>> +      names, trademarks, service marks, or product names of the
>>>> Licensor,
>>>>> +      except as required for reasonable and customary use in
>> describing
>>>> the
>>>>> +      origin of the Work and reproducing the content of the NOTICE
>> file.
>>>>> +
>>>>> +   7. Disclaimer of Warranty. Unless required by applicable law or
>>>>> +      agreed to in writing, Licensor provides the Work (and each
>>>>> +      Contributor provides its Contributions) on an "AS IS" BASIS,
>>>>> +      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>>> +      implied, including, without limitation, any warranties or
>>>> conditions
>>>>> +      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
>>>>> +      PARTICULAR PURPOSE. You are solely responsible for determining
>> the
>>>>> +      appropriateness of using or redistributing the Work and assume
>> any
>>>>> +      risks associated with Your exercise of permissions under this
>>>> License.
>>>>> +
>>>>> +   8. Limitation of Liability. In no event and under no legal theory,
>>>>> +      whether in tort (including negligence), contract, or otherwise,
>>>>> +      unless required by applicable law (such as deliberate and
>> grossly
>>>>> +      negligent acts) or agreed to in writing, shall any Contributor
>> be
>>>>> +      liable to You for damages, including any direct, indirect,
>>>> special,
>>>>> +      incidental, or consequential damages of any character arising
>> as a
>>>>> +      result of this License or out of the use or inability to use the
>>>>> +      Work (including but not limited to damages for loss of goodwill,
>>>>> +      work stoppage, computer failure or malfunction, or any and all
>>>>> +      other commercial damages or losses), even if such Contributor
>>>>> +      has been advised of the possibility of such damages.
>>>>> +
>>>>> +   9. Accepting Warranty or Additional Liability. While redistributing
>>>>> +      the Work or Derivative Works thereof, You may choose to offer,
>>>>> +      and charge a fee for, acceptance of support, warranty,
>> indemnity,
>>>>> +      or other liability obligations and/or rights consistent with
>> this
>>>>> +      License. However, in accepting such obligations, You may act
>> only
>>>>> +      on Your own behalf and on Your sole responsibility, not on
>> behalf
>>>>> +      of any other Contributor, and only if You agree to indemnify,
>>>>> +      defend, and hold each Contributor harmless for any liability
>>>>> +      incurred by, or claims asserted against, such Contributor by
>>>> reason
>>>>> +      of your accepting any such warranty or additional liability.
>>>>> +
>>>>> +   END OF TERMS AND CONDITIONS
>>>>> +
>>>>> +   APPENDIX: How to apply the Apache License to your work.
>>>>> +
>>>>> +      To apply the Apache License to your work, attach the following
>>>>> +      boilerplate notice, with the fields enclosed by brackets "[]"
>>>>> +      replaced with your own identifying information. (Don't include
>>>>> +      the brackets!)  The text should be enclosed in the appropriate
>>>>> +      comment syntax for the file format. We also recommend that a
>>>>> +      file or class name and description of purpose be included on the
>>>>> +      same "printed page" as the copyright notice for easier
>>>>> +      identification within third-party archives.
>>>>> +
>>>>> +   Copyright [yyyy] [name of copyright owner]
>>>>> +
>>>>> +   Licensed under the Apache License, Version 2.0 (the "License");
>>>>> +   you may not use this file except in compliance with the License.
>>>>> +   You may obtain a copy of the License at
>>>>> +
>>>>> +       http://www.apache.org/licenses/LICENSE-2.0
>>>>> +
>>>>> +   Unless required by applicable law or agreed to in writing, software
>>>>> +   distributed under the License is distributed on an "AS IS" BASIS,
>>>>> +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>>> +   See the License for the specific language governing permissions and
>>>>> +   limitations under the License.
>>>>> +
>>>>> +
>>>>>
>>>>
>> +-------------------------------------------------------------------------------
>>>>> +
>>>>> +JAVASSIST
>>>>> +
>>>>> +Javassist is not bundled with tapestry-ioc, but tapestry-ioc is not
>>>> functional without Javassist.
>>>>> +Javassist is distributed under a dual license: Mozilla Public License
>>>> or LGPL (Lesser Gnu Public License). Tapestry
>>>>> +invokes the MPL for compatibility with the Apache Software License.
>>>>> +
>>>>> +MOZILLA PUBLIC LICENSE
>>>>> +Version 1.1
>>>>> +
>>>>> +1. Definitions.
>>>>> +
>>>>> +      1.0.1. "Commercial Use" means distribution or otherwise making
>>>> the Covered Code available to a third party.
>>>>> +
>>>>> +      1.1. ''Contributor'' means each entity that creates or
>>>> contributes to the creation of Modifications.
>>>>> +
>>>>> +      1.2. ''Contributor Version'' means the combination of the
>>>> Original Code, prior Modifications used by a Contributor, and the
>>>> Modifications made by that particular Contributor.
>>>>> +
>>>>> +      1.3. ''Covered Code'' means the Original Code or Modifications
>> or
>>>> the combination of the Original Code and Modifications, in each case
>>>> including portions thereof.
>>>>> +
>>>>> +      1.4. ''Electronic Distribution Mechanism'' means a mechanism
>>>> generally accepted in the software development community for the
>> electronic
>>>> transfer of data.
>>>>> +
>>>>> +      1.5. ''Executable'' means Covered Code in any form other than
>>>> Source Code.
>>>>> +
>>>>> +      1.6. ''Initial Developer'' means the individual or entity
>>>> identified as the Initial Developer in the Source Code notice required
>> by
>>>> Exhibit A.
>>>>> +
>>>>> +      1.7. ''Larger Work'' means a work which combines Covered Code or
>>>> portions thereof with code not governed by the terms of this License.
>>>>> +
>>>>> +      1.8. ''License'' means this document.
>>>>> +
>>>>> +      1.8.1. "Licensable" means having the right to grant, to the
>>>> maximum extent possible, whether at the time of the initial grant or
>>>> subsequently acquired, any and all of the rights conveyed herein.
>>>>> +
>>>>> +      1.9. ''Modifications'' means any addition to or deletion from
>> the
>>>> substance or structure of either the Original Code or any previous
>>>> Modifications. When Covered Code is released as a series of files, a
>>>> Modification is:
>>>>> +            A. Any addition to or deletion from the contents of a file
>>>> containing Original Code or previous Modifications.
>>>>> +
>>>>> +            B. Any new file that contains any part of the Original
>> Code
>>>> or previous Modifications.
>>>>> +
>>>>> +      1.10. ''Original Code'' means Source Code of computer software
>>>> code which is described in the Source Code notice required by Exhibit A
>> as
>>>> Original Code, and which, at the time of its release under this License
>> is
>>>> not already Covered Code governed by this License.
>>>>> +
>>>>> +      1.10.1. "Patent Claims" means any patent claim(s), now owned or
>>>> hereafter acquired, including without limitation,  method, process, and
>>>> apparatus claims, in any patent Licensable by grantor.
>>>>> +
>>>>> +      1.11. ''Source Code'' means the preferred form of the Covered
>>>> Code for making modifications to it, including all modules it contains,
>>>> plus any associated interface definition files, scripts used to control
>>>> compilation and installation of an Executable, or source code
>> differential
>>>> comparisons against either the Original Code or another well known,
>>>> available Covered Code of the Contributor's choice. The Source Code can
>> be
>>>> in a compressed or archival form, provided the appropriate
>> decompression or
>>>> de-archiving software is widely available for no charge.
>>>>> +
>>>>> +      1.12. "You'' (or "Your")  means an individual or a legal entity
>>>> exercising rights under, and complying with all of the terms of, this
>>>> License or a future version of this License issued under Section 6.1.
>> For
>>>> legal entities, "You'' includes any entity which controls, is controlled
>>>> by, or is under common control with You. For purposes of this
>> definition,
>>>> "control'' means (a) the power, direct or indirect, to cause the
>> direction
>>>> or management of such entity, whether by contract or otherwise, or (b)
>>>> ownership of more than fifty percent (50%) of the outstanding shares or
>>>> beneficial ownership of such entity.
>>>>> +
>>>>> +2. Source Code License.
>>>>> +
>>>>> +      2.1. The Initial Developer Grant.
>>>>> +      The Initial Developer hereby grants You a world-wide,
>>>> royalty-free, non-exclusive license, subject to third party intellectual
>>>> property claims:
>>>>> +            (a)  under intellectual property rights (other than patent
>>>> or trademark) Licensable by Initial Developer to use, reproduce, modify,
>>>> display, perform, sublicense and distribute the Original Code (or
>> portions
>>>> thereof) with or without Modifications, and/or as part of a Larger
>> Work; and
>>>>> +
>>>>> +            (b) under Patents Claims infringed by the making, using or
>>>> selling of Original Code, to make, have made, use, practice, sell, and
>>>> offer for sale, and/or otherwise dispose of the Original Code (or
>> portions
>>>> thereof).
>>>>> +            (c) the licenses granted in this Section 2.1(a) and (b)
>> are
>>>> effective on the date Initial Developer first distributes Original Code
>>>> under the terms of this License.
>>>>> +
>>>>> +            (d) Notwithstanding Section 2.1(b) above, no patent
>> license
>>>> is granted: 1) for code that You delete from the Original Code; 2)
>> separate
>>>> from the Original Code;  or 3) for infringements caused by: i) the
>>>> modification of the Original Code or ii) the combination of the Original
>>>> Code with other software or devices.
>>>>> +
>>>>> +      2.2. Contributor Grant.
>>>>> +      Subject to third party intellectual property claims, each
>>>> Contributor hereby grants You a world-wide, royalty-free, non-exclusive
>>>> license
>>>>> +
>>>>> +            (a)  under intellectual property rights (other than patent
>>>> or trademark) Licensable by Contributor, to use, reproduce, modify,
>>>> display, perform, sublicense and distribute the Modifications created by
>>>> such Contributor (or portions thereof) either on an unmodified basis,
>> with
>>>> other Modifications, as Covered Code and/or as part of a Larger Work;
>> and
>>>>> +
>>>>> +            (b) under Patent Claims infringed by the making, using, or
>>>> selling of  Modifications made by that Contributor either alone and/or
>> in
>>>> combination with its Contributor Version (or portions of such
>> combination),
>>>> to make, use, sell, offer for sale, have made, and/or otherwise dispose
>> of:
>>>> 1) Modifications made by that Contributor (or portions thereof); and 2)
>> the
>>>> combination of  Modifications made by that Contributor with its
>> Contributor
>>>> Version (or portions of such combination).
>>>>> +
>>>>> +            (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
>>>> effective on the date Contributor first makes Commercial Use of the
>> Covered
>>>> Code.
>>>>> +
>>>>> +            (d)    Notwithstanding Section 2.2(b) above, no patent
>>>> license is granted: 1) for any code that Contributor has deleted from
>> the
>>>> Contributor Version; 2)  separate from the Contributor Version;  3)  for
>>>> infringements caused by: i) third party modifications of Contributor
>>>> Version or ii)  the combination of Modifications made by that
>> Contributor
>>>> with other software  (except as part of the Contributor Version) or
>> other
>>>> devices; or 4) under Patent Claims infringed by Covered Code in the
>> absence
>>>> of Modifications made by that Contributor.
>>>>> +
>>>>> +
>>>>> +3. Distribution Obligations.
>>>>> +
>>>>> +      3.1. Application of License.
>>>>> +      The Modifications which You create or to which You contribute
>> are
>>>> governed by the terms of this License, including without limitation
>> Section
>>>> 2.2. The Source Code version of Covered Code may be distributed only
>> under
>>>> the terms of this License or a future version of this License released
>>>> under Section 6.1, and You must include a copy of this License with
>> every
>>>> copy of the Source Code You distribute. You may not offer or impose any
>>>> terms on any Source Code version that alters or restricts the applicable
>>>> version of this License or the recipients' rights hereunder. However,
>> You
>>>> may include an additional document offering the additional rights
>> described
>>>> in Section 3.5.
>>>>> +
>>>>> +      3.2. Availability of Source Code.
>>>>> +      Any Modification which You create or to which You contribute
>> must
>>>> be made available in Source Code form under the terms of this License
>>>> either on the same media as an Executable version or via an accepted
>>>> Electronic Distribution Mechanism to anyone to whom you made an
>> Executable
>>>> version available; and if made available via Electronic Distribution
>>>> Mechanism, must remain available for at least twelve (12) months after
>> the
>>>> date it initially became available, or at least six (6) months after a
>>>> subsequent version of that particular Modification has been made
>> available
>>>> to such recipients. You are responsible for ensuring that the Source
>> Code
>>>> version remains available even if the Electronic Distribution Mechanism
>> is
>>>> maintained by a third party.
>>>>> +
>>>>> +      3.3. Description of Modifications.
>>>>> +      You must cause all Covered Code to which You contribute to
>>>> contain a file documenting the changes You made to create that Covered
>> Code
>>>> and the date of any change. You must include a prominent statement that
>> the
>>>> Modification is derived, directly or indirectly, from Original Code
>>>> provided by the Initial Developer and including the name of the Initial
>>>> Developer in (a) the Source Code, and (b) in any notice in an Executable
>>>> version or related documentation in which You describe the origin or
>>>> ownership of the Covered Code.
>>>>> +
>>>>> +      3.4. Intellectual Property Matters
>>>>> +            (a) Third Party Claims.
>>>>> +            If Contributor has knowledge that a license under a third
>>>> party's intellectual property rights is required to exercise the rights
>>>> granted by such Contributor under Sections 2.1 or 2.2, Contributor must
>>>> include a text file with the Source Code distribution titled "LEGAL''
>> which
>>>> describes the claim and the party making the claim in sufficient detail
>>>> that a recipient will know whom to contact. If Contributor obtains such
>>>> knowledge after the Modification is made available as described in
>> Section
>>>> 3.2, Contributor shall promptly modify the LEGAL file in all copies
>>>> Contributor makes available thereafter and shall take other steps (such
>> as
>>>> notifying appropriate mailing lists or newsgroups) reasonably
>> calculated to
>>>> inform those who received the Covered Code that new knowledge has been
>>>> obtained.
>>>>> +
>>>>> +            (b) Contributor APIs.
>>>>> +            If Contributor's Modifications include an application
>>>> programming interface and Contributor has knowledge of patent licenses
>>>> which are reasonably necessary to implement that API, Contributor must
>> also
>>>> include this information in the LEGAL file.
>>>>> +
>>>>> +                (c)    Representations.
>>>>> +            Contributor represents that, except as disclosed pursuant
>>>> to Section 3.4(a) above, Contributor believes that Contributor's
>>>> Modifications are Contributor's original creation(s) and/or Contributor
>> has
>>>> sufficient rights to grant the rights conveyed by this License.
>>>>> +
>>>>> +
>>>>> +      3.5. Required Notices.
>>>>> +      You must duplicate the notice in Exhibit A in each file of the
>>>> Source Code.  If it is not possible to put such notice in a particular
>>>> Source Code file due to its structure, then You must include such
>> notice in
>>>> a location (such as a relevant directory) where a user would be likely
>> to
>>>> look for such a notice.  If You created one or more Modification(s) You
>> may
>>>> add your name as a Contributor to the notice described in Exhibit A.
>>  You
>>>> must also duplicate this License in any documentation for the Source
>> Code
>>>> where You describe recipients' rights or ownership rights relating to
>>>> Covered Code.  You may choose to offer, and to charge a fee for,
>> warranty,
>>>> support, indemnity or liability obligations to one or more recipients of
>>>> Covered Code. However, You may do so only on Your own behalf, and not on
>>>> behalf of the Initial Developer or any Contributor. You must make it
>>>> absolutely clear than any such warranty, support, indemnity or liability
>>>> obligation is offered by You alone, and
>>>>  Yo
>>>>>  u hereby
>>>>>   agree to indemnify the Initial Developer and every Contributor for
>> any
>>>> liability incurred by the Initial Developer or such Contributor as a
>> result
>>>> of warranty, support, indemnity or liability terms You offer.
>>>>> +
>>>>> +      3.6. Distribution of Executable Versions.
>>>>> +      You may distribute Covered Code in Executable form only if the
>>>> requirements of Section 3.1-3.5 have been met for that Covered Code,
>> and if
>>>> You include a notice stating that the Source Code version of the Covered
>>>> Code is available under the terms of this License, including a
>> description
>>>> of how and where You have fulfilled the obligations of Section 3.2. The
>>>> notice must be conspicuously included in any notice in an Executable
>>>> version, related documentation or collateral in which You describe
>>>> recipients' rights relating to the Covered Code. You may distribute the
>>>> Executable version of Covered Code or ownership rights under a license
>> of
>>>> Your choice, which may contain terms different from this License,
>> provided
>>>> that You are in compliance with the terms of this License and that the
>>>> license for the Executable version does not attempt to limit or alter
>> the
>>>> recipient's rights in the Source Code version from the rights set forth
>> in
>>>> this License. If You distribute the Executabl
>>>>  e
>>>>>  version
>>>>>  under a different license You must make it absolutely clear that any
>>>> terms which differ from this License are offered by You alone, not by
>> the
>>>> Initial Developer or any Contributor. You hereby agree to indemnify the
>>>> Initial Developer and every Contributor for any liability incurred by
>> the
>>>> Initial Developer or such Contributor as a result of any such terms You
>>>> offer.
>>>>> +
>>>>> +      3.7. Larger Works.
>>>>> +      You may create a Larger Work by combining Covered Code with
>> other
>>>> code not governed by the terms of this License and distribute the Larger
>>>> Work as a single product. In such a case, You must make sure the
>>>> requirements of this License are fulfilled for the Covered Code.
>>>>> +
>>>>> +4. Inability to Comply Due to Statute or Regulation.
>>>>> +
>>>>> +      If it is impossible for You to comply with any of the terms of
>>>> this License with respect to some or all of the Covered Code due to
>>>> statute, judicial order, or regulation then You must: (a) comply with
>> the
>>>> terms of this License to the maximum extent possible; and (b) describe
>> the
>>>> limitations and the code they affect. Such description must be included
>> in
>>>> the LEGAL file described in Section 3.4 and must be included with all
>>>> distributions of the Source Code. Except to the extent prohibited by
>>>> statute or regulation, such description must be sufficiently detailed
>> for a
>>>> recipient of ordinary skill to be able to understand it.
>>>>> +
>>>>> +5. Application of this License.
>>>>> +
>>>>> +      This License applies to code to which the Initial Developer has
>>>> attached the notice in Exhibit A and to related Covered Code.
>>>>> +
>>>>> +6. Versions of the License.
>>>>> +
>>>>> +      6.1. New Versions.
>>>>> +      Netscape Communications Corporation (''Netscape'') may publish
>>>> revised and/or new versions of the License from time to time. Each
>> version
>>>> will be given a distinguishing version number.
>>>>> +
>>>>> +      6.2. Effect of New Versions.
>>>>> +      Once Covered Code has been published under a particular version
>>>> of the License, You may always continue to use it under the terms of
>> that
>>>> version. You may also choose to use such Covered Code under the terms of
>>>> any subsequent version of the License published by Netscape. No one
>> other
>>>> than Netscape has the right to modify the terms applicable to Covered
>> Code
>>>> created under this License.
>>>>> +
>>>>> +      6.3. Derivative Works.
>>>>> +      If You create or use a modified version of this License (which
>>>> you may only do in order to apply it to code which is not already
>> Covered
>>>> Code governed by this License), You must (a) rename Your license so that
>>>> the phrases ''Mozilla'', ''MOZILLAPL'', ''MOZPL'', ''Netscape'', "MPL",
>>>> ''NPL'' or any confusingly similar phrase do not appear in your license
>>>> (except to note that your license differs from this License) and (b)
>>>> otherwise make it clear that Your version of the license contains terms
>>>> which differ from the Mozilla Public License and Netscape Public
>> License.
>>>> (Filling in the name of the Initial Developer, Original Code or
>> Contributor
>>>> in the notice described in Exhibit A shall not of themselves be deemed
>> to
>>>> be modifications of this License.)
>>>>> +
>>>>> +7. DISCLAIMER OF WARRANTY.
>>>>> +
>>>>> +      COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS''
>> BASIS,
>>>> WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
>>>> WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS,
>>>> MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
>>>> RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU.
>>>> SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE
>>>> INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY
>>>> NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY
>>>> CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED
>> CODE
>>>> IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
>>>>> +
>>>>> +8. TERMINATION.
>>>>> +
>>>>> +      8.1.  This License and the rights granted hereunder will
>>>> terminate automatically if You fail to comply with terms herein and
>> fail to
>>>> cure such breach within 30 days of becoming aware of the breach. All
>>>> sublicenses to the Covered Code which are properly granted shall survive
>>>> any termination of this License. Provisions which, by their nature, must
>>>> remain in effect beyond the termination of this License shall survive.
>>>>> +
>>>>> +      8.2.  If You initiate litigation by asserting a patent
>>>> infringement claim (excluding declatory judgment actions) against
>> Initial
>>>> Developer or a Contributor (the Initial Developer or Contributor against
>>>> whom You file such action is referred to as "Participant")  alleging
>> that:
>>>>> +
>>>>> +      (a)  such Participant's Contributor Version directly or
>>>> indirectly infringes any patent, then any and all rights granted by such
>>>> Participant to You under Sections 2.1 and/or 2.2 of this License shall,
>>>> upon 60 days notice from Participant terminate prospectively, unless if
>>>> within 60 days after receipt of notice You either: (i)  agree in
>> writing to
>>>> pay Participant a mutually agreeable reasonable royalty for Your past
>> and
>>>> future use of Modifications made by such Participant, or (ii) withdraw
>> Your
>>>> litigation claim with respect to the Contributor Version against such
>>>> Participant.  If within 60 days of notice, a reasonable royalty and
>> payment
>>>> arrangement are not mutually agreed upon in writing by the parties or
>> the
>>>> litigation claim is not withdrawn, the rights granted by Participant to
>> You
>>>> under Sections 2.1 and/or 2.2 automatically terminate at the expiration
>> of
>>>> the 60 day notice period specified above.
>>>>> +
>>>>> +      (b)  any software, hardware, or device, other than such
>>>> Participant's Contributor Version, directly or indirectly infringes any
>>>> patent, then any rights granted to You by such Participant under
>> Sections
>>>> 2.1(b) and 2.2(b) are revoked effective as of the date You first made,
>>>> used, sold, distributed, or had made, Modifications made by that
>>>> Participant.
>>>>> +
>>>>> +      8.3.  If You assert a patent infringement claim against
>>>> Participant alleging that such Participant's Contributor Version
>> directly
>>>> or indirectly infringes any patent where such claim is resolved (such
>> as by
>>>> license or settlement) prior to the initiation of patent infringement
>>>> litigation, then the reasonable value of the licenses granted by such
>>>> Participant under Sections 2.1 or 2.2 shall be taken into account in
>>>> determining the amount or value of any payment or license.
>>>>> +
>>>>> +      8.4.  In the event of termination under Sections 8.1 or 8.2
>>>> above,  all end user license agreements (excluding distributors and
>>>> resellers) which have been validly granted by You or any distributor
>>>> hereunder prior to termination shall survive termination.
>>>>> +
>>>>> +9. LIMITATION OF LIABILITY.
>>>>> +
>>>>> +      UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
>>>> (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
>>>> DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR
>>>> ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY
>>>> INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER
>>>> INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK
>> STOPPAGE,
>>>> COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL
>> DAMAGES OR
>>>> LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY
>> OF
>>>> SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY
>> FOR
>>>> DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE
>>>> EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO
>> NOT
>>>> ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL
>> DAMAGES,
>>>> SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
>>>>> +
>>>>> +10. U.S. GOVERNMENT END USERS.
>>>>> +
>>>>> +      The Covered Code is a ''commercial item,'' as that term is
>>>> defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of ''commercial
>> computer
>>>> software'' and ''commercial computer software documentation,'' as such
>>>> terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
>> C.F.R.
>>>> 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S.
>>>> Government End Users acquire Covered Code with only those rights set
>> forth
>>>> herein.
>>>>> +
>>>>> +11. MISCELLANEOUS.
>>>>> +
>>>>> +      This License represents the complete agreement concerning
>> subject
>>>> matter hereof. If any provision of this License is held to be
>>>> unenforceable, such provision shall be reformed only to the extent
>>>> necessary to make it enforceable. This License shall be governed by
>>>> California law provisions (except to the extent applicable law, if any,
>>>> provides otherwise), excluding its conflict-of-law provisions. With
>> respect
>>>> to disputes in which at least one party is a citizen of, or an entity
>>>> chartered or registered to do business in the United States of America,
>> any
>>>> litigation relating to this License shall be subject to the
>> jurisdiction of
>>>> the Federal Courts of the Northern District of California, with venue
>> lying
>>>> in Santa Clara County, California, with the losing party responsible for
>>>> costs, including without limitation, court costs and reasonable
>> attorneys'
>>>> fees and expenses. The application of the United Nations Convention on
>>>> Contracts for the International Sale of Goods is expr
>>>>  es
>>>>>  sly excl
>>>>>  uded. Any law or regulation which provides that the language of a
>>>> contract shall be construed against the drafter shall not apply to this
>>>> License.
>>>>> +
>>>>> +12. RESPONSIBILITY FOR CLAIMS.
>>>>> +
>>>>> +      As between Initial Developer and the Contributors, each party is
>>>> responsible for claims and damages arising, directly or indirectly, out
>> of
>>>> its utilization of rights under this License and You agree to work with
>>>> Initial Developer and Contributors to distribute such responsibility on
>> an
>>>> equitable basis. Nothing herein is intended or shall be deemed to
>>>> constitute any admission of liability.
>>>>> +
>>>>> +13. MULTIPLE-LICENSED CODE.
>>>>> +
>>>>> +      Initial Developer may designate portions of the Covered Code as
>>>> �Multiple-Licensed?.  �Multiple-Licensed? means that the Initial
>> Developer
>>>> permits you to utilize portions of the Covered Code under Your choice of
>>>> the MPL or the alternative licenses, if any, specified by the Initial
>>>> Developer in the file described in Exhibit A.
>>>>> +
>>>>> +
>>>>> +EXHIBIT A -Mozilla Public License.
>>>>> +
>>>>> +      The contents of this file are subject to the Mozilla Public
>>>> License Version 1.1 (the "License"); you may not use this file except in
>>>> compliance with the License. You may obtain a copy of the License at
>>>>> +      http://www.mozilla.org/MPL/
>>>>> +
>>>>> +      Software distributed under the License is distributed on an "AS
>>>> IS" basis, WITHOUT WARRANTY OF
>>>>> +      ANY KIND, either express or implied. See the License for the
>>>> specific language governing rights and
>>>>> +      limitations under the License.
>>>>> +
>>>>> +      The Original Code is Javassist.
>>>>> +
>>>>> +      The Initial Developer of the Original Code is Shigeru Chiba.
>>>> Portions created by the Initial Developer are
>>>>> +        Copyright (C) 1999-2006 Shigeru Chiba. All Rights Reserved.
>>>>> +
>>>>> +      Contributor(s): ______________________________________.
>>>>> +
>>>>> +      Alternatively, the contents of this file may be used under the
>>>> terms of the GNU Lesser General Public License Version 2.1 or later (the
>>>> "LGPL"), in which case the provisions of the LGPL are applicable
>> instead of
>>>> those above. If you wish to allow use of your version of this file only
>>>> under the terms of the LGPL, and not to allow others to use your
>> version of
>>>> this file under the terms of the MPL, indicate your decision by deleting
>>>> the provisions above and replace them with the notice and other
>> provisions
>>>> required by the LGPL. If you do not delete the provisions above, a
>>>> recipient may use your version of this file under the terms of either
>> the
>>>> MPL or the LGPL.
>>>>> +
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/NOTICE.txt
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/tapestry-mongodb/NOTICE.txt b/tapestry-mongodb/NOTICE.txt
>>>>> new file mode 100644
>>>>> index 0000000..3f59805
>>>>> --- /dev/null
>>>>> +++ b/tapestry-mongodb/NOTICE.txt
>>>>> @@ -0,0 +1,2 @@
>>>>> +This product includes software developed by
>>>>> +The Apache Software Foundation (http://www.apache.org/).
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/build.gradle
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/tapestry-mongodb/build.gradle
>>>> b/tapestry-mongodb/build.gradle
>>>>> new file mode 100644
>>>>> index 0000000..3019266
>>>>> --- /dev/null
>>>>> +++ b/tapestry-mongodb/build.gradle
>>>>> @@ -0,0 +1,24 @@
>>>>> +description = "Basic MongoDB services for Tapestry, useable outside of
>>>> a Tapestry web application"
>>>>> +
>>>>> +dependencies {
>>>>> +    compile project(':tapestry-ioc')
>>>>> +    compile project(':tapestry-test')
>>>>> +
>>>>> +    compile group: 'org.mongodb', name: 'mongo-java-driver', version:
>>>> '2.10.1'
>>>>> +
>>>>> +    testCompile group: 'org.jongo', name: 'jongo', version: '0.3'
>>>>> +
>>>>> +    testCompile "org.spockframework:spock-core:${versions.spock}"
>>>>> +
>>>>> +    testCompile "de.flapdoodle.embed:de.flapdoodle.embed.mongo:1.28"
>>>>> +}
>>>>> +
>>>>> +test {
>>>>> +    useJUnit()
>>>>> +}
>>>>> +
>>>>> +jar {
>>>>> +    manifest {
>>>>> +        attributes 'Tapestry-Module-Classes':
>>>> 'org.apache.tapestry5.mongodb.MongodbModule'
>>>>> +    }
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBImpl.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBImpl.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBImpl.java
>>>>> new file mode 100644
>>>>> index 0000000..f4e709a
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBImpl.java
>>>>> @@ -0,0 +1,81 @@
>>>>> +package org.apache.tapestry5.internal.mongodb;
>>>>> +
>>>>> +import com.mongodb.DB;
>>>>> +import com.mongodb.Mongo;
>>>>> +import org.apache.tapestry5.ioc.services.ThreadCleanupListener;
>>>>> +import org.apache.tapestry5.mongodb.MongoDB;
>>>>> +import org.apache.tapestry5.mongodb.MongoDBSource;
>>>>> +import org.slf4j.Logger;
>>>>> +
>>>>> +/**
>>>>> + * Default implementation for {@link
>>>> org.apache.tapestry5.mongodb.MongoDB}
>>>>> + */
>>>>> +public class MongoDBImpl implements MongoDB, ThreadCleanupListener
>>>>> +{
>>>>> +    private final Logger logger;
>>>>> +
>>>>> +     private final Mongo mongo;
>>>>> +
>>>>> +    private final String defaultDbName;
>>>>> +    private final boolean consistentRequest;
>>>>> +
>>>>> +     private final boolean secureMode;
>>>>> +     private final String dbUsername;
>>>>> +     private final String dbPassword;
>>>>> +
>>>>> +    private DB db;
>>>>> +
>>>>> +    public MongoDBImpl(Logger logger,
>>>>> +                MongoDBSource mongoDBSource,
>>>>> +           String defaultDbName, boolean consistentRequest,
>>>>> +                boolean secureMode, String dbUsername, String
>>>> dbPassword)
>>>>> +    {
>>>>> +        this.logger = logger;
>>>>> +
>>>>> +        this.mongo = mongoDBSource.getMongo();
>>>>> +
>>>>> +        this.defaultDbName = defaultDbName;
>>>>> +        this.consistentRequest = consistentRequest;
>>>>> +
>>>>> +             this.secureMode = secureMode;
>>>>> +             this.dbUsername = dbUsername;
>>>>> +             this.dbPassword = dbPassword;
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    public DB getDefaultMongoDb()
>>>>> +    {
>>>>> +        return buildDbSession(defaultDbName);
>>>>> +    }
>>>>> +
>>>>> +    @Override
>>>>> +    public DB getMongoDb(String dbname)
>>>>> +    {
>>>>> +             return buildDbSession(dbname);
>>>>> +    }
>>>>> +
>>>>> +    public void threadDidCleanup()
>>>>> +    {
>>>>> +        if (consistentRequest)
>>>>> +            db.requestDone();
>>>>> +    }
>>>>> +
>>>>> +
>>>>> +     private final DB buildDbSession(String dbname)
>>>>> +     {
>>>>> +             db = mongo.getDB(dbname);
>>>>> +
>>>>> +             if (consistentRequest)
>>>>> +             {
>>>>> +                     db.requestStart();
>>>>> +                     db.requestEnsureConnection();
>>>>> +             }
>>>>> +
>>>>> +             if (secureMode)
>>>>> +             {
>>>>> +                     db.authenticate(dbUsername,
>>>> dbPassword.toCharArray());
>>>>> +             }
>>>>> +
>>>>> +             return db;
>>>>> +     }
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBSourceImpl.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBSourceImpl.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBSourceImpl.java
>>>>> new file mode 100644
>>>>> index 0000000..16f6c07
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/internal/mongodb/MongoDBSourceImpl.java
>>>>> @@ -0,0 +1,58 @@
>>>>> +package org.apache.tapestry5.internal.mongodb;
>>>>> +
>>>>> +import com.mongodb.*;
>>>>> +import org.apache.tapestry5.ioc.annotations.Symbol;
>>>>> +import org.apache.tapestry5.mongodb.MongoDBSource;
>>>>> +import org.apache.tapestry5.mongodb.MongoDBSymbols;
>>>>> +import org.slf4j.Logger;
>>>>> +
>>>>> +import java.net.UnknownHostException;
>>>>> +import java.util.List;
>>>>> +
>>>>> +/**
>>>>> + * Default implementation for {@link
>>>> org.apache.tapestry5.mongodb.MongoDBSource}
>>>>> + */
>>>>> +public class MongoDBSourceImpl implements MongoDBSource
>>>>> +{
>>>>> +    private final Logger logger;
>>>>> +
>>>>> +    private final MongoClient mongoClient;
>>>>> +
>>>>> +
>>>>> +    public MongoDBSourceImpl(Logger logger,
>>>>> +            @Symbol(MongoDBSymbols.CONNECTIONS_PER_HOSTS) int
>>>> connectionPerHost,
>>>>> +            @Symbol(MongoDBSymbols.READ_PREFERENCE) ReadPreference
>>>> readPreference,
>>>>> +            @Symbol(MongoDBSymbols.WRITE_CONCERN) WriteConcern
>>>> writeConcern,
>>>>> +            List<ServerAddress> serverAddresses)
>>>>> +    {
>>>>> +        this.logger = logger;
>>>>> +
>>>>> +             MongoClientOptions options = new
>>>> MongoClientOptions.Builder()
>>>>> +                             .connectionsPerHost(connectionPerHost)
>>>>> +
>>>> .writeConcern(writeConcern).readPreference(readPreference)
>>>>> +                             .build();
>>>>> +
>>>>> +        if (serverAddresses.isEmpty())
>>>>> +             {
>>>>> +                     try
>>>>> +                     {
>>>>> +                             mongoClient = new MongoClient(new
>>>> ServerAddress(), options);
>>>>> +                     }
>>>>> +                     catch (UnknownHostException uhe)
>>>>> +                     {
>>>>> +                             throw new RuntimeException(uhe);
>>>>> +                     }
>>>>> +             }
>>>>> +        else
>>>>> +             {
>>>>> +            mongoClient = new MongoClient(serverAddresses, options);
>>>>> +             }
>>>>> +    }
>>>>> +
>>>>> +
>>>>> +    @Override
>>>>> +    public MongoClient getMongo()
>>>>> +    {
>>>>> +        return this.mongoClient;
>>>>> +    }
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDB.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDB.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDB.java
>>>>> new file mode 100644
>>>>> index 0000000..1cf9b4f
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDB.java
>>>>> @@ -0,0 +1,27 @@
>>>>> +package org.apache.tapestry5.mongodb;
>>>>> +
>>>>> +import com.mongodb.DB;
>>>>> +import org.slf4j.Logger;
>>>>> +
>>>>> +/**
>>>>> + *
>>>>> + */
>>>>> +public interface MongoDB
>>>>> +{
>>>>> +    /**
>>>>> +     * Obtain a shared instance of the MongoDB database connection
>>>> object connected
>>>>> +     * to the default database
>>>>> +     *
>>>>> +     * @return the {@link com.mongodb.DB} connection object
>>>>> +     */
>>>>> +    public DB getDefaultMongoDb();
>>>>> +
>>>>> +    /**
>>>>> +     * Obtain a shared instance of the MongoDB database connection
>>>> object for the
>>>>> +     * specific database
>>>>> +     *
>>>>> +     * @param dbname the database name to connect to
>>>>> +     * @return the {@link DB} connection object
>>>>> +     */
>>>>> +    public DB getMongoDb(String dbname);
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSource.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSource.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSource.java
>>>>> new file mode 100644
>>>>> index 0000000..643774b
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSource.java
>>>>> @@ -0,0 +1,17 @@
>>>>> +package org.apache.tapestry5.mongodb;
>>>>> +
>>>>> +import com.mongodb.MongoClient;
>>>>> +import com.mongodb.ServerAddress;
>>>>> +import org.apache.tapestry5.ioc.annotations.UsesOrderedConfiguration;
>>>>> +
>>>>> +/**
>>>>> + *
>>>>> + */
>>>>> +@UsesOrderedConfiguration(ServerAddress.class)
>>>>> +public interface MongoDBSource
>>>>> +{
>>>>> +    /**
>>>>> +     * @return the {@link MongoClient} database connection object.
>>>>> +     */
>>>>> +    public MongoClient getMongo();
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSymbols.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSymbols.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSymbols.java
>>>>> new file mode 100644
>>>>> index 0000000..56f4ef5
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongoDBSymbols.java
>>>>> @@ -0,0 +1,61 @@
>>>>> +package org.apache.tapestry5.mongodb;
>>>>> +
>>>>> +/**
>>>>> + * Configuration symbols, for use with contributions to
>>>>> + * {@link org.apache.tapestry5.ioc.services.ApplicationDefaults}.
>>>>> + * All {@link org.apache.tapestry5.ioc.annotations.Symbol} are
>> relative
>>>> to the usage of
>>>>> + * <a href="http://www.mongodb.org">MongoDB</a> support within Apache
>>>> Tapestry.
>>>>> + *
>>>>> + * @since 5.4
>>>>> + */
>>>>> +public class MongoDBSymbols
>>>>> +{
>>>>> +    /**
>>>>> +     * The {@link com.mongodb.WriteConcern} to use. Default to {@link
>>>> com.mongodb.WriteConcern.ACKNOWLEDGED}.
>>>>> +     */
>>>>> +    public static final String WRITE_CONCERN =
>>>> "tapestry.mongodb.write_concern";
>>>>> +
>>>>> +    /**
>>>>> +     * The {@link com.mongodb.ReadPreference} to use. Default to
>> {@link
>>>> com.mongodb.ReadPreference.primary()}.
>>>>> +     */
>>>>> +    public static final String READ_PREFERENCE =
>>>> "tapestry.mongodb.read_preference";
>>>>> +
>>>>> +    //
>>>> ########################################################################
>>>>> +
>>>>> +    /**
>>>>> +     * The maximum number of connections allowed per host for this
>>>> Mongo instance. Defaults to 10.
>>>>> +     */
>>>>> +    public static final String CONNECTIONS_PER_HOSTS =
>>>> "tapestry.mongodb.conns-per-host";
>>>>> +
>>>>> +    /**
>>>>> +     * The MongoDB default database name to connect to. No default
>>>> provided.
>>>>> +     */
>>>>> +    public static final String DEFAULT_DB_NAME =
>>>> "tapestry.mongodb.default_db_name";
>>>>> +
>>>>> +    /**
>>>>> +     * Where to use or not the <em>consisten request</em> paradigm.
>>>> Default to false;
>>>>> +     */
>>>>> +    public static final String CONSISTENT_REQUEST =
>>>> "tapestry.mongodb.consistent_request";
>>>>> +
>>>>> +     //
>>>> ########################################################################
>>>>> +
>>>>> +     /**
>>>>> +      * <code>true</code> if you need to connect to Mongo DB in
>>>> <em>secure mode</em>,
>>>>> +      * <code>false</code> otherwise.
>>>>> +      * You need to set DB_USERNAME and DB_PASSWORD too if this is set
>>>> to <code>true</code>.
>>>>> +      * Defaults to <code>false</code>
>>>>> +      */
>>>>> +     public static final String SECURE_MODE =
>>>> "tapestry.mongodb.secure_mode";
>>>>> +
>>>>> +     /**
>>>>> +      * Username to use to connect Mongo DB.
>>>>> +      * Defaults to empty string.
>>>>> +      */
>>>>> +     public static final String DB_USERNAME =
>>>> "tapestry.mongodb.db_username";
>>>>> +
>>>>> +     /**
>>>>> +      * Password to use to connect Mongo DB.
>>>>> +      * Defaults to empty string.
>>>>> +      */
>>>>> +     public static final String DB_PASSWORD =
>>>> "tapestry.mongodb.db_password";
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongodbModule.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongodbModule.java
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongodbModule.java
>>>>> new file mode 100644
>>>>> index 0000000..a7d53bd
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/main/java/org/apache/tapestry5/mongodb/MongodbModule.java
>>>>> @@ -0,0 +1,123 @@
>>>>> +package org.apache.tapestry5.mongodb;
>>>>> +
>>>>> +import com.mongodb.ReadPreference;
>>>>> +import com.mongodb.WriteConcern;
>>>>> +import org.apache.tapestry5.internal.mongodb.MongoDBImpl;
>>>>> +import org.apache.tapestry5.internal.mongodb.MongoDBSourceImpl;
>>>>> +import org.apache.tapestry5.ioc.Configuration;
>>>>> +import org.apache.tapestry5.ioc.MappedConfiguration;
>>>>> +import org.apache.tapestry5.ioc.ScopeConstants;
>>>>> +import org.apache.tapestry5.ioc.ServiceBinder;
>>>>> +import org.apache.tapestry5.ioc.annotations.Scope;
>>>>> +import org.apache.tapestry5.ioc.annotations.Symbol;
>>>>> +import org.apache.tapestry5.ioc.services.Coercion;
>>>>> +import org.apache.tapestry5.ioc.services.CoercionTuple;
>>>>> +import org.apache.tapestry5.ioc.services.PerthreadManager;
>>>>> +import org.slf4j.Logger;
>>>>> +
>>>>> +/**
>>>>> + * Defines services which are responsible for MongoDB initializations
>>>> and connections.
>>>>> + */
>>>>> +public class MongodbModule
>>>>> +{
>>>>> +    public static void bind(ServiceBinder binder)
>>>>> +    {
>>>>> +        binder.bind(MongoDBSource.class, MongoDBSourceImpl.class);
>>>>> +    }
>>>>> +
>>>>> +    public static void
>>>> contributeFactoryDefaults(MappedConfiguration<String, String>
>> configuration)
>>>>> +    {
>>>>> +        configuration.add(MongoDBSymbols.CONNECTIONS_PER_HOSTS, "10");
>>>>> +        configuration.add(MongoDBSymbols.WRITE_CONCERN,
>> "ACKNOWLEDGED");
>>>>> +        configuration.add(MongoDBSymbols.READ_PREFERENCE, "PRIMARY");
>>>>> +        configuration.add(MongoDBSymbols.CONSISTENT_REQUEST, "false");
>>>>> +
>>>>> +             // Authentication (Mongo in secure mode)
>>>>> +
>>>>> +             configuration.add(MongoDBSymbols.SECURE_MODE, "false");
>>>>> +             configuration.add(MongoDBSymbols.DB_USERNAME, "");
>>>>> +             configuration.add(MongoDBSymbols.DB_PASSWORD, "");
>>>>> +    }
>>>>> +
>>>>> +    @Scope(ScopeConstants.PERTHREAD)
>>>>> +    public static MongoDB buildMongoDB(Logger logger, final
>>>> MongoDBSource mongoDBSource,
>>>>> +                     PerthreadManager perthreadManager,
>>>>> +                     @Symbol(MongoDBSymbols.DEFAULT_DB_NAME) String
>>>> defaultDbName,
>>>>> +                     @Symbol(MongoDBSymbols.CONSISTENT_REQUEST)
>> boolean
>>>> consistentRequest,
>>>>> +
>>>>  @Symbol(MongoDBSymbols.SECURE_MODE) boolean secureMode,
>>>>> +
>>>>  @Symbol(MongoDBSymbols.DB_USERNAME) String dbUsername,
>>>>> +
>>>>  @Symbol(MongoDBSymbols.DB_PASSWORD) String dbPassword)
>>>>> +    {
>>>>> +        final MongoDBImpl mongoDB = new MongoDBImpl(logger,
>>>> mongoDBSource,
>>>>> +                defaultDbName, consistentRequest, secureMode,
>>>> dbUsername, dbPassword);
>>>>> +
>>>>> +             perthreadManager.addThreadCleanupListener(mongoDB);
>>>>> +
>>>>> +        return mongoDB;
>>>>> +    }
>>>>> +
>>>>> +    /**
>>>>> +     * Contribute coercions for {@link WriteConcern} and {@link
>>>> ReadPreference} to have them from
>>>>> +     * {@link org.apache.tapestry5.ioc.annotations.Symbol}
>>>>> +     *
>>>>> +     * @param configuration lets help the {@link
>>>> org.apache.tapestry5.ioc.services.TypeCoercer} service
>>>>> +     */
>>>>> +    public static void
>>>> contributeTypeCoercer(Configuration<CoercionTuple> configuration)
>>>>> +    {
>>>>> +        configuration.add(new CoercionTuple(String.class,
>>>> WriteConcern.class,
>>>>> +                new Coercion<String, WriteConcern>() {
>>>>> +                    @Override
>>>>> +                    public WriteConcern coerce(String input)
>>>>> +                    {
>>>>> +                        if (input.equalsIgnoreCase("FSYNC_SAFE"))
>>>>> +                        {
>>>>> +                            return WriteConcern.FSYNC_SAFE;
>>>>> +                        }
>>>>> +                        else if
>> (input.equalsIgnoreCase("JOURNAL_SAFE"))
>>>>> +                        {
>>>>> +                            return WriteConcern.JOURNAL_SAFE;
>>>>> +                        }
>>>>> +                        else if (input.equalsIgnoreCase("MAJORITY"))
>>>>> +                        {
>>>>> +                            return WriteConcern.MAJORITY;
>>>>> +                        }
>>>>> +                        else if (input.equalsIgnoreCase("NONE"))
>>>>> +                        {
>>>>> +                            return WriteConcern.NONE;
>>>>> +                        }
>>>>> +                        else if
>>>> (input.equalsIgnoreCase("REPLICAS_SAFE"))
>>>>> +                        {
>>>>> +                            return WriteConcern.REPLICAS_SAFE;
>>>>> +                        }
>>>>> +                        else if (input.equalsIgnoreCase("SAFE"))
>>>>> +                        {
>>>>> +                            return WriteConcern.SAFE;
>>>>> +                        }
>>>>> +                                             else if
>>>> (input.equalsIgnoreCase("NORMAL"))
>>>>> +                                             {
>>>>> +                                                     return
>>>> WriteConcern.NORMAL;
>>>>> +                                             }
>>>>> +                        else // WriteConcern.ACKNOWLEDGED IS OUR
>> DEFAULT
>>>>> +                        {
>>>>> +                            return WriteConcern.ACKNOWLEDGED;
>>>>> +                        }
>>>>> +                    }
>>>>> +                }
>>>>> +        ));
>>>>> +
>>>>> +        configuration.add(new CoercionTuple(String.class,
>>>> ReadPreference.class, new Coercion<String, ReadPreference>() {
>>>>> +            @Override
>>>>> +            public ReadPreference coerce(String input)
>>>>> +            {
>>>>> +                if (input.equalsIgnoreCase("SECONDARY"))
>>>>> +                {
>>>>> +                    return ReadPreference.secondary();
>>>>> +                }
>>>>> +                else // PRIMARY IS OUR DEFAULT
>>>>> +                {
>>>>> +                    return ReadPreference.primary();
>>>>> +                }
>>>>> +            }
>>>>> +        }));
>>>>> +    }
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/test/conf/testng.xml
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/tapestry-mongodb/src/test/conf/testng.xml
>>>> b/tapestry-mongodb/src/test/conf/testng.xml
>>>>> new file mode 100644
>>>>> index 0000000..5c54c10
>>>>> --- /dev/null
>>>>> +++ b/tapestry-mongodb/src/test/conf/testng.xml
>>>>> @@ -0,0 +1,24 @@
>>>>> +<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
>>>>> +<!--
>>>>> +   Copyright 2012 The Apache Software Foundation
>>>>> +
>>>>> +   Licensed under the Apache License, Version 2.0 (the "License");
>>>>> +   you may not use this file except in compliance with the License.
>>>>> +   You may obtain a copy of the License at
>>>>> +
>>>>> +       http://www.apache.org/licenses/LICENSE-2.0
>>>>> +
>>>>> +   Unless required by applicable law or agreed to in writing, software
>>>>> +   distributed under the License is distributed on an "AS IS" BASIS,
>>>>> +   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
>>>> implied.
>>>>> +   See the License for the specific language governing permissions and
>>>>> +   limitations under the License.
>>>>> +-->
>>>>> +
>>>>> +<suite name="Core MongoDB" parallel="false" thread-count="10"
>>>> annotations="1.5" verbose="2">
>>>>> +    <test name="Tapestry MongoDB Internal APIs">
>>>>> +        <packages>
>>>>> +            <package name="org.apache.tapestry5.internal.mongodb"/>
>>>>> +        </packages>
>>>>> +    </test>
>>>>> +</suite>
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/test/groovy/MongoDBSpec.groovy
>>>>> ----------------------------------------------------------------------
>>>>> diff --git a/tapestry-mongodb/src/test/groovy/MongoDBSpec.groovy
>>>> b/tapestry-mongodb/src/test/groovy/MongoDBSpec.groovy
>>>>> new file mode 100644
>>>>> index 0000000..c93a591
>>>>> --- /dev/null
>>>>> +++ b/tapestry-mongodb/src/test/groovy/MongoDBSpec.groovy
>>>>> @@ -0,0 +1,93 @@
>>>>> +import de.flapdoodle.embed.mongo.MongodExecutable
>>>>> +import de.flapdoodle.embed.mongo.MongodProcess
>>>>> +import de.flapdoodle.embed.mongo.MongodStarter
>>>>> +import de.flapdoodle.embed.mongo.config.MongodConfig
>>>>> +import de.flapdoodle.embed.mongo.distribution.Version
>>>>> +import de.flapdoodle.embed.process.runtime.Network
>>>>> +import org.apache.tapestry5.internal.mongodb.MongoDBTestModule
>>>>> +import org.apache.tapestry5.internal.mongodb.People
>>>>> +import org.apache.tapestry5.ioc.Registry
>>>>> +import org.apache.tapestry5.ioc.RegistryBuilder
>>>>> +import org.apache.tapestry5.ioc.services.TapestryIOCModule
>>>>> +import org.apache.tapestry5.mongodb.MongoDB
>>>>> +import org.apache.tapestry5.mongodb.MongoDBSource
>>>>> +import org.apache.tapestry5.mongodb.MongodbModule
>>>>> +import org.jongo.Jongo
>>>>> +import org.jongo.MongoCollection
>>>>> +import spock.lang.AutoCleanup
>>>>> +import spock.lang.Shared
>>>>> +import spock.lang.Specification
>>>>> +
>>>>> +class MongoDBSpec extends Specification
>>>>> +{
>>>>> +    final int total = 1000
>>>>> +
>>>>> +    @Shared @AutoCleanup("shutdown")
>>>>> +    Registry registry;
>>>>> +
>>>>> +    @Shared
>>>>> +    MongoDBSource mongoDBSource
>>>>> +    @Shared
>>>>> +    MongoDB mongoDB
>>>>> +
>>>>> +    static int PORT = 12345
>>>>> +    static MongodExecutable mongodExe
>>>>> +    static MongodProcess mongod
>>>>> +
>>>>> +    static MongoCollection peoples;
>>>>> +    static Jongo jongo
>>>>> +
>>>>> +    def setupSpec()
>>>>> +    {
>>>>> +        // Start embedded MongoDB instance
>>>>> +        MongodStarter runtime = MongodStarter.getDefaultInstance();
>>>>> +        mongodExe = runtime.prepare(new
>> MongodConfig(Version.Main.V2_2,
>>>> 12345, Network.localhostIsIPv6()));
>>>>> +        mongod = mongodExe.start();
>>>>> +
>>>>> +        // Populate and start the Registry
>>>>> +        RegistryBuilder builder = new
>>>> RegistryBuilder().add(MongoDBTestModule, MongodbModule,
>> TapestryIOCModule)
>>>>> +        registry = builder.build();
>>>>> +        registry.performRegistryStartup();
>>>>> +
>>>>> +        // Get our service
>>>>> +        mongoDBSource = registry.getService(MongoDBSource)
>>>>> +        mongoDB = registry.getService(MongoDB)
>>>>> +
>>>>> +        jongo = new Jongo(mongoDB.getDefaultMongoDb())
>>>>> +        peoples = jongo.getCollection("peoples")
>>>>> +    }
>>>>> +
>>>>> +    def cleanupSpec()
>>>>> +    {
>>>>> +        peoples.drop()
>>>>> +        if (mongod != null) mongod.stop()
>>>>> +        if (mongodExe != null) mongodExe.stop();
>>>>> +    }
>>>>> +
>>>>> +    def "Lets check mongodb source"()
>>>>> +    {
>>>>> +        expect:
>>>>> +        mongoDBSource.getMongo() != null
>>>>> +    }
>>>>> +
>>>>> +    def "Lets populate it"()
>>>>> +    {
>>>>> +        when:
>>>>> +        for (int i = 0; i < total; i++)
>>>>> +        {
>>>>> +            People p = new People();
>>>>> +            p.setBirthDate(new Date());
>>>>> +            p.setName("Name-" + i);
>>>>> +            p.setSurname("Surname-" + i);
>>>>> +            peoples.save(p)
>>>>> +        }
>>>>> +
>>>>> +        then:
>>>>> +        peoples.count() == total
>>>>> +        People p42 = peoples.findOne("{name:
>>>> 'Name-42'}").as(People.class)
>>>>> +        p42.getSurname().equals("Surname-42")
>>>>> +
>>>>> +        cleanup:
>>>>> +        peoples.remove("{}")
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/MongoDBTestModule.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/MongoDBTestModule.java
>>>>
>> b/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/MongoDBTestModule.java
>>>>> new file mode 100644
>>>>> index 0000000..b60e573
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/MongoDBTestModule.java
>>>>> @@ -0,0 +1,33 @@
>>>>> +package org.apache.tapestry5.internal.mongodb;
>>>>> +
>>>>> +import com.mongodb.ServerAddress;
>>>>> +import org.apache.tapestry5.ioc.MappedConfiguration;
>>>>> +import org.apache.tapestry5.ioc.OrderedConfiguration;
>>>>> +import org.apache.tapestry5.mongodb.MongoDBSymbols;
>>>>> +
>>>>> +import java.net.UnknownHostException;
>>>>> +
>>>>> +/**
>>>>> + *
>>>>> + */
>>>>> +public class MongoDBTestModule
>>>>> +{
>>>>> +
>>>>> +    public static void
>>>> contributeApplicationDefaults(MappedConfiguration<String, String>
>>>> configuration)
>>>>> +    {
>>>>> +        configuration.add(MongoDBSymbols.DEFAULT_DB_NAME,
>>>> "TapestryMongoTest");
>>>>> +    }
>>>>> +
>>>>> +
>>>>> +    public static void
>>>> contributeMongoDBSource(OrderedConfiguration<ServerAddress>
>> configuration)
>>>>> +    {
>>>>> +        try
>>>>> +        {
>>>>> +            configuration.add("test", new ServerAddress("localhost",
>>>> 12345));
>>>>> +        }
>>>>> +        catch (UnknownHostException e)
>>>>> +        {
>>>>> +            throw new RuntimeException(e);
>>>>> +        }
>>>>> +    }
>>>>> +}
>>>>>
>>>>>
>>>>
>> http://git-wip-us.apache.org/repos/asf/tapestry-5/blob/dd299fae/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/People.java
>>>>> ----------------------------------------------------------------------
>>>>> diff --git
>>>>
>> a/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/People.java
>>>>
>> b/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/People.java
>>>>> new file mode 100644
>>>>> index 0000000..e8acfa8
>>>>> --- /dev/null
>>>>> +++
>>>>
>> b/tapestry-mongodb/src/test/java/org/apache/tapestry5/internal/mongodb/People.java
>>>>> @@ -0,0 +1,50 @@
>>>>> +package org.apache.tapestry5.internal.mongodb;
>>>>> +
>>>>> +import org.bson.types.ObjectId;
>>>>> +
>>>>> +import java.util.Date;
>>>>> +
>>>>> +/**
>>>>> + *
>>>>> + */
>>>>> +public class People
>>>>> +{
>>>>> +    private ObjectId _id;
>>>>> +
>>>>> +    private String name;
>>>>> +    private String surname;
>>>>> +    private Date birthDate;
>>>>> +
>>>>> +
>>>>> +    public ObjectId get_id() {
>>>>> +        return _id;
>>>>> +    }
>>>>> +
>>>>> +    public void set_id(ObjectId _id) {
>>>>> +        this._id = _id;
>>>>> +    }
>>>>> +
>>>>> +    public String getName() {
>>>>> +        return name;
>>>>> +    }
>>>>> +
>>>>> +    public void setName(String name) {
>>>>> +        this.name = name;
>>>>> +    }
>>>>> +
>>>>> +    public String getSurname() {
>>>>> +        return surname;
>>>>> +    }
>>>>> +
>>>>> +    public void setSurname(String surname) {
>>>>> +        this.surname = surname;
>>>>> +    }
>>>>> +
>>>>> +    public Date getBirthDate() {
>>>>> +        return birthDate;
>>>>> +    }
>>>>> +
>>>>> +    public void setBirthDate(Date birthDate) {
>>>>> +        this.birthDate = birthDate;
>>>>> +    }
>>>>> +}
>>>>> \ No newline at end of file
>>>>>
>>>>
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>>>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>>>
>>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
>> For additional commands, e-mail: dev-help@tapestry.apache.org
>>
>>
> 
> 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tapestry.apache.org
For additional commands, e-mail: dev-help@tapestry.apache.org


Mime
View raw message