{"id":18244179,"url":"https://github.com/tomijuarez/java-test","last_synced_at":"2025-04-08T18:33:24.395Z","repository":{"id":152504780,"uuid":"114326295","full_name":"tomijuarez/java-test","owner":"tomijuarez","description":"Test técnico hecho en Java.","archived":false,"fork":false,"pushed_at":"2017-12-15T04:15:49.000Z","size":1439,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-14T14:51:37.913Z","etag":null,"topics":["hibernate","java-8","java-ee","jpa","maven","rest-api"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tomijuarez.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-12-15T04:13:28.000Z","updated_at":"2018-01-26T13:43:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"0ce77426-bd09-4462-aabf-0b9981eb93c3","html_url":"https://github.com/tomijuarez/java-test","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fjava-test","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fjava-test/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fjava-test/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tomijuarez%2Fjava-test/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tomijuarez","download_url":"https://codeload.github.com/tomijuarez/java-test/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247901909,"owners_count":21015355,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["hibernate","java-8","java-ee","jpa","maven","rest-api"],"created_at":"2024-11-05T09:15:41.979Z","updated_at":"2025-04-08T18:33:24.383Z","avatar_url":"https://github.com/tomijuarez.png","language":"Java","readme":"# Test técnico de Java\n\nEl presente da cuenta de la solución al test técnico de Java. En el mismo se utiliza Jax-RS para la implementación de la arquitectura REST, JPA + hsqldb In-Memory para la capa de persistencia, Maven para el control de dependencias y configuración de building y JUnit para los tests. El mismo se implementó utilizando la versión de 1.8 de Java sobre el IDE Intellij Idea 2017.3 Ultimate Edition. El deployment se realiza sobre el servidor Glassfish 5 y todas las dependencias necesarias están actualizadas en sus últimas versiones a la fecha 15/12/2017.\n\n## Configuración\nSe asume que el usuario ejecuta la aplicación desde Windows. En caso contrario la configuración es análoga pero con distintos directorios.\n### Base de Datos hsqldb\nEn principio, se debe descargar hsqldb (http://hsqldb.org/) y descomprimirlo en la máquina, preferentemente en la raíz del disco en una carpeta llamada hsqldb. Posteriormente debe crearse un archivo de properties del servidor de la base de datos, el cual debe ser guardado dentro de la carpeta previamente descomprimida. El archivo de propiedades será llamado server.properties y tendrá el siguiente contenido:\n```sh\nserver.database.0 = file:hsqldb/personasdb\nserver.dbname.0 = personasdb\n```\n\nPosteriormente se deben ejecutar los siguientes comandos:\n```sh\n\u003e java -classpath lib/hsqldb.jar org.hsqldb.server.Server\n\u003e java -classpath lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:hsqldb/personasdb --dbname.0 personasdb\n```\nnótese que el nombre del archivo contenedor y de la base de datos debe coincidir con el archivo de propiedades del servidor. Finalmente, se debe iniciar una instancia del servidor. Esto puede realizarse mediante interfaz gráfica mediante los siguientes comandos (sobre la raíz de hsqldb):\n\n```sh\n\u003e cd bin\n\u003e runManagerSwing.bat\n```\n\ndesde allí se debe configurar la base de datos como sigue:\n - type: HSQL Database Engine In-Memory\n - driver: org.hsqldb.jdbc.JDBCDriver\n - jdbc:hsqldb:hsql://localhost/personasdb\n\nLa configuración de persistencia de Java deberá contemplar estos valores (META-INF/persistence.xml).\n\n### deployment\nEl servidor elegido es Glassfish 5. En principio es necesario crear el archivo war correspondiente a la aplicación web. En este contexto, debe agregarse en el archivo pom.xml el siguiente bloque:\n```xml\n\u003cpackaging\u003ewar\u003c/packaging\u003e\n    \u003cbuild\u003e\n        \u003cplugins\u003e\n            \u003cplugin\u003e\n                \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n                \u003cartifactId\u003emaven-war-plugin\u003c/artifactId\u003e\n                \u003cconfiguration\u003e\n                    \u003cwebXml\u003eWEB-INF\\web.xml\u003c/webXml\u003e\n                \u003c/configuration\u003e\n            \u003c/plugin\u003e\n        \u003c/plugins\u003e\n    \u003c/build\u003e \n```\n\nPara generar el empaquetado con Maven y el deployment efectivo se debe correr el script deploy.sh desde la terminal utilizando Cygwin. Para solucionar ciertos problemas recurrentes se listan a continuación una serie de comandos.\n - Si se está ejecutando el puerto 4848 (Glassfish Admin) por una salida abrupta previa o por alguna otra aplicación, usar el comando ```sh netstat -a -n -o | find \"4848\" ``` para saber qué pid está usando el puerto. Luego se debe matar el proceso según el pid con el flag /f para forzar al sistema a eliminarlo: ```taskkill /f /pid id_del_proceso ```.\n - Si se desplegó previamente un war y se desea quitar del server, se debe ejecutar el comando undeploy desde el contexto de los archivos binarios de glassfish (c:/glassfish5/bin) ejecutando el comando ```./asadmin.bat undeploy nombre_del_war ```. \n\n## Rutas\n\nLas siguientes rutas son las únicas reconocidas en la aplicación.\n\n| Método | Path | Acción\n| ------ | ------ | ------ |\n| POST | http://localhost:8080/webapp/personas/{userId} | Inserta un usuario nuevo con id {userId} si no existe. Si existe en la base de datos arroja una excepción. El resto de la información se adjunta en el body del request en formato JSON. Por ejemplo: ```{\"nombre\": \"Ragnar\", \"apellido\": \"Lothbrock\", \"dni\": \"38670882\", \"edad\":42}``` |\n| GET | http://localhost:8080/webapp/personas |  Devuelve el listado de personas en formato JSON. |\n\n## Contacto\nPor cualquier queja o consulta, por favor contactar al siguiente e-mail: tomasjuarez.exa@gmail.com\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomijuarez%2Fjava-test","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftomijuarez%2Fjava-test","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftomijuarez%2Fjava-test/lists"}