• Как выполнить асинхронно часть метода?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Не знаю, как продолжить выполнение с учётом этой конструкции, т.к. контроллер должен ведь вернуть ответ какой-то
  • Как выполнить асинхронно часть метода?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Не освобождает поток, т.к. метод get() у Future является блокирующим
  • Возможно ли в Spring обращаться к динамически создаваемым таблицам?

    Olegatorapp
    @Olegatorapp Автор вопроса
    alexw1n, Понял, так сейчас и сделано, но надеялся, что что-то упустил и есть какие-то решения) спасибо
  • Возможно ли в Spring обращаться к динамически создаваемым таблицам?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Ну у меня в базе есть хранимая процедура, которая создаёт партицию, а если она уже существует, то возвращает её имя и потом по этому имени я инсёрчу значения в базу
    Вероятнее всего я что-то не знаю про встреонные возможности spring ?
  • Как в Spring разослать асинхронные Http запросы, не блокируя поток?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Да, я так и сделал, там в комментах отписал)
  • Как в Spring разослать асинхронные Http запросы, не блокируя поток?

    Olegatorapp
    @Olegatorapp Автор вопроса
    На клиенте размещается только сгенеренный js скрипт, а потом уже оттуда выполняются запроса на сервер.

    Но сейчас проблема частично решена путём того, что отправку запросов обернул в DeferredResult и построил из них ConcurrentLinkedDeque>. Теперь на время рассылки потоки освобождается и успевают принять ещё входящих запросов, а потом возвращаются для сборки ответов
  • Как использовать максимум процессора для выполнения многопоточной задачи?

    Olegatorapp
    @Olegatorapp Автор вопроса
    А вопрос ещё, может что-то посоветуешь из литературы полезное в плане многопоточности и Java?
  • Как использовать максимум процессора для выполнения многопоточной задачи?

    Olegatorapp
    @Olegatorapp Автор вопроса
    При той нагрузке у сервера производительность:
    Connection Times (ms)
    min mean[+/-sd] median max
    Connect: 0 58 173.2 29 3072
    Processing: 0 39 19.7 37 902
    Waiting: 0 29 18.9 27 897
    Total: 6 96 175.1 69 3125

    Percentage of the requests served within a certain time (ms)
    50% 69
    66% 74
    75% 78
    80% 80
    90% 86
    95% 95
    98% 1074
    99% 1092
    100% 3125 (longest request)


    Один запрос за 2 мс прилетает

    Я понял о чём ты, впринциеп, да, буду копать в другую сторону тогда
  • Как исправить ошибку dataSource/jdbcTemplate при загрузке Spring?

    Olegatorapp
    @Olegatorapp Автор вопроса
    а, да, это тестовая бд, там не суть, к ней коннекшн есть, если что
  • Как запретить опускать элемент на область?

    Olegatorapp
    @Olegatorapp Автор вопроса
    twobomb, https://jsfiddle.net/yfrewdvp/6/
    Только не могу понять, Как правильно подключить тут js
  • Как вернуть html страницу в Spring Boot?

    Olegatorapp
    @Olegatorapp Автор вопроса
    raner134, да, шаблонизатор не подключён был, пардон и спасибо:)
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев, просто выходит так, что объект Project, который собирается с этого jsp, внутри должен вмещать и List, и List
    И просто как тогда вмести на одной странице, что бы можно было заполнить оба типа объектов с одной страницы? Или правильно делать так, что бы это были разные страницы?
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев Сергей, прошу прощения, но вопрос есть ещё один маленький...
    На страницу надо было передать два разных типа объектов: Sprint, Workers
    Сейчас запись выглядит вот так, всё работает, но надо теперь получить эти данные обратно в POST запросе. Как вытянуть оттуда оба типа? они были помещены туда через Map<> у которой атрибут назывался "model". Тут по этому атрибуту нормально возвращается Sprint, но вот со вторым - возвращает null.

    Мапу передавал через запрос POST, т.к. там ранее вызывался другой запрос:
    POST Map
    @RequestMapping(value = "/create", method = RequestMethod.POST)
      public ModelAndView ProjectSizePost(
          @RequestParam("countSprints") Integer countSprints,
          @RequestParam("countWorkers") Integer countWorkers,
          Model model) {
        numberOfSprint = countSprints;
        numberOfWorkers = countWorkers;
        Map<String, Object> models = new HashMap<>();
    
        SprintsForm formSprintData = new SprintsForm();
        List<SprintFormData> sprints = createEmptyList(numberOfSprint);
        formSprintData.setSprints(sprints);
    
        WorkPeriodForm workPeriodForm = new WorkPeriodForm();
        List<WorkPeriodFormData> workers = createEmptyList(numberOfWorkers);
        workPeriodForm.setWorkers(workers);
    
        models.put("formSprintData", formSprintData);
        models.put("formWorkPeriodData", workPeriodForm);
    
        return new ModelAndView("project/create-form", "model", models);
      }
    POST get Map
    @RequestMapping(value = "/create-form", method = RequestMethod.POST)
      public String createProject(
          @RequestParam("projectId") Integer id,
          @RequestParam("name") String name,
          @RequestParam("startDate") String startDate,
          @RequestParam("endDate") String endDate,
          @RequestParam("projectStatus") OCStatus projectStatus,
          @RequestParam("projectManagerId") Integer projectManagerId,
          @ModelAttribute("model") SprintsForm sprintsForm,
          @ModelAttribute("model") WorkPeriodForm workPeriodForm) {
    
        List<SprintFormData> sprints =sprintsForm.getSprints();
        List<WorkPeriodFormData> workers =workPeriodForm.getWorkers();
    
        MapperDateConverter mdc = new MapperDateConverter();
    
        Project project = new Project.ProjectBuilder()
            .projectId(BigInteger.valueOf(id))
            .name(name)
            .startDate(mdc.convertStringToDate(startDate))
            .endDate(mdc.convertStringToDate(endDate))
            .build();
        project.setProjectManagerId(BigInteger.valueOf(projectManagerId));
        project.setProjectStatus(projectStatus);
        projectDao.createProject(project);
    
    //    List<SprintFormData> sprintFormDataList = formSprintData.getSprints();
    //    List<WorkPeriodFormData> workPeriodFormDataList = formWorkPeriodData
    //        .getWorkers();
    
        return "response_status/success";
      }
    create-form.jsp
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Create Project</title>
    </head>
    <body>
    <div align="center">
        <form action="/project/create-form" method="post" name="/project/create-form"
              commandName="projectForm">
            <table border="0">
                <tr>
                    <h2>CreateProject</h2></td>
                </tr>
                <tr>
                    <td>Project Id:</td>
                    <td><input type="text" name="projectId" size="70"
                               value=${projectId}></td>
                </tr>
                <tr>
                    <td>Project Name:</td>
                    <td><input type="text" name="name" size="70"
                               value=${projectName}></td>
                </tr>
                <tr>
                    <td>StartDate (mm/dd/yyyy):</td>
                    <td><input type="text" name="startDate" size="70"
                               value=${startDate}></td>
                </tr>
                <tr>
                    <td>EndDate (mm/dd/yyyy):</td>
                    <td><input type="text" name="endDate" size="70"
                               value=${endDate}></td>
                </tr>
                <tr>
                    <td>Status:</td>
                    <td><input type="text" name="projectStatus" size="70"
                               value=${status}></td>
                </tr>
                <tr>
                    <td>Project Manager:</td>
                    <td><input type="text" name="projectManagerId" size="70"
                               value=${pmId}></td>
                </tr>
                <tr>
                    <td>Sprints</td>
                    <form:form modelAttribute="model" method="post">
                        <c:forEach items="${model.formSprintData.sprints}" var="sprint" varStatus="status">
                            <input type="text" name="sprints[${status.index}].name" value="${sprint.name}" placeholder="Name"></td><br>
                            <input type="text" name="sprints[${status.index}].startDate" value="${sprint.startDate}" placeholder="Start Date"><br>
                            <input type="text" name="sprints[${status.index}].plannedEndDate" value="${sprint.plannedEndDate}" placeholder="End date"><br>
                            <br>
                        </c:forEach>
                    </form:form>
                </tr>
                <tr>
                    <td>Workers:</td>
                    <form:form modelAttribute="model" method="post">
                        <c:forEach items="${model.formWorkPeriodData.workers}" var="worker" varStatus="status">
                            <input type="text" name="workers[${status.index}].name" value="${worker.name}" placeholder="Name"></td><br>
                            <br>
                        </c:forEach>
                    </form:form>
    
                </tr>
                <tr>
                    <input type="submit" value="Create"/></td>
                </tr>
            </table>
        </form>
    </div>
    </body>
    </html>

  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев, Сергей, спасибо большое! Я понял, как это работает внутри, теперь возвращает нужное кол-во :))
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сейчас такой вид у формы:
    import java.util.List;
    
    public class SprintsForm {
    
      private List<TestSprint> sprints;
    
      public List<TestSprint> getSprints() {
        return sprints;
      }
    
      public void setSprints(List<TestSprint> sprints) {
        this.sprints = sprints;
      }
    }
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев, дада, возможно там, только падает 500 ошибка, теперь возращает в этом месте не коллекцию, а сам объект
    HTTP Status 500 - Request processing failed; nested exception is org.springframework.beans.InvalidPropertyException: Invalid property 'sprints[0][email]' of bean class [main.com.netcracker.project.controllers.SprintsForm]: Property referenced in indexed property path 'sprints[0][email]' is neither an array nor a List nor a Map; returned value was [main.com.netcracker.project.controllers.TestSprint@d68ca83]
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев, внутри sprint.jsp?
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    <html>
    <head>
        <title>Sprint</title>
    </head>
    <body>
    <%--@elvariable id="formData" type="main.com.netcracker.project.controllers.SprintsForm"--%>
    <form:form modelAttribute="formData" method="post">
        <c:forEach items="${formData.sprints}" var="sprint" varStatus="status">
            <input type="text" name="sprints[${status.index}]['name']" value="${sprint.name}" placeholder="Name"></td><br>
            <input type="text" name="sprints[${status.index}]['phone']" value="${sprint.phone}" placeholder="Phone"><br>
            <input type="text" name="sprints[${status.index}]['email']" value="${sprint.email}" placeholder="E-Mail"><br>
        </c:forEach>
        <input type="submit" value="Сохранить">
    </form:form>
    </body>
    </html>
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Сергей Горностаев, нет, formData.getSprints() -> возвращает null
  • Как преобразовать html в Map или массив?

    Olegatorapp
    @Olegatorapp Автор вопроса
    Почти всё хорошо, только вопрос, что не так делаю:

    @RequestMapping(value = "/test",method = RequestMethod.GET)
      public ModelAndView showForm() {
        SprintsForm formData = new SprintsForm();
        formData.setSprints(sprints);
        return new ModelAndView("sprint", "formData", formData);
      }
    
      @RequestMapping(value = "/test",method = RequestMethod.POST)
      public ModelAndView handleForm(@ModelAttribute("formData") SprintsForm formData,
          BindingResult result) {
        System.out.println(formData);
        System.out.println(formData.getSprints());
        List<TestSprint> sprints = formData.getSprints();
    
        if(null != sprints && sprints.size() > 0) {
          ProjectController.sprints = sprints;
        }
    
        return new ModelAndView("show_sprint", "formData", formData);
    
      }


    И сами jsp:
    show_sprint
    <%@taglib uri="http://www.springframework.org/tags" prefix="spring"%>
    <%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <html>
    <head>
        <title>Show</title>
    </head>
    <body>
    <table width="50%">
        <tr>
            <th>Name</th>
            <th>Lastname</th>
            <th>Email</th>
            <th>Phone</th>
        </tr>
        <c:forEach items="${contactForm.contacts}" var="contact" varStatus="status">
            <tr>
                <td>${sprint.name}</td>
                <td>${sprint.phone}</td>
                <td>${sprint.email}</td>
            </tr>
        </c:forEach>
    </table>
    <br/>
    
    
    <input type="button" value="Back" onclick="javascript:history.back()"/>
    </body>
    </html>

    sprint
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    <%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
             pageEncoding="UTF-8" %>
    <html>
    <head>
        <title>Sprint</title>
    </head>
    <body>
    <%--@elvariable id="formData" type="main.com.netcracker.project.controllers.SprintsForm"--%>
    <form:form modelAttribute="formData" method="post">
        <c:forEach items="${formData.sprints}" var="sprint" varStatus="status">
            <input type="text" name="sprint[${status.index}]['name']" value="${sprint.name}" placeholder="Name"></td><br>
            <input type="text" name="sprint[${status.index}]['phone']" value="${sprint.phone}" placeholder="Phone"><br>
            <input type="text" name="sprint[${status.index}]['email']" value="${sprint.email}" placeholder="E-Mail"><br>
        </c:forEach>
        <input type="submit" value="Сохранить">
    </form:form>
    </body>
    </html>



    В post методе внутри контроллера приходит null, ничего не возращается из первой jsp