Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
Difference between revisions of "EclipseLink/Examples/JPARS/Simple"
Line 130: | Line 130: | ||
− | *Switch between JSON and XML: Add a Header called | + | *Switch between JSON and XML: Add a Header called '''accept''' with value '''application/xml''' and execute the '''findAll''' query again. This time you will see the result in XML format. Changing the '''accept''' Header to '''application/json''' can also be used to accept/output JSON. |
+ | |||
+ | |||
+ | *Customize JSON/XML representation using MOXy Bindings: By specifying a MOXy bindings file in '''persistence.xml''', you can modify the format of the XML and JSON produced and accepted by your JPA-RS application. Uncomment the following line in '''persistence.xml''': | ||
+ | |||
+ | <source lang="xml"> | ||
+ | <?xml version="1.0" encoding="UTF-8"?> | ||
+ | <persistence version="2.0" | ||
+ | xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
+ | xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> | ||
+ | <persistence-unit name="jpars_example_student" transaction-type="JTA"> | ||
+ | <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> | ||
+ | <jta-data-source>jdbc/JPARSStudentDS</jta-data-source> | ||
+ | <class>eclipselink.example.jpars.student.model.Student</class> | ||
+ | <class>eclipselink.example.jpars.student.model.Course</class> | ||
+ | <exclude-unlisted-classes/> | ||
+ | <properties> | ||
+ | <property name="eclipselink.logging.level" value="FINEST"/> | ||
+ | <property name="eclipselink.logging.parameters" value="true"/> | ||
+ | <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> | ||
+ | </properties> | ||
+ | </persistence-unit> | ||
+ | </persistence> | ||
+ | </source> | ||
Revision as of 21:53, 8 May 2013
Simple Example - student
The student example is intended to provide a simple example of using JPA-RS with a single entity persistence unit in a web application.
Environment
The following are the minimal requirements for this example:
- EclipseLink 2.4.2
- Eclipse Java EE IDE - Juno Release, make sure Maven Integration for Eclipse WTP is installed.
- Git access to eclipselink examples git repository. The steps to connect to the repo can be found below.
- GlassFish 3.1.2.2
- REST client (Chrome Postman REST Client is used in this example, but you can use your favorite REST Client)
Overview
The following steps will be performed in setting up and running this example in your own environment:
- Installation & Configuration
- Install GlassFish 3.1.2.2
- Check out student example from GIT
- Database connectivity
- GlassFish - Datasource configuration
- Verify config
- Deploy web application
- Running the Example
- View metadata
- Create entity
- Update entity
- Query entity
- Switch between XML and JSON
- Customize XML/JSON representation using MOXy Bindings
- Delete entity
Installation and Configuration
1. Download EclipseLink 2.4.2 binaries from 2.4.2 Nightly Builds and replace the following files under $GLASSFISH_HOME/glassfish/modules with the corresponding jars you downloaded:
- javax.persistence.jar
- org.eclipse.persistence.antlr.jar
- org.eclipse.persistence.asm.jar
- org.eclipse.persistence.core.jar
- org.eclipse.persistence.dbws.jar
- org.eclipse.persistence.jpa.jar
- org.eclipse.persistence.jpa.jpql.jar
- org.eclipse.persistence.jpa.modelgen.jar
- org.eclipse.persistence.moxy.jar
- org.eclipse.persistence.oracle.jar
Make sure you clear the GlassFish osgi cache by removing the $GLASSFISH_HOME\glassfish\domains\<your_domain>\osgi-cache directory after you have replaced the bundles listed above, and before you restart GlassFish.
Note: If you want to see JPA-RS logs, add a logger for org.eclipse.persistence.jpars. Currently exceptions are logged at "FINER" log level, so configure the logger to FINER or FINEST. Use GlassFish Admin Console ➾ Configurations ➾ default-config ➾ Logger Settings ➾ Log Levels tab ➾ Add Logger to add a logger for JPA-RS.
2. Clone examples from git. The student example is stored under student folder.
git clone git://git.eclipse.org/gitroot/eclipselink/examples.git
3. Configure a datasource. Create an XA Datasource connection pool called JPARSStudentDS and define a new JDBC Resource using this connection pool. You can use any of the databases supported by EclipseLink. Your database driver should be placed under $GLASSFISH_HOME/glassfish/domains/<your_domain_folder>/lib/ext. Use the "Additional Properties" tab (shown below) to specify the database URL, User and Password (and any other mandatory properties that your database requires).
4. Launch Eclipse. Select File ➾ Import ➾ Maven ➾ Existing Maven Projects, hit Next and point Root Directory to the student folder. Hit Finish.
5. Build the student project. Right-click on the student project and select Maven ➾ Update Project..., then click OK.
6. Configure a GlassFish 3.1.2 server. Click the "New Server Wizard" link on the Servers tab. If you don't see GlassFish listed under available server types, click "Download additional server adapters" and select Oracle GlassFish Server Tools to install the GlassFish server adapter.
7. Enter domain directory, admin name and password based on your installation and hit Finish.
8. Deploy student.web. Right click on GlassFish (on the Servers tab), choose "Add and Remove", and select student.web in the available resources list. Hit Add and Finish.
You are now ready to run the example.
Running the Example
- Launch Chrome and Postman. Please see Creating and sending requests using Postman if you are not familiar with creating and sending REST requests using Postman. If you are using another tool to construct REST requests, please make sure you set Accept header correctly. The Accept header is used by HTTP clients to tell the server what content types they'll accept. The server will then send back a response, which will include a Content-Type header telling the client what the content type of the returned content actually is. HTTP requests can also contain Content-Type headers. With POST or PUT requests, the client sends data to the server as part of the request, and the Content-Type header tells the server what the data actually is (and thus determines how the server will parse it). JPA-RS accepts application/json and application/xml and for now we will focus on JSON.
- Create a student with a course: POST http://localhost:8080/student.web/persistence/v1.0/jpars_example_student/entity/Student/ (with the following body as an example):
{ "id": 65, "name": "Jane Smith", "courses": [ { "id":101, "name": "math" } ] }
- Execute a named query: GET http://localhost:8080/student.web/persistence/v1.0/jpars_example_student/query/Student.findAll to execute the named query findAll as defined in the eclipselink.example.jpars.student.model.Student entity.
- Switch between JSON and XML: Add a Header called accept with value application/xml and execute the findAll query again. This time you will see the result in XML format. Changing the accept Header to application/json can also be used to accept/output JSON.
- Customize JSON/XML representation using MOXy Bindings: By specifying a MOXy bindings file in persistence.xml, you can modify the format of the XML and JSON produced and accepted by your JPA-RS application. Uncomment the following line in persistence.xml:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="jpars_example_student" transaction-type="JTA"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <jta-data-source>jdbc/JPARSStudentDS</jta-data-source> <class>eclipselink.example.jpars.student.model.Student</class> <class>eclipselink.example.jpars.student.model.Course</class> <exclude-unlisted-classes/> <properties> <property name="eclipselink.logging.level" value="FINEST"/> <property name="eclipselink.logging.parameters" value="true"/> <property name="eclipselink.ddl-generation" value="drop-and-create-tables"/> </properties> </persistence-unit> </persistence>
- Delete student: DELETE http://localhost:8080/student.web/persistence/v1.0/jpars_example_student/entity/Student/65