diff --git a/doc/release-notes/6953-dev-jsf-settings.md b/doc/release-notes/6953-dev-jsf-settings.md new file mode 100644 index 00000000000..2ad8c45edf1 --- /dev/null +++ b/doc/release-notes/6953-dev-jsf-settings.md @@ -0,0 +1,4 @@ +### Dynamic Java Server Faces Configuration Options + +This release includes a new way to easily change JSF settings via MicroProfile Config, especially useful during development. +See the [development guide on "Debugging"](https://guides.dataverse.org/en/latest/developers/debugging.html). diff --git a/doc/sphinx-guides/source/developers/debugging.rst b/doc/sphinx-guides/source/developers/debugging.rst index 402788cf4e0..d4ba214d5be 100644 --- a/doc/sphinx-guides/source/developers/debugging.rst +++ b/doc/sphinx-guides/source/developers/debugging.rst @@ -10,6 +10,60 @@ Logging By default, the app server logs at the "INFO" level but logging can be increased to "FINE" on the fly with (for example) ``./asadmin set-log-levels edu.harvard.iq.dataverse.api.Datasets=FINE``. Running ``./asadmin list-log-levels`` will show the current logging levels. +.. _jsf-config: + +Java Server Faces (JSF) Configuration Options +--------------------------------------------- + +Some JSF options can be easily changed via MicroProfile Config (using environment variables, system properties, etc.) +during development without recompiling. Changing the options will require at least a redeployment, obviously depending +how you get these options in. (Variable substitution only happens during deployment and when using system properties +or environment variables, you'll need to pass these into the domain, which usually will require an app server restart.) + +Please note that since Payara 5.2021.1 supporting MicroProfile Config 2.0, you can +`use profiles `_ +to maintain your settings more easily for different environments. + +.. list-table:: + :widths: 15 15 60 10 + :header-rows: 1 + :align: left + + * - JSF Option + - MPCONFIG Key + - Description + - Default + * - javax.faces.PROJECT_STAGE + - dataverse.jsf.project-stage + - Switch to different levels to make JSF more verbose, disable caches etc. + Read more `at `_ + `various `_ `places `_. + - ``Production`` + * - javax.faces.INTERPRET_EMPTY + _STRING_SUBMITTED_VALUES_AS_NULL + - dataverse.jsf.empty-string-null + - See `Jakarta Server Faces 3.0 Spec`_ + - ``true`` + * - javax.faces.FACELETS_SKIP_COMMENTS + - dataverse.jsf.skip-comments + - See `Jakarta Server Faces 3.0 Spec`_ + - ``true`` + * - javax.faces.FACELETS_BUFFER_SIZE + - dataverse.jsf.buffer-size + - See `Jakarta Server Faces 3.0 Spec`_ + - ``102400`` (100 KB) + * - javax.faces.FACELETS_REFRESH_PERIOD + - dataverse.jsf.refresh-period + - See `Jakarta Server Faces 3.0 Spec`_ + - ``-1`` + * - primefaces.THEME + - dataverse.jsf.primefaces.theme + - See `PrimeFaces Configuration Docs`_ + - ``bootstrap`` + +.. _Jakarta Server Faces 3.0 Spec: https://jakarta.ee/specifications/faces/3.0/jakarta-faces-3.0.html#a6088 +.. _PrimeFaces Configuration Docs: https://primefaces.github.io/primefaces/8_0/#/gettingstarted/configuration + ---- Previous: :doc:`documentation` | Next: :doc:`coding-style` diff --git a/doc/sphinx-guides/source/developers/dev-environment.rst b/doc/sphinx-guides/source/developers/dev-environment.rst index 61ab98bf292..2ec5dbea29e 100755 --- a/doc/sphinx-guides/source/developers/dev-environment.rst +++ b/doc/sphinx-guides/source/developers/dev-environment.rst @@ -192,6 +192,17 @@ Run the following command: This will disable DOI registration by using a fake (in-code) DOI provider. Please note that this feature is only available in Dataverse Software 4.10+ and that at present, the UI will give no indication that the DOIs thus minted are fake. +Configure Your Development Environment for GUI Edits +---------------------------------------------------- + +Out of the box, a JSF setting is configured for production use and prevents edits to the GUI (xhtml files) from being visible unless you do a full deployment. + +It is recommended that you run the following command so that simply saving the xhtml file in Netbeans is enough for the change to show up. + +``asadmin create-system-properties "dataverse.jsf.refresh-period=1"`` + +For more on JSF settings like this, see :ref:`jsf-config`. + Next Steps ---------- diff --git a/scripts/dev/dev-rebuild.sh b/scripts/dev/dev-rebuild.sh index f98edc8d938..71857b14068 100755 --- a/scripts/dev/dev-rebuild.sh +++ b/scripts/dev/dev-rebuild.sh @@ -57,6 +57,10 @@ psql -U $DB_USER $DB_NAME -f doc/sphinx-guides/source/_static/util/createsequenc echo "Setting DOI provider to \"FAKE\"..." curl http://localhost:8080/api/admin/settings/:DoiProvider -X PUT -d FAKE + +echo "Allowing GUI edits to be visible without redeploy..." +$PAYARA_DIR/glassfish/bin/asadmin create-system-properties "dataverse.jsf.refresh-period=1" + export API_TOKEN=`cat /tmp/setup-all.sh.out | grep apiToken| jq .data.apiToken | tr -d \"` echo "Publishing root dataverse..." diff --git a/src/main/resources/META-INF/microprofile-config.properties b/src/main/resources/META-INF/microprofile-config.properties index 8c475f1c050..09d71dfbf3a 100644 --- a/src/main/resources/META-INF/microprofile-config.properties +++ b/src/main/resources/META-INF/microprofile-config.properties @@ -1,3 +1,4 @@ +# DATABASE dataverse.db.host=localhost dataverse.db.port=5432 dataverse.db.user=dataverse diff --git a/src/main/webapp/WEB-INF/web.xml b/src/main/webapp/WEB-INF/web.xml index 9ccec3d9d59..8179ca970d5 100644 --- a/src/main/webapp/WEB-INF/web.xml +++ b/src/main/webapp/WEB-INF/web.xml @@ -22,16 +22,19 @@ org.jboss.weld.context.conversation.lazy false - + javax.faces.PROJECT_STAGE - - Production + + ${MPCONFIG=dataverse.jsf.project-stage:Production} primefaces.THEME - bootstrap + + ${MPCONFIG=dataverse.jsf.primefaces.theme:bootstrap} @@ -42,19 +45,23 @@ javax.faces.INTERPRET_EMPTY_STRING_SUBMITTED_VALUES_AS_NULL - true + + ${MPCONFIG=dataverse.jsf.empty-string-null:true} javax.faces.FACELETS_SKIP_COMMENTS - true + + ${MPCONFIG=dataverse.jsf.skip-comments:true} javax.faces.FACELETS_BUFFER_SIZE - 102400 + + ${MPCONFIG=dataverse.jsf.buffer-size:102400} javax.faces.FACELETS_REFRESH_PERIOD - -1 + + ${MPCONFIG=dataverse.jsf.refresh-period:-1}