dhtmlxConnector for java not working properly

Hi,

I’m testing DHTMLX if it’s suitable to my new project but in the mean time I have lots of problems with proper working of dhtmlxConnector for java version 15_120612. As JDBC back-end I use JayBird 2.2.3 driver.

There is simle JSP page with tree and grid inside:

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <link rel="STYLESHEET" type="text/css" href="codebase/dhtmlx.css">
	<script  src="codebase/dhtmlx.js"></script>

<title>DHTMLX Test</title>
</head>
<body OnLoad="doInit()">
	<h1>Tree 1</h1>
	<div id="mytreeid" style="width:250px; height:218px;background-color:#f5f5f5;border :1px solid Silver;"></div><br>

	<h1>Grid 1</h1>
	<div id="mygridid" style="width: 600px; height: 150px;"></div>
	<button onclick="addRow()">Add Row</button>
	<button onclick="removeRow()">Remove Row</button>

	<script>
		var mygrid = null;
		var mytree = null;
		
		function doInit(){
			doInitTree();
			doInitGrid();
		}
		function doInitTree() {
			//tworzenie drzewa
	        mytree = new dhtmlXTreeObject('mytreeid',"100%","100%",0);
	        mytree.setSkin('dhx_skyblue');
			mytree.setImagePath("common/images/");
			//mytree.setImagePath("codebase/imgs/");
			mytree.enableDragAndDrop(0);
			mytree.enableTreeLines(false);
			mytree.setImageArrays("plus","","","","plus.gif");
			mytree.setImageArrays("minus","","","","minus.gif");
			mytree.setStdImages("book.gif","books_open.gif","books_close.gif");	
	 		//mytree.setXMLAutoLoading("BasicTreeConnector");
 			//mytree.loadXML("mytree.xml");
			mytree.loadXML("BasicTreeConnector");

		}

		function doInitGrid() {
			// creates a grid instance
			mygrid = new dhtmlXGridObject('mygridid');
			if (mygrid != null) {
				// sets the path to the grid images
				mygrid.setImagePath("codebase/imgs/");
				// sets the headers of the columns
				mygrid.setHeader("Model,Qty,Price");
				// sets the width of the columns; * - the column fills all the available space
				mygrid.setInitWidths("*,150,150");
				// sets the horizontal alignment of the value in the columns 
				mygrid.setColAlign("left,right,right");
				// sets the skin of the grid
				mygrid.setSkin("light");
				// sets the sorting criteria of the columns
				mygrid.setColSorting("str,int,na");
				// sets the types of the columns
				mygrid.setColTypes("ed,ed,ed");
				//mygrid.setColTypes("tree,...");
				// initializes the grid
				mygrid.init();
				// populates the grid with the data in XML format
				mygrid.loadXML("BasicGridConnector");
				// attaches the event handler that will call when a user clicks on the row
				mygrid.attachEvent("onRowSelect", doOnRowSelected);

				var myDP = new dataProcessor("BasicGridConnector");
				myDP.init(mygrid);
			}

		}
		// adds a new row to the grid
		function addRow() {
			var newId = (new Date()).valueOf();
			mygrid.addRow(newId, "", mygrid.getRowsNum());
			mygrid.selectRow(mygrid.getRowIndex(newId), false, false, true);
		}
		// remove the selected row from the grid
		function removeRow() {
			var selId = mygrid.getSelectedId();
			mygrid.deleteRow(selId);
		}
		// shows the message when a user clicks the row
		function doOnRowSelected(rowID, celInd) {
			//alert("Selected row ID is "+rowID+"\nUser clicked cell with index "+celInd);
		}
	</script>
</body>
</html>

And two servlest to interact with these elements
one for tree:

package macma.technicon.com.pl;

import com.dhtmlx.connector.ConnectorServlet;
import com.dhtmlx.connector.TreeConnector;

import javax.servlet.annotation.WebServlet;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * Servlet implementation class BasicTreeConnector
 */
@WebServlet("/BasicTreeConnector")
public class BasicTreeConnector extends ConnectorServlet {
	private static final long serialVersionUID = 1L;

    /**
     * Default constructor. 
     */
    public BasicTreeConnector() {
    }

	@Override
	protected void configure() {
        //obtain DB connection
		Connection conn=null;
		try {
			Class.forName ("org.firebirdsql.jdbc.FBDriver");
			conn = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/DRZEWO", "SYSDBA", "masterkey");
		} catch (Throwable e) {
			e.printStackTrace();
		}
	    //Initialize connector
		TreeConnector c = new TreeConnector(conn);
	    //configure used table and fields
		c.render_table("OBJECTSX", "ID", "NAME","","PARENT");
		//c.enable_log("e:\\Eclipse\\workspace\\DHTMLX\\connecnion.log", true);		
	}

}

