Coder Social home page Coder Social logo

cuba-platform / admin-tools-addon Goto Github PK

View Code? Open in Web Editor NEW
7.0 8.0 6.0 1.65 MB

Interactive runtime diagnosis for CUBA applications

License: Apache License 2.0

Java 45.91% Groovy 38.62% Batchfile 0.29% Shell 0.04% JavaScript 0.18% XSLT 14.97%
cuba-platform cuba-component apache2 admin-tools

admin-tools-addon's Introduction

license Build Status

Admin Tools

Overview

The add-on extends the capabilities of CUBA applications with runtime diagnostics and management tools. Using console you can interactively inspect the running application, interact with the database and generate SQL scripts.

You can also send OS commands (only for Unix-like systems) and connect to remote servers. Auto Import Subsystem provides preconfiguring servers and transferring data among servers automatically during the server start/restart.

Key features:

  • Working with console straight from the user interface.
  • Ability to diagnose runtime applications.
  • Working with remote servers with the UI.
  • Downloading/uploading configuration files and scripts.
  • Executing operations on Tomcat server.

See sample application using this component.

Installation

The add-on can be added to your project in one of the ways described below. Installation from the Marketplace is the simplest way. The last version of the add-on compatible with the used version of the platform will be installed. Also, you can install the add-on by coordinates choosing the required version of the add-on from the table.

In case you want to install the add-on by manual editing or by building from sources see the complete add-ons installation guide in CUBA Platform documentation.

From the Marketplace

  1. Open your application in CUBA Studio. Check the latest version of CUBA Studio on the CUBA Platform site.
  2. Go to CUBA -> Marketplace in the main menu.

marketplace

  1. Find the Admin Tools add-on there.

addons

  1. Click Install and apply the changes. The add-on corresponding to the used platform version will be installed.

By coordinates

  1. Open your application in CUBA Studio. Check the latest version of CUBA Studio on the CUBA Platform site.
  2. Go to CUBA -> Marketplace in the main menu.
  3. Click the icon in the upper-right corner.

by-coordinates

  1. Paste the add-on coordinates in the corresponding field as follows:

com.haulmont.addon.admintools:cuba-at-global:<add-on version>

where <add-on version> is compatible with the used version of the CUBA platform.

Platform Version Add-on Version
7.2.x 1.5.0
7.1.x 1.4.0
7.0.x 1.3.1
6.10.x 1.2.1
6.9.x 1.1.3
6.8.x 1.0.5
  1. Click Install and apply the changes. The add-on will be installed to your project.

Enabling and Disabling Components

Each part of the add-on can be enabled or disabled. It can be turned on or off explicitly or by using a corresponding application property. By default, all components are enabled, except Auto Import Subsystem.

You can turn on Auto Import Subsystem in the middleware block, writing the next property in the file app.properties:

admintools.autoImport.enabled = true

You can enable/disable the other components in the client block, writing the next properties in the file web-app.properties:

admintools.groovyConsole.enabled = false
admintools.sqlConsole.enabled = false
admintools.jpqlConsole.enabled = false
admintools.diagnoseExecutionLog.enabled = false

admintools.scriptGenerator.enabled = false
admintools.shellExecutor.enabled = false
admintools.sshTerminal.enabled = false
admintools.configLoader.enabled = false
admintools.consoleScriptLoader.enabled = false

Predefined Roles

  • admin-tools-full-access - grants full access to the add-on features.
  • admin-tools-diagnose - grants an ability to upload diagnose info in admin tools Diagnose Wizard dialog window.

Add-on Components

Runtime Diagnose Components

Components Groovy Console, JPQL Console, SQL Console and Diagnose Execution Logs are imported from the Runtime Diagnose Component.

The following enhancements have been made for this component:

  • Added an ability to import scripts from ZIP files for Groovy Console, JPQL Console and SQL Console.
  • Added the autocomplete for providing suggestions while you type JPQL request in JPQL Console.

SQL Script Generator

This part of the component enables generating SQL scripts for selected project entities.

generate-scripts-menu

JPQL requests are used for entity selection. Start by specifying a metaclass, view and type of a script to be generated (insert, update, insert update). Selecting a metaclass automatically generates a JPQL request:

select e from example$Entity e

generate-scripts-dialog

After that, SQL scripts of the specified type are generated for the found entities. If no results are found, the system shows a corresponding notification. You can limit the number of entities to be loaded using the Entity Limit field.

Note: if you cancel the process, it will not be stopped on the middleware.

Shell Executor

