Difference between revisions of "Knowledge:Migration from 6.2.6 to 6.2.7"

From OpenKM Documentation
Jump to: navigation, search
Line 68: Line 68:
 
import com.openkm.dao.HibernateUtil;
 
import com.openkm.dao.HibernateUtil;
 
import com.openkm.core.Config;
 
import com.openkm.core.Config;
 
+
 
Logger log = LoggerFactory.getLogger("com.openkm.migration");
 
Logger log = LoggerFactory.getLogger("com.openkm.migration");
 
int count = 0;
 
int count = 0;
 
+
 
void fixNodePathHelper(Session session, NodeBase parentNode) throws HibernateException {
 
void fixNodePathHelper(Session session, NodeBase parentNode) throws HibernateException {
 
String qs = "from NodeBase nb where nb.parent=:parent";
 
String qs = "from NodeBase nb where nb.parent=:parent";
 
Query q = session.createQuery(qs).setCacheable(true);
 
Query q = session.createQuery(qs).setCacheable(true);
 
q.setString("parent", parentNode.getUuid());
 
q.setString("parent", parentNode.getUuid());
+
 
for (NodeBase nb : q.list()) {
 
for (NodeBase nb : q.list()) {
 
nb.setPath(parentNode.getPath() + "/" + nb.getName());
 
nb.setPath(parentNode.getPath() + "/" + nb.getName());
 
session.update(nb);
 
session.update(nb);
 
log.info("Updated node: {}", nb.getPath());
 
log.info("Updated node: {}", nb.getPath());
 
+
 
if (count++ % 100 == 0) {
 
if (count++ % 100 == 0) {
 +
log.info("*** Commit transaction ***");
 
HibernateUtil.commit(session.getTransaction());
 
HibernateUtil.commit(session.getTransaction());
 +
session.beginTransaction();
 
}
 
}
+
 
// Process in depth
 
// Process in depth
 
fixNodePathHelper(session, nb);
 
fixNodePathHelper(session, nb);
 
}
 
}
 
}
 
}
 
+
 
log.info("***** Process BEGIN *****");
 
log.info("***** Process BEGIN *****");
 
String qs = "from NodeBase nb where nb.parent=:parent";
 
String qs = "from NodeBase nb where nb.parent=:parent";
 
Session session = null;
 
Session session = null;
Transaction tx = null;
+
 
 
 
try {
 
try {
 
session = HibernateUtil.getSessionFactory().openSession();
 
session = HibernateUtil.getSessionFactory().openSession();
tx = session.beginTransaction();
+
session.beginTransaction();
+
 
// First level nodes
 
// First level nodes
 
Query q = session.createQuery(qs);
 
Query q = session.createQuery(qs);
 
q.setString("parent", Config.ROOT_NODE_UUID);
 
q.setString("parent", Config.ROOT_NODE_UUID);
+
 
for (NodeBase nb : q.list()) {
 
for (NodeBase nb : q.list()) {
 
nb.setPath("/" + nb.getName());
 
nb.setPath("/" + nb.getName());
 
session.update(nb);
 
session.update(nb);
 
log.info("Updated node: {}", nb.getPath());
 
log.info("Updated node: {}", nb.getPath());
           
+
 
// Process in depth
 
// Process in depth
 
fixNodePathHelper(session, nb);
 
fixNodePathHelper(session, nb);
 
}
 
}
+
HibernateUtil.commit(tx);
+
HibernateUtil.commit(session.getTransaction());
 
} catch (HibernateException e) {
 
} catch (HibernateException e) {
HibernateUtil.rollback(tx);
+
HibernateUtil.rollback(session.getTransaction());
 
throw new DatabaseException(e.getMessage(), e);
 
throw new DatabaseException(e.getMessage(), e);
 
} finally {
 
} finally {
 
HibernateUtil.close(session);
 
HibernateUtil.close(session);
 
}
 
}
 
+
 
log.info("***** Process END *****");
 
