| [//]: # " Copyright (c) 2015, 2018 Oracle and/or its affiliates. All rights reserved. " |
| [//]: # " " |
| [//]: # " This program and the accompanying materials are made available under the " |
| [//]: # " terms of the Eclipse Distribution License v. 1.0, which is available at " |
| [//]: # " http://www.eclipse.org/org/documents/edl-v10.php. " |
| [//]: # " " |
| [//]: # " SPDX-License-Identifier: BSD-3-Clause " |
| |
| Bookmark Example |
| ================ |
| |
| This example demonstrates how to use JPA in the backend. The example is |
| based on bookmark example from the [RESTful Web |
| Services](http://www.oreilly.com/catalog/9780596529260/) book, which was |
| inspired by the [http://del.icio.us/](http://del.icio.us/v1) web |
| service. |
| |
| A bookmark web application is presented that is capable of maintaining |
| users and their bookmarks. |
| |
| Contents |
| -------- |
| |
| The mapping of the URI path space is presented in the following table: |
| |
| URI path | Resource class | HTTP methods | Notes |
| --------------------------------------- | ------------------- | ----------------------------------------------------- | -------------------------------------------------------- |
| **_/users_** | UsersResource | GET | Returns a list of users. |
| **_/users/{userid}_** | UserResource | GET, PUT (used also for creating new users), DELETE | Returns user details |
| **_/users/{userid}/bookmarks_** | BookmarksResource | GET, POST | Returns a list of bookmarks for actual user resource. |
| **_/users/{userid}/bookmarks/{bmid}_** | BookmarkResource | GET, PUT, DELETE | Returns bookmark uri and a long and short description. |
| |
| Running the Example |
| ------------------- |
| |
| Bookmark example runs on Glassfish 3.x application servers |
| ([https://javaee.github.io/glassfish/](https://javaee.github.io/glassfish/)) and needs a |
| running JavaDB |
| (<http://www.oracle.com/technetwork/java/javadb/overview/index.html>) |
| instance for underlying data (it comes along with GlassFish). |
| |
| Presuming, you have installed Glassfish 3.1 `AS_HOME` variable should |
| point to your glassfish installation directory. |
| |
| #### Building And Starting The Bookmark Service |
| |
| If `.asadminpass` file is missing at your home directory, you will need |
| to run the following command to get it created |
| |
| $AS_HOME/bin/asadmin start-domain |
| $AS_HOME/bin/asadmin login |
| |
| You then build and run the example by |
| |
| mvn package |
| $AS_HOME/bin/asadmin start-domain |
| $AS_HOME/bin/asadmin start-database |
| $AS_HOME/bin/asadmin create-jdbc-connection-pool \ |
| --datasourceclassname org.apache.derby.jdbc.ClientDataSource \ |
| --restype javax.sql.DataSource \ |
| --property "portnumber=1527:password=REST:user=REST:serverName=localhost:databaseName=BookmarkDB:connectionAttributes=;create\=true" bookmarkPool |
| $AS_HOME/bin/asadmin create-jdbc-resource --connectionpoolid bookmarkPool jdbc/bookmarkSample |
| $AS_HOME/bin/asadmin deploy target/bookmark.war |
| |
| **Notice:** <span style="color: #f00">On Windows</span>: you might need |
| to replace asadmin with asadmin.bat. Also, because it seems there are |
| some issues with copy-pasting backslashes, you will also need to use the |
| following one-liner instead of the above mentioned complex command: |
| |
| asadmin create-jdbc-connection-pool --datasourceclassname org.apache.derby.jdbc.ClientDataSource --restype javax.sql.DataSource --property "portnumber=1527:password=REST:user=REST:serverName=localhost:databaseName=BookmarkDB:connectionAttributes=;create\=true" bookmarkPool |
| |
| and make sure you do not miss the backslash (\\) in `create\=true` part. |
| |
| #### Test Client Running |
| |
| mvn test -Djersey.config.test.container.factory=org.glassfish.jersey.test.external.ExternalTestContainerFactory -Djersey.config.test.logging.enable=true -Djersey.config.test.logging.dumpEntity=true -Djersey.config.test.container.port=8080 -Ptest |
| |
| Links |
| ----- |
| |
| <http://java.net/projects/bpcatalog/sources/svn/content/trunk/ee5/docs/persistence/webonlyapp.html?raw=true> |