Shell Executor is designed for running shell scripts. It allows you to run various OS commands from the application UI. Note that this functionality is available only on Unix-like systems.

shell_console_menu_item

shell_console

The screen consists of two sections: the first section allows a user to input and manage scripts and the second one enables working with results.

When scripts are run, the system generates temporary files which are stored in the tomcat/temp directory. Note that the component does not remove these files automatically.

SSH Terminal

SSH Terminal is designed for working with remote servers from the application UI.

ssh_console_menu_item

Before connecting to a remote server, it is required to specify credentials and a hostname in the corresponding section. As an alternative, use a private key and a passphrase for a connection instead of a password. After that, use action buttons to connect to a server. The toolbar of SSH Console contains also the Fit button, which allows a user to change the size of the terminal.

Connection parameters can be stored in the database (except the password and the passphrase). For saving, removing and loading connection parameters, use corresponding buttons. By default, connection parameters are saved only for the current user if the checkbox Is for everyone isn't checked. All available connection parameters are shown in the Saved Sessions list.

ssh_console_connected

Known Issues

  • The screen utility does not work in the terminal.

Config Loader

Using the Config Loader, it is possible to upload configuration files and various scripts to a configuration directory from the system UI without stopping the application.

Load-config-menu-item

The configuration directory is located at tomcat/conf. Additionally, you can specify a relative path in the corresponding field.

load-config

When trying to upload a file that already exists in the configuration directory or if names of two files coincide, a message requesting to confirm file replacement appears.

confirm-file-replace

Console Script Loader

console-script-loader-menu-item

Console Script Loader is used to import scripts in the Groovy, JPQL and SQL consoles. Upload ZIP in the corresponding field and it redirects to a necessary console with a script in a text field.

console-script-loader-menu-item

Auto Import Subsystem

The AutoImport subsystem is designed to preconfigure servers and transfer data among servers. The process is launched automatically during the server start/restart.

For importing data, specify a path to a ZIP archive or a JSON file in the configuration file. If an archive with the same name has already been processed, then it is not considered by the system and skipped.

There are several options for exporting various entities:

  • Security roles and access groups can be exported using the Export as ZIP or Export as JSON actions available on the Roles and Access Groups screens.
  • Arbitrary entities can be exported using the Export as ZIP or Export as JSON actions available on the Administration > Entity Inspector screen.

Creating an Auto Import Configuration File

  1. Example of a configuration file:

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <auto-import>
        <!--default processor-->
        <auto-import-file path="com/company/example/Roles.zip" bean="admintools_DefaultAutoImportProcessor"/>
        <auto-import-file path="com/company/example/Groups.json" class="com.company.example.SomeProcessor"/>
    </auto-import>

    Where path is a path to the data file, bean/class — a processor.

  2. Add the admintools.autoImportConfig property to app.properties and specify the path to the configuration file. For example:

    admintools.autoImportConfig = +com/company/example/auto-import.xml
  3. Add admintools.autoImport.enabled=true property to app.properties file.

Custom Import Processor

A processor is responsible for file processing and can be implemented as a bean or a simple Java class. If necessary, you can provide a custom implementation of a processor for any entity within the project by implementing the AutoImportProcessor interface.

Creating a Custom Import Processor

  1. Create a class that implements the AutoImportProcessor interface.

    @Component("admintools_ReportsAutoImportProcessor")
    public class ReportsAutoImportProcessor implements AutoImportProcessor {
        @Inject
        protected ReportService reportService;
        @Inject
        protected Resources resources;
    
        @Override
        public void processFile(String filePath) throws Exception {
            try (InputStream inputStream = resources.getResourceAsStream(filePath)) {
                byte[] fileBytes = IOUtils.toByteArray(inputStream);
                reportService.importReports(fileBytes);
            }
        }
    }
  2. If a processor is implemented as a Spring bean, specify the bean name in the configuration file. If a processor is implemented as a simple class, specify its FQN.

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <auto-import>
        ...
        <auto-import-file path="com/company/example/Reports.zip" bean="admintools_ReportsAutoImportProcessor"/>
        <auto-import-file path="com/company/example/Reports.json" class="com.company.example.ReportsAutoImportProcessor"/>
        ...
    </auto-import>

Logging

Logging information is available in the app.log file. See examples of the log output below.

Successful import

com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - file com/company/autoimporttest/Roles.zip is importing
...
com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - file com/company/autoimporttest/Roles.zip has been imported

Incorrect name of a processor

