tapestry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Massimo Lusetti <mluse...@gmail.com>
Subject Re: [1/3] git commit: TAP5-2065 Publish MongoClient and DB as tapestry services
Date Wed, 06 Feb 2013 08:26:11 GMT
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
>
>


-- 
Massimo
http://meridio.blogspot.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message