log.info("***** Process END *****");
 
</source>
 
</source>

Revision as of 12:21, 29 January 2013

  • Make a backup!!!
  • Stop Tomcat
  • Edit OpenKM.cfg and set hibernate.hbm2ddl to update
  • Replace the OpenKM.war
  • Review file descriptor limit and, eventually, increase it.
  • Run from your preferred SQL client these queries:

HSQL

ALTER TABLE OKM_NODE_NOTE alter column NNT_TEXT clob;

MySQL

alter table OKM_NODE_NOTE modify NNT_TEXT longtext;

PostgreSQL

alter table OKM_NODE_NOTE alter NNT_TEXT TYPE text;

Oracle

alter table OKM_NODE_NOTE modify (NNT_TEXT clob);

If the ALTER TABLE sentence fails in Oracle with ORA-22858, you have another way:

alter table OKM_NODE_NOTE add NNT_TEXT_TMP CLOB;
update OKM_NODE_NOTE set NNT_TEXT_TMP = NNT_TEXT;
alter table OKM_NODE_NOTE drop NNT_TEXT;
alter table OKM_NODE_NOTE rename NNT_TEXT_TMP to NNT_TEXT;
  • Start Tomcat again
  • Check for database errors:
$ grep "ERROR .*hbm2ddl" $TOMCAT_HOME/logs/catalina.log
  • Go to Administration > Scripting and execute this script:
// com.openkm.dao.NodeBaseDAO.getInstance().fixNodePath();
import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.openkm.core.DatabaseException;
import com.openkm.dao.bean.NodeBase;
import com.openkm.dao.HibernateUtil;
import com.openkm.core.Config;
 
Logger log = LoggerFactory.getLogger("com.openkm.migration");
int count = 0;
 
void fixNodePathHelper(Session session, NodeBase parentNode) throws HibernateException {
	String qs = "from NodeBase nb where nb.parent=:parent";
	Query q = session.createQuery(qs).setCacheable(true);
	q.setString("parent", parentNode.getUuid());
 
	for (NodeBase nb : q.list()) {
		nb.setPath(parentNode.getPath() + "/" + nb.getName());
		session.update(nb);
		log.info("Updated node: {}", nb.getPath());
 
		if (count++ % 100 == 0) {
			log.info("*** Commit transaction ***");
			HibernateUtil.commit(session.getTransaction());
			session.beginTransaction();
		}
 
		// Process in depth
		fixNodePathHelper(session, nb);
	}
}
 
log.info("***** Process BEGIN *****");
String qs = "from NodeBase nb where nb.parent=:parent";
Session session = null;
 
try {
	session = HibernateUtil.getSessionFactory().openSession();
	session.beginTransaction();
 
	// First level nodes
	Query q = session.createQuery(qs);
	q.setString("parent", Config.ROOT_NODE_UUID);
 
	for (NodeBase nb : q.list()) {
		nb.setPath("/" + nb.getName());
		session.update(nb);
		log.info("Updated node: {}", nb.getPath());
 
		// Process in depth
		fixNodePathHelper(session, nb);
	}
 
	HibernateUtil.commit(session.getTransaction());
} catch (HibernateException e) {
	HibernateUtil.rollback(session.getTransaction());
	throw new DatabaseException(e.getMessage(), e);
} finally {
	HibernateUtil.close(session);
}
 
log.info("***** Process END *****");

To see the progress:

$ tail -f $TOMCAT_HOME/log/catalina.log
  • Translation property "fileupload.send" has been changed to "fileupload.button.send" so, you can remove the old one:
delete from OKM_TRANSLATION where TR_KEY='fileupload.send';
  • Enjoy OpenKM 6.2.7!

If you have any weird problem try to stop Tomcat, delete these folders:

  • $TOMCAT_HOME/webapps/OpenKM
  • $TOMCAT_HOME/work/Catalina/localhost

And start Tomcat again.


Nota clasica.png Recommended to clear browser cache and Java Plugin cache