如何在Optaplanner中加载xml

时间:2014-11-05 05:18:58

标签: mysql jboss drools redhat optaplanner

我创建了一个MySQL数据库,其条目类似于护士名单,现在我需要将此数据发送到部署在我服务器上的optaplanner。我需要将哪个文件发送到部署在服务器上的optaplanner文件夹中,以便在我的网页上显示结果。

我正在使用Xstream生成XML文件。

任何人都可以向我简要说明如何使这项功能发挥作用并获得理想的结果。

4 个答案:

答案 0 :(得分:1)

从XML到XML的整个数据集序列化是optaplanner示例的一部分:OptaPlanner本身并不提供或要求任何序列化格式。话虽如此,optaplanner-examples包括以下序列化格式:

每个示例:XStream未解析和解决的数据目录中的XML格式。格式由域类上的XStream注释(@XStreamAlias等)定义。在某些情况下,XML格式过于冗长,导致OutOfMemoryError,例如对于大型MachineReassignment B数据集。     大多数示例:数据目录中的竞争特定TXT格式导入和导出。格式由竞赛定义(参见文档)。在示例GUI中,单击“导入”按钮加载它们。

答案 1 :(得分:0)

我建议你阅读optaplanner手册/文档中的最后一章:

Chapter 15. Integration

如果您的数据源是数据库,则可以使用JPA注释注释您的域POJO。我认为如果您仍然将数据库中的数据存储到xml文件然后将xml文件提供给optaplanner,那将是一种浪费,将POJO对象直接提供给optaplanner更为明智。 我不知道你的网络应用技术是什么,但一般的算法将是这样的:

  1. 从您的数据库中获取POJO对象数据(您可以使用JPA等)
  2. 构建解决方案类对象
  3. 将解决方案对象提供给optaplanner解算器
  4. 从optaplanner解算器中获取最佳解决方案,并根据用户需求将其呈现给用户。
  5. 查看CloudBalancingHelloWorld.java类以获得基本概念。希望这可以帮到你。

答案 2 :(得分:0)

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;



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 Document 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 String getCustomerListAsString()
	{
		String xml = null;

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

            xml = JDBCUtil.toXML(rs);

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

		return xml;
	}  
	  
    public static void main(String argv[]) throws Exception
    { 
        EmployeeDAO dao = new EmployeeDAO(); 
        
		String xml = dao.getCustomerListAsString();
		System.out.println(xml);
		
        Document doc = dao.getCustomerList();
        System.out.println(doc);
        //PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
        //out.write(doc);;
        //out.close();
        
        
    }
}

答案 3 :(得分:0)

这里的伪代码(我从未实际使用JSP,我目前使用GWT)给你基本的想法,但请记住这些注意事项:

  1. 我认为将POJO对象保存到xml然后使用XStream库将其再次提取到POJO对象将是一种浪费。在optaplanner示例中,他们使用它,因为它只需要静态数据并且为了示例。
  2. 我假设您已经创建了适合您的规划问题域的approriate域类模型。因为这是optaplanner的核心概念之一。
  3. 在方法generateCustomerRoster中,您应该使用自己的逻辑将客户POJO对象转换为计划解决方案对象。
  4. 希望这可以帮助你并引导你完成你的工作。谢谢&问候。

    
    
    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
        }
    }
    &#13;
    &#13;
    &#13;