Как загрузить xml в Optaplanner

Я создал базу данных MySQL с записями, похожими на список медсестер. Теперь мне нужно отправить эти данные в optaplanner, развернутый на моем сервере. В какой файл мне нужно отправить его в папке optaplanner, развернутой на сервере, чтобы результаты отображались на моей веб-странице.

Я использую Xstream для создания файла XML.

Может ли кто-нибудь дать мне краткое описание того, как заставить эту функцию работать и получить желаемые результаты.


person Angular zeus    schedule 05.11.2014    source источник


Ответы (3)


Вся сериализация набора данных из XML и в XML является частью примеров optaplanner: сам OptaPlanner не предоставляет и не требует какого-либо формата сериализации. При этом optaplanner-examples включает следующие форматы сериализации:

Каждый пример: XStream формат XML в каталогах данных неразрешен и решен. Формат определяется аннотациями XStream (@XStreamAlias ​​и т. д.) в классах предметной области. В некоторых случаях формат XML слишком многословен, что приводит к ошибке OutOfMemoryError, например, для больших наборов данных MachineReassignment B. Большинство примеров: Конкурсный формат TXT в импорте и экспорте каталогов данных. Формат определяется конкурсом (см. документы). В графическом интерфейсе примеров нажмите кнопку «Импорт», чтобы загрузить их.

person Kshitij Kulshrestha    schedule 05.11.2014
comment
На самом деле я передаю данные со своей веб-страницы, которая подключена к базе данных MySQL, а optaplanner развернут на сервере приложений. поэтому с моей веб-страницы, где именно находится место, я должен передать свой входной файл в развернутое приложение. Пожалуйста, помогите мне с вашими ценными предложениями - person Angular zeus; 05.11.2014
comment
Этот ответ является прямой копией ответа на stackoverflow.com/questions/25636540/ - person BradHards; 04.01.2017

Я предложил вам прочитать последнюю главу в руководстве/документации optaplanner:

Глава 15. Интеграция

Если вашим источником данных является база данных, вы можете аннотировать POJO своего домена с помощью аннотаций JPA. Я думаю, что будет пустой тратой времени, если вы по-прежнему будете хранить данные из базы данных в xml-файле, а затем передавать xml-файл в optaplanner, будет более разумно передавать ваши объекты POJO в optaplanner напрямую. Я не знаю, какая у вас технология веб-приложения, но общий алгоритм будет таким:

  1. Получите данные объекта POJO из вашей базы данных (вы можете использовать JPA и т. д.)
  2. Создайте объект класса решения
  3. Подача объекта решения в решатель optaplanner
  4. Получите лучшее решение от решателя optaplanner и представьте его вашему пользователю по вашему желанию.

Взгляните на класс CloudBalancingHelloWorld.java, чтобы понять основную идею. Надеюсь, это поможет вам.

person the.wizard    schedule 06.11.2014
comment
Спасибо за ваш ответ, я был бы очень признателен, если бы вы могли привести мне пример для первого и второго шага. Я только начинающий. - person Angular zeus; 06.11.2014
comment
Какую веб-технологию вы используете прямо сейчас? Можете ли вы опубликовать свой простой код для загрузки некоторых данных из базы данных на вашу веб-страницу? Может быть после этого я смогу помочь вам правильно поставить оптапланерную часть. - person the.wizard; 06.11.2014
comment
выше я разместил код, я использую jsp для веб-страниц и на моей веб-странице, когда администратор нажимает кнопку расписания сотрудников, он должен передать данные из базы данных MySQL в optaplanner и получить результаты и отобразить их на веб-странице. - person Angular zeus; 07.11.2014

Вот псевдокод (на самом деле я никогда не использую JSP, в настоящее время я использую GWT), чтобы дать вам основную идею, но, пожалуйста, запомните эти примечания:

  1. Я думаю, что было бы напрасно сохранять объекты POJO в xml, а затем использовать библиотеку XStream, чтобы снова извлечь их в объекты POJO. В примере с optaplanner они используют его, потому что ему нужны только статические данные и для примера.
  2. Я предполагаю, что вы уже создали подходящую модель класса предметной области, которая соответствует предметной области вашего планирования. Потому что это одна из основных концепций optaplanner.
  3. В методе generateCustomerRoster вы должны поместить свою собственную логику для преобразования объектов POJO ваших клиентов в объект решения планирования.