com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - file com/company/autoimporttest/Roles.zip is importing
...
com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'autoimport_InvalidAutoImportProcessor' available
com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - file com/company/autoimporttest/Roles.zip is importing
...
com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - java.lang.ClassNotFoundException: com.example.InvalidAutoImportProcessor

Uploaded archive is not found

com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - file com/company/autoimporttest/Roles.zip is importing
com.haulmont.addon.admintools.core.auto_import.AutoImporterImpl - File not found by the path com/example/invalid.zip

Known Issues

Class com.haulmont.cuba.core.app.importexport.EntityImportViewBuilder is extended by class ExtendedEntityImportViewBuilder to build JSON if ONE_TO_MANY meta property has type ASSOCIATION.

Tomcat JMX Bean

Tomcat JMX is a management bean which allows you to execute operations on Tomcat server currently running the application. It is supported on Windows and Unix-like operating systems. The bean can be accessed from Administration → JMX Console screen. Start searching by the object name 'Tomcat' and the domain 'cuba-at' and you will find the TomcatWeb MBean. If the middleware block is running on the same Tomcat, you will see also the TomcatCore MBean. In this case, you can use either of them.

find tomcat jmx

Tomcat JMX bean allows you to execute the following operations:

  • getTomcatAbsolutePath - returns an absolute path to the Tomcat directory;
  • shutdown - shutdowns the Tomcat process;
  • reboot - shutdowns the existing Tomcat process and runs a new one;
  • runShellScript - runs a script in the Tomcat directory with the following arguments:
    1. Path - path to a script relative to the Tomcat root directory;
    2. Arguments - arguments that should be passed to the script.

tomcat jmx

admin-tools-addon's People

Contributors

dmakagonova avatar ikuchmin avatar ivanmalofeev avatar knstvk avatar nikitashchienko avatar slogan163 avatar tinhol avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

admin-tools-addon's Issues

Error using SSH terminal

Error on SSH terminal screen

ava.lang.IllegalStateException: Can't find metaClass 'com.haulmont.addon.admintools.global.ssh.SshCredentials'
	at com.haulmont.cuba.gui.xml.data.DsContextLoader.loadMetaClass(DsContextLoader.java:354)
	at com.haulmont.cuba.gui.xml.data.DsContextLoader.initDatasourceAttributes(DsContextLoader.java:240)
	at com.haulmont.cuba.gui.xml.data.DsContextLoader.loadDatasource(DsContextLoader.java:220)
	at com.haulmont.cuba.gui.xml.data.DsContextLoader.loadDatasources(DsContextLoader.java:94)
	at com.haulmont.cuba.web.sys.WebScreens.loadDsContext(WebScreens.java:379)
	at com.haulmont.cuba.web.sys.WebScreens.initDsContext(WebScreens.java:357)
	at com.haulmont.cuba.web.sys.WebScreens.loadWindowFromXml(WebScreens.java:345)
	at com.haulmont.cuba.web.sys.WebScreens.createScreen(WebScreens.java:226)
	at com.haulmont.cuba.web.sys.WebScreens.create(WebScreens.java:171)
	at com.haulmont.cuba.gui.config.MenuItemCommands$ScreenCommand.run(MenuItemCommands.java:212)
	at com.haulmont.cuba.web.sys.SideMenuBuilder$MenuCommandExecutor.accept(SideMenuBuilder.java:264)
	at com.haulmont.cuba.web.sys.SideMenuBuilder$MenuCommandExecutor.accept(SideMenuBuilder.java:249)
	at com.haulmont.cuba.web.gui.components.mainwindow.WebSideMenu$MenuItemImpl.menuSelected(WebSideMenu.java:569)
	at com.haulmont.cuba.web.widgets.CubaSideMenu$1.menuItemTriggered(CubaSideMenu.java:90)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1577)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:107)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:73)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:108)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:668)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:834)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Thread.java:748)

Add predefined roles

Environment

  • Platform version: 7.2.x
  • Addon version: 1.5-SNAPSHOT

Description

Create predefined system roles

A lot of empty space in the Console Script Loader dialog

Environment

  • Platform version: 7.2
  • Addon version: 1.5

Description of the bug or enhancement

  1. Run the admin-tools-addon-demo
  2. Open Console Script Loader

AR: A lot of empty space in the opened Console Script Loader dialog
изображение
Also, this problem is reproduced in the add-on of the previous version

Scripts are not show after uploading in Console Script Loader

Environment

  • Platform version: 7.2
  • Addon version: 1.5

Description of the bug or enhancement

Case 1

  1. Run the admin-tools-addon-demo
  2. Open Console Script Loader
  3. Upload attachment groovy zip
  4. Click to the Apply button

