我創建了一個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