Надеюсь, это поможет вам и приведет вас к завершению вашей работы. С уважением.

package com.jdbcxml;

import java.io.FileOutputStream;
import java.io.FileWriter;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.w3c.dom.Document;

public class EmployeeDAO
{
    private Connection conn = null;
    
    static
    {
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    
    public EmployeeDAO()
    {
        String url = "jdbc:mysql://50.62.23.184:3306/gtuser";
        String userId = "gtuser1";
        String passWord = "";
        try
        {
            conn = DriverManager.getConnection(url, userId, passWord);
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }
    
    public void finalize()
    {
        try
        {
            conn.close();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
    }

    public List<Customer> getCustomerList()
    {
        Document doc = null;

        try
        {
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * from t7_users");

            doc = JDBCUtil.toDocument(rs);			

            rs.close();
            stmt.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        return doc;
    }

    public CustomerRoster generateCustomerRoster(List<Customer> rawData) {
        CustomerRoster result = new CustomerRoster();
        
        // here you should write your logic to generate Customer Roster data from your Raw Data (Customer) 
        
        return result;
    }
	  
    public static void main(String argv[]) throws Exception
    { 
        // Build the Solver
        SolverFactory solverFactory = SolverFactory.createFromXmlResource("yourSolverConfig.xml");
        Solver solver = solverFactory.buildSolver();

        // Load your problem 
        EmployeeDAO dao = new EmployeeDAO(); 
        List<Customer> listCustomer = dao.getCustomerList();
        CustomerRoster unsolvedCustomerRoster = generateCustomerRoster(listCustomer); 

        // Solve the problem
        solver.solve(unsolvedCustomerRoster);
        CustomerRoster solvedCustomerRoster = (CustomerRoster) solver.getBestSolution();

        // Display the result
        DataGrid grid = new DataGrid(solvedCustomerRoster); // Just change this line code to display to any of your view component
    }
}

person the.wizard    schedule 07.11.2014
comment
Большое вам спасибо за то, что вы потратили свое драгоценное время, чтобы помочь мне ...... реализую его и вернусь, если у меня возникнут какие-либо проблемы. - person Angular zeus; 07.11.2014
comment
Я не могу передать данные в переменной документа, в которой говорится, что метод readSolution(File) в типе AbstractXmlSolutionImporter неприменим для аргументов (URL), мне нужно использовать службу Rest, если мне нужно передать данные, которые хранятся в База данных MySQL ... любые предложения будут отличными ... потратил весь день, пытаясь передать данные (данные MySQL) для составления реестра в optaplanner-examples из моей папки optaplanner-webexamples - person Angular zeus; 07.11.2014
comment
Я думаю, вы все еще не понимаете, как правильно использовать optaplanner, теперь позвольте мне повторить еще раз: вам не нужно передавать данные в файл xml, примеры optaplanner делают это, потому что ему просто нужны статические данные источник, который хранится в файле xml, и они используют библиотеку Xstream для преобразования из xml в объект и наоборот. Одним словом, в примерах optaplanner источником данных является файл xml, а в вашем случае - база данных mysql. Просто пропустите часть xml и сосредоточьтесь на создании объектов проблемной области и передайте их объекту решателя optaplanner. - person the.wizard; 07.11.2014
comment
Я понимаю, что вы говорите, я разрабатываю подобное веб-приложение, такое как vrp, в optaplanner-webexamples.., мой загрузчик и классы решения Java находятся в веб-приложении. Мне нужно теперь отправить эти статические данные в решатель в обряде optaplanner, вот что ты думаешь - person Angular zeus; 07.11.2014
comment
Хорошо, вы должны были сказать мне с самого начала, что хотите создать что-то вроде веб-примеров. На самом деле я не касаюсь веб-примеров, я просто запускаю примеры для рабочего стола. Дайте мне немного времени, чтобы изучить его, я свяжусь с вами, когда у меня будет ответ. - person the.wizard; 07.11.2014