AR: Groovy console is empty
изображение

Also, console opens empty for archives with .sql script.

create-user.zip

Case 2

  1. Run the admin-tools-addon-demo
  2. Open Console Script Loader
  3. Upload attachment groovy zip
  4. Click to the Apply button
  5. Open attachment groovy script and copy it
  6. Paste the script in the console and run console
  7. Click in the download result button

AR: NPE occurs

java.lang.NullPointerException
	at de.diedavids.cuba.runtimediagnose.diagnose.DiagnoseExecutionFactoryBean.createExecutionResultFromDiagnoseExecution(DiagnoseExecutionFactoryBean.groovy:84)
	at de.diedavids.cuba.runtimediagnose.web.screens.console.AbstractConsoleWindow.downloadConsoleResult(AbstractConsoleWindow.groovy:74)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.haulmont.cuba.gui.xml.DeclarativeAction.actionPerform(DeclarativeAction.java:101)
	at com.haulmont.cuba.web.gui.components.WebButton.buttonClicked(WebButton.java:67)
	at com.haulmont.cuba.web.widgets.CubaButton.fireClick(CubaButton.java:76)
	at com.vaadin.ui.Button$1.click(Button.java:57)
	at sun.reflect.GeneratedMethodAccessor148.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:153)
	at com.vaadin.server.ServerRpcManager.applyInvocation(ServerRpcManager.java:115)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocation(ServerRpcHandler.java:431)
	at com.vaadin.server.communication.ServerRpcHandler.handleInvocations(ServerRpcHandler.java:396)
	at com.vaadin.server.communication.ServerRpcHandler.handleRpc(ServerRpcHandler.java:260)
	at com.vaadin.server.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:82)
	at com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)
	at com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1578)
	at com.vaadin.server.VaadinServlet.service(VaadinServlet.java:425)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.serviceAppRequest(CubaApplicationServlet.java:329)
	at com.haulmont.cuba.web.sys.CubaApplicationServlet.service(CubaApplicationServlet.java:215)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)
	at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)
	at com.haulmont.cuba.web.sys.CubaHttpFilter.doFilter(CubaHttpFilter.java:93)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:526)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)

Disable components no matter false or true

  1. Create a new project with the component in the Cuba
  2. Add to web-app.properties admintools.groovyConsole.enabled = false
  3. Run the app and check in the Console menu (Administration -> Console)there is no Groovy console
  4. Set admintools.groovyConsole.enabled = true
  5. Run app and check in the Console menu (Administration -> Console) there is Groovy console

Expected result: there is Groovy console when admintools.groovyConsole.enabled = true
Actual result: there is NO Groovy console when admintools.groovyConsole.enabled = true

Feature toggles for each component

Add ability to turn off any component by an application property. For example, I want to have SQL/JPQL console but I'm scared by SSH capabilities and want them to disappear completely from my app.

Upgrade add-on to CUBA 7.1 platform version.

Upgrade add-on to CUBA 7.1 platform version.
Snapshot add-on version should be updated to 1.4.
Current releases/cuba_7.0 branch should be merged from the master. Create this branch if it does not exist.

Incorrect working directory used to upload config file after changes in CUBA 7.2

Environment

  • Platform version: 7.2
  • Addon version: 1.5

Description of the bug or enhancement

Case 1

  1. Click Administration → Admin tools → Config Loader

AR: In opened dialog window displayed incorrectly config directory: ./tomcat/conf/

Case 2

  1. Click Administration → Admin tools → Config Loader
  2. Drug and drop a file in a drop file area
  3. Click Apply
  4. Open app_home/app/conf and check that file was uploaded

AR: File was upload in app_home/app

Application working directories changed in CUBA 7.2 #114

Wrong text about upload directory in Config Loader

image

At the same time, README tells that "The location of the configuration directory is determined by the cuba.confDir application property." and the screenshot shows different path.

In fact, the files in dev environment are uploaded to tomcat/conf, which does not conform neither to the first statement nor second.

Fix README

  • Place addon components in the order of their appearance in menu
  • Fix screenshots, they do not correspond to reality
  • "allows to do smth" -> "allows someone to do smth", e.g "allows you to". Or "enables to do smth".
  • "JMX Tomcat" -> "Tomcat JMX"
  • "allows operating with Tomcat" - "allows you to execute operations with Tomcat server currently running the application"
  • "There are two objects: TomcatCore for operating with a core module and TomcatWeb for operating with web module." - what does it mean?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.