Title: SampleTemplate # A template for OpenJPA Samples ## Introduction A paragraph describing the basic purpose of the presented sample. In general, the purpose of a sample could be, but not limited to, * to highlight some new feature introduced in a release (e.g. Bean Validation or Criteria API) * to describe wiring between frameworks e.g. JSF and JPA, GWT and JPA * to demonstrate operation within a container e.g. OSGi, Spring, Tomcat or JEE * a combination of the above For example,
"this sample demonstrates usage of new Bean Validation API in a multi-tier web application" or "this sample integrates client-side Google Web Toolkit architecture with sever-side JPA application". The functional features of the samples such as "This OpenBooks example can be used to place order and browse books" -- are not that important in this context but can be mentioned. ## Installation State the availability of the sample. For example, * Is the distribution available as a downloadable archieve? If packaged in an archieve, all source code, build instructions must be available in the distribution itself. A *README.txt* should be inside and outside the distribution. * Is the sample to be checked out from code repository? In such cases, building the sample should be done with Ant or Maven. Prefer Ant to make the dependencies and steps more visible. **The steps in this section should be clear and concise for an user to follow them to build, deploy and run the sample.** ## Environment Enumerate the software artifacts required to build, deploy and run the sample. The artifacts should be categorized into build time and run time dependencies. ## Configuration Often building a sample will require the user to configure dependencies (such as OpenJPA libraries or JDBC Driver), for his/her local environment. The ANT build scripts for a sample must accept configurable properties via *build.properties* or similar configurable mechanics. The properties configuration file itself should be documented to explain the dependencies and how the build script use them. Maven based build scripts can make these dependencies more implicit and saves the user to explicitly satisfy such dependencies. However, ANT based builds are preferred over Maven for the samples, so that the build steps and dependencies are made more visible to the user. ## Best Practices The samples, besides demonstration of a feature, are a suitable vehicle of showing good development practices in JPA application programming model such as persistent domain modeling or architectural practices. It is recommended that such best practices be mentioned in several places: * in the source code * build scripts * a separate document that enumerates them in one place. ## Caveats The complete develop-build-run cycle of a sample will often bring out the special considerations. For example, reported common errors in deployment in a container and their remedies or certain undesirable usage patterns. The description of a sample should highlight these special considerations rather than making the exercise appear as a series of perfectly easy steps. The caveats can be further highlighted by linking them to relevant JIRA issues or forum discussions or external blogs etc.