Hi,
I want to create new node extension called NewDBInsert
which adds some functionality to already exsiting DBInsert
node.
To be more precise, my goal is creating new implementation of org.knime.database.agent.writer.DBWriter.java
instead of org.knime.database.agent.writer.impl.DefaultDBWriter.java
. Here are my codes for model and factory classes.
NewDBInsertNodeModel.java:
public class NewDBInsertNodeModel extends DBManipulationNodeModel<InsertParameters> {
public NewDBInsertNodeModel(final DBManipulationConfig config, final String statusColumnPrefix) {
super(config, statusColumnPrefix);
}
@Override
protected InsertParameters createParameters(final UIParameters uiParameters, final InputData inputData,
final String[] setColumns, final String[] whereColumns,
final DataTypeMappingConfiguration<SQLType> knimeToExternal, final DMLStatusListener statusListener) {
return statusListener == null // Forced line break.
? new InsertParameters(uiParameters, inputData, setColumns, knimeToExternal)
: new InsertParameters(uiParameters, inputData, setColumns, knimeToExternal, statusListener);
}
@Override
protected DMLResult executeWriter(final ExecutionMonitor exec, final DBSession session, final DBWriter writer,
final InsertParameters params, final DBTable table) throws Exception {
// I want to use my own implementation for insert
return writer.insert(exec, table, params);
}
}
NewDBInsertNodeFactory.java:
public class NewDBInsertNodeFactory extends NodeFactory<NewDBInsertNodeModel> {
private static final String TYPE = "Insert";
private static final boolean CONTAINS_SET_COLUMNS = true;
private static final boolean CONTAINS_WHERE_COLUMNS = false;
private static final boolean ENABLE_SET_COLUMNS_ENFORCE_INCLUSION = false;
private static DBManipulationConfig createConfig() {
return new DBManipulationConfig(CONTAINS_SET_COLUMNS, CONTAINS_WHERE_COLUMNS,
ENABLE_SET_COLUMNS_ENFORCE_INCLUSION);
}
@Override
public NewDBInsertNodeModel createNodeModel() {
return new NewDBInsertNodeModel(createConfig(), TYPE);
}
@Override
public int getNrNodeViews() {
return 0;
}
@Override
public NodeView<NewDBInsertNodeModel> createNodeView(final int viewIndex, final NewDBInsertNodeModel nodeModel) {
return null;
}
@Override
public boolean hasDialog() {
return true;
}
@Override
public NodeDialogPane createNodeDialogPane() {
return new DBManipulationNodeDialog(createConfig(), TYPE);
}
}
Project Structure:
The problem:
when I want to test the node I fail with error indicating that NewDBInsert
couldn’t be created because of java.lang.ClassNotFoundException: org.knime.database.node.io.DBManipulationNodeModel cannot be found by org.kimia.examples.newdbinsert_1.0.0.qualifier
And this prevents me to go to next step and implement my own writer.
Note: I’ve added org.knime.database.nodes
and org.knime.database
to my plugin dependencies.
Is there any access policy or similar things to using already existing packages?
Should I consider anything special to add dependencies?
The full error log:
ErrorLog.txt (4.4 KB)