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

From OpenKM Documentation
Jump to: navigation, search
 
(6 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 51: Line 51:
 
$ grep "ERROR .*hbm2ddl" $TOMCAT_HOME/logs/catalina.log
 
$ grep "ERROR .*hbm2ddl" $TOMCAT_HOME/logs/catalina.log
 
</source>
 
</source>
 +
 +
* Set installation customer at [http://update.openkm.com/admin/license_list.php License Manager].
  
 
* 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 66: Line 70:
 
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 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) {
+
           
HibernateUtil.commit(session.getTransaction());
+
            if (count++ % 100 == 0) {
}
+
                log.info("*** Commit transaction ***");
+
                HibernateUtil.commit(session.getTransaction());
// Process in depth
+
                session.beginTransaction();
fixNodePathHelper(session, nb);
+
            }
}
+
        } else {
 +
            log.info("Node already updated: {}", nb.getPath());
 +
        }
 +
       
 +
        if (depth < MAX_DEPTH) {
 +
            // Process in depth
 +
            fixNodePathHelper(session, nb, depth + 1);
 +
        }
 +
    }
 
}
 
}
  
Line 92: Line 105:
 
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, 1);
}
+
    }
+
   
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);
 
}
 
}
  

Latest revision as of 09: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