我创建了一个MySQL数据库,其条目类似于护士名册,现在我需要将此数据发送到我的服务器上部署的optaplanner。我需要将它发送到部署在服务器上的optaplanner文件夹中,以便将结果显示在我的网页上。如何在Optaplanner中加载xml
我正在使用Xstream生成XML文件。
任何人都可以给我简要介绍如何使这个功能工作,并得到我想要的结果。
我创建了一个MySQL数据库,其条目类似于护士名册,现在我需要将此数据发送到我的服务器上部署的optaplanner。我需要将它发送到部署在服务器上的optaplanner文件夹中,以便将结果显示在我的网页上。如何在Optaplanner中加载xml
我正在使用Xstream生成XML文件。
任何人都可以给我简要介绍如何使这个功能工作,并得到我想要的结果。
从XML到XML的整个数据集序列化是optaplanner-examples的一部分:OptaPlanner本身不提供或要求任何序列化格式。也就是说,optaplanner-examples包含以下序列化格式:
每个示例:XStream未解决和解决数据目录中的XML格式。格式由域类上的XStream注释(@XStreamAlias等)定义。在某些情况下,XML格式过于冗长,导致OutOfMemoryError,例如对于大型MachineReassignment B数据集。 大多数示例:数据目录导入和导出中特定于竞争的TXT格式。格式由竞赛定义(参见文档)。在示例GUI中,单击按钮导入以加载它们。
我建议你阅读optaplanner手动/文档中的最后一章:
如果您的数据源是一个数据库,你可以注释域POJO的JPA的注解。我认为如果您仍然将数据从数据库存储到xml文件然后将xml文件提供给optaplanner将是浪费,将POJO对象直接提供给optaplanner会更明智。 我不知道你的web应用的技术,但总的算法应该是什么样的:
查看CloudBalancingHelloWorld.java类来获取基本想法。希望这可以帮到你。
感谢您的回复,如果您能为我提供第一步和第二步的示例,我将非常感激。我只是一个初学者。 – 2014-11-06 08:56:47
您现在使用的是什么网络技术?你可以发布你的简单代码来从数据库加载一些数据到你的网页吗?也许在此之后,我可以帮助您正确地安装optaplanner部件。 – 2014-11-06 09:13:39
以上我已经发布代码,即时通讯使用jsp的网页和我的网页时,当管理员点击日程安排雇员按钮它必须将数据从MySQL数据库传递给optaplanner并获得结果并在网页上显示 – 2014-11-06 23:04:38
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); \t \t \t
rs.close();
stmt.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return doc;
}
\t public String getCustomerListAsString()
\t {
\t \t String xml = null;
\t \t try
\t \t {
\t \t \t Statement stmt = conn.createStatement();
\t \t \t ResultSet rs = stmt.executeQuery("SELECT * from t7_users");
xml = JDBCUtil.toXML(rs);
\t \t \t rs.close();
\t \t \t stmt.close();
\t \t }
\t \t catch (Exception e)
\t \t {
\t \t \t e.printStackTrace();
\t \t }
\t \t return xml;
\t }
\t
public static void main(String argv[]) throws Exception
{
EmployeeDAO dao = new EmployeeDAO();
\t \t String xml = dao.getCustomerListAsString();
\t \t System.out.println(xml);
\t \t
Document doc = dao.getCustomerList();
System.out.println(doc);
//PrintWriter out = new PrintWriter(new FileWriter("output.txt"));
//out.write(doc);;
//out.close();
}
}
这里的伪代码(我从来没有真正使用JSP,我目前使用GWT)给你基本的想法,但请记住这些注意事项:
希望这可以帮助你,并带领你完成你的工作。谢谢&关心。
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); \t \t \t
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;
}
\t
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
}
}
非常感谢你用你的宝贵时间来帮助我......将实施它,并得到回来,如果我面临任何问题。 – 2014-11-07 03:03:45
我不能传递doc变量中的数据它说“AbstractXmlSolutionImporter类型中的方法readSolution(File)不适用于参数(URL)”我需要使用Rest服务如果我需要传递数据存储在MySQL数据库....任何建议将是伟大的......花了整天努力传递数据(MySQL数据)护士在optaplanner中的例子 - 我的optaplanner-webexamples文件夹中的例子 – 2014-11-07 07:35:24
我想你还是不要不知道如何正确使用optaplanner,现在让我再说一遍: 您不需要将数据传递给xml文件,optaplanner示例就是这样做的,因为它只需要一个静态数据源,即存储在xml文件中,他们使用Xstream库将xml转换为对象,反之亦然。在optaplanner的例子中,放入一个词,数据源是xml文件,而你的情况是mysql数据库。只需跳过部分xml事物,并专注于创建问题域对象并将其传递给optaplanner求解器对象。 – 2014-11-07 08:05:17
荫实际上传递从我的网页连接到MySQL数据库和optaplanner部署在应用服务器上的数据。所以从我的网页中,我必须在部署的应用程序中传递我的输入文件的位置。请帮助我与你宝贵的建议 – 2014-11-05 06:16:41
这个答案是从答案的直接副本在http://stackoverflow.com/questions/25636540/loading-real-world-xml-problems-in-optaplanner-6-1-0 – BradHards 2017-01-03 22:37:40