and one for grid

package macma.technicon.com.pl;
import java.sql.Connection;
import java.sql.DriverManager;
import com.dhtmlx.connector.*;
import javax.servlet.Servlet;
import javax.servlet.annotation.WebServlet;

/**
 * Servlet implementation class BasicGridConnector
 */
@WebServlet("/BasicGridConnector")
public class BasicGridConnector extends ConnectorServlet implements Servlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see ConnectorServlet#ConnectorServlet()
     */
    public BasicGridConnector() {
        super();
    }

	@Override
	protected void configure() {
        //obtain DB connection
		Connection conn=null;
		try {
			Class.forName ("org.firebirdsql.jdbc.FBDriver");
			conn = DriverManager.getConnection("jdbc:firebirdsql://localhost:3050/DRZEWO", "SYSDBA", "masterkey");
		} catch (Throwable e) {
			e.printStackTrace();
		}

	    //Initialize connector
		GridConnector c = new GridConnector(conn);
	          //configure used table and fields
		c.render_table("OBJECTS", "ID", "NAME,PARENT,ORDER_INDEX");
		//c.enable_log("e:\\Eclipse\\workspace\\DHTMLX\\connecnion.log", true);
	}

}

For now I have tree problems:

  1. When I load both tree and grid on FireFox I get error messege “Error type: LoadXML” becasue of exception on server side:
SEVERE: Servlet.service() for servlet [macma.technicon.com.pl.BasicTreeConnector] in context with path [/DHTMLX] threw exception
java.lang.NullPointerException
	at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
	at org.apache.coyote.http11.InternalOutputBuffer.endRequest(InternalOutputBuffer.java:159)
	at org.apache.coyote.http11.AbstractHttp11Processor.action(AbstractHttp11Processor.java:749)
	at org.apache.coyote.Response.action(Response.java:173)
	at org.apache.coyote.Response.finish(Response.java:279)
	at org.apache.catalina.connector.OutputBuffer.close(OutputBuffer.java:313)
	at org.apache.catalina.connector.CoyoteWriter.close(CoyoteWriter.java:112)
	at com.dhtmlx.connector.ConnectorOutputWriter.output(ConnectorOutputWriter.java:59)
	at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:563)
	at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:587)
	at com.dhtmlx.connector.BaseConnector.render(BaseConnector.java:427)
	at com.dhtmlx.connector.BaseConnector.render_table(BaseConnector.java:242)
	at macma.technicon.com.pl.BasicTreeConnector.configure(BasicTreeConnector.java:37)
	at com.dhtmlx.connector.ConnectorServlet.doGet(ConnectorServlet.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

In Chrome I sometimes get this exception but very very seldom. When I comment out initialization of doInitTree(); or doInitGrid(); it’s works.

  1. When I have very simple tree in table like this
ID,PARENT,NAME,C_OPIS,CCOUNT
1,0,"Subtree",,0
2,1,"Subtree1",,0
3,2,"Subtree2",,0

It’s working, but when Item have more then one child like this:

ID,PARENT,NAME,C_OPIS,CCOUNT
1,0,"Subtree",,0
2,1,"Subtree1",,0
3,2,"Subtree2",,0
4,1,"Second",,0

the exception on server side occurs:

com.dhtmlx.connector.ConnectorOperationException: The resultSet is closed
	at com.dhtmlx.connector.ConnectorResultSet.get_next(ConnectorResultSet.java:75)
	at com.dhtmlx.connector.TreeRenderStrategy.render_set(TreeRenderStrategy.java:22)
	at com.dhtmlx.connector.TreeRenderStrategy.render_set(TreeRenderStrategy.java:37)
	at com.dhtmlx.connector.BaseConnector.render_set(BaseConnector.java:554)
	at com.dhtmlx.connector.BaseConnector.output_as_xml(BaseConnector.java:582)
	at com.dhtmlx.connector.BaseConnector.render(BaseConnector.java:427)
	at com.dhtmlx.connector.BaseConnector.render_table(BaseConnector.java:242)
	at macma.technicon.com.pl.BasicTreeConnector.configure(BasicTreeConnector.java:37)
	at com.dhtmlx.connector.ConnectorServlet.doGet(ConnectorServlet.java:29)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
  1. “dataProcessor” do not working when i update some field I get error message “Error type: LoadXML Description: Incorrect XML” :frowning:

Any help appreciated.
Best Regards,
macma