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

From OpenKM Documentation
Jump to: navigation, search
 
(4 intermediate revisions by the same user not shown)
Line 40: Line 40:
 
alter table OKM_NODE_NOTE add NNT_TEXT_TMP CLOB;
 
alter table OKM_NODE_NOTE add NNT_TEXT_TMP CLOB;
 
update OKM_NODE_NOTE set NNT_TEXT_TMP = NNT_TEXT;
 
update OKM_NODE_NOTE set NNT_TEXT_TMP = NNT_TEXT;
alter table OKM_NODE_NOTE drop NNT_TEXT;
+
alter table OKM_NODE_NOTE drop column NNT_TEXT;
alter table OKM_NODE_NOTE rename NNT_TEXT_TMP to NNT_TEXT;
+
alter table OKM_NODE_NOTE rename column NNT_TEXT_TMP to NNT_TEXT;
 
</source>
 
</source>
  
Line 55: Line 55:
  
 
* Go to '''Administration''' > '''Scripting''' and execute this script:
 
* Go to '''Administration''' > '''Scripting''' and execute this script:
 +
 +
{{Warning|This script is not necessary because in OpenKM 6.2.10 by default '''node path''' is not used. If you want to enable '''node path''' again, please use the '''store.node.path''' configuration property.}}
  
 
<source lang="java">
 
<source lang="java">
Line 70: Line 72:
 
   
 
   
 
Logger log = LoggerFactory.getLogger("com.openkm.migration");
 
Logger log = LoggerFactory.getLogger("com.openkm.migration");
 +
int MAX_DEPTH = Integer.MAX_VALUE;
 
int count = 0;
 
int count = 0;
 
   
 
   
void fixNodePathHelper(Session session, NodeBase parentNode) throws HibernateException {
+
void fixNodePathHelper(Session session, NodeBase parentNode, int depth) 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());
+
        if (nb.getPath() == null) {
session.update(nb);
+
            nb.setPath(parentNode.getPath() + "/" + nb.getName());
log.info("Updated node: {}", nb.getPath());
+
            session.update(nb);
+
            log.info("Updated node: {}", nb.getPath());
if (count++ % 100 == 0) {
+
           
log.info("*** Commit transaction ***");
+
            if (count++ % 100 == 0) {
HibernateUtil.commit(session.getTransaction());
+
                log.info("*** Commit transaction ***");
session.beginTransaction();
+
                HibernateUtil.commit(session.getTransaction());
}
+
                session.beginTransaction();
+
            }
// Process in depth
+
        } else {
fixNodePathHelper(session, nb);
+
            log.info("Node already updated: {}", nb.getPath());
}
+
        }
 +
       
 +
        if (depth < MAX_DEPTH) {
 +
            // Process in depth
 +
            fixNodePathHelper(session, nb, depth + 1);
 +
        }
 +
    }
 
}
 
}
+
 
 
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";
Line 98: Line 107:
 
   
 
   
 
try {
 
try {
session = HibernateUtil.getSessionFactory().openSession();
+
    session = HibernateUtil.getSessionFactory().openSession();
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, 1);
}
+
    }
+
   
HibernateUtil.commit(session.getTransaction());
+
    HibernateUtil.commit(session.getTransaction());
 
} catch (HibernateException e) {
 
} catch (HibernateException e) {
HibernateUtil.rollback(session.getTransaction());
+
    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>

Latest revision as of 10:38, 28 February 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 column NNT_TEXT;
alter table OKM_NODE_NOTE rename column 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:

Nota advertencia.png This script is not necessary because in OpenKM 6.2.10 by default node path is not used. If you want to enable node path again, please use the store.node.path configuration property.

// 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 MAX_DEPTH = Integer.MAX_VALUE;
int count = 0;
 
void fixNodePathHelper(Session session, NodeBase parentNode, int depth) 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()) {
        if (nb.getPath() == null) {
            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();
            }
        } else {
            log.info("Node already updated: {}", nb.getPath());
        }
        
        if (depth < MAX_DEPTH) {
            // Process in depth
            fixNodePathHelper(session, nb, depth + 1);
        }
    }
}

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, 1);
    }
    
    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