Author: solomax
Date: Mon Jul 2 10:28:15 2012
New Revision: 1356166
URL: http://svn.apache.org/viewvc?rev=1356166&view=rev
Log:
OPENMEETINGS-299 each language is imported ~3 times faster
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/basic/FieldLanguageDaoImpl.java
Mon Jul 2 10:28:15 2012
@@ -46,7 +46,7 @@ public class FieldLanguageDaoImpl {
@PersistenceContext
private EntityManager em;
- public Long addLanguage(int langId, String langName, Boolean langRtl,
String code) {
+ public FieldLanguage addLanguage(int langId, String langName, Boolean
langRtl, String code) {
try {
FieldLanguage fl = new FieldLanguage();
@@ -58,9 +58,8 @@ public class FieldLanguageDaoImpl {
fl.setCode(code);
fl = em.merge(fl);
- Long languages_id = fl.getLanguage_id();
- return languages_id;
+ return fl;
} catch (Exception ex2) {
log.error("[addLanguage]: ", ex2);
}
@@ -69,11 +68,10 @@ public class FieldLanguageDaoImpl {
public void emptyFieldLanguage() {
try {
-
- // TODO delete hql query doesn't work, must be repared
- em.createQuery("delete from FieldLanguage");
+ TypedQuery<FieldLanguage> q = em.createQuery("delete
from FieldLanguage", FieldLanguage.class);
+ q.executeUpdate();
} catch (Exception ex2) {
- log.error("[getConfKey]: ", ex2);
+ log.error("[emptyFieldLanguage]: ", ex2);
}
}
@@ -95,7 +93,7 @@ public class FieldLanguageDaoImpl {
return new Long(-1);
}
- private void updateLanguage(FieldLanguage fl) throws Exception {
+ public void updateLanguage(FieldLanguage fl) throws Exception {
if (fl.getLanguage_id() == null) {
em.persist(fl);
} else {
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/data/beans/basic/SearchResult.java
Mon Jul 2 10:28:15 2012
@@ -18,7 +18,6 @@
*/
package org.openmeetings.app.data.beans.basic;
-import java.io.Serializable;
import java.util.List;
public class SearchResult<T> {
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/installation/ImportInitvalues.java
Mon Jul 2 10:28:15 2012
@@ -20,11 +20,13 @@ package org.openmeetings.app.installatio
import java.io.File;
import java.util.Arrays;
+import java.util.Date;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedList;
import java.util.List;
+import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
@@ -46,9 +48,11 @@ import org.openmeetings.app.data.user.St
import org.openmeetings.app.data.user.Usermanagement;
import org.openmeetings.app.data.user.dao.UsersDaoImpl;
import org.openmeetings.app.persistence.beans.basic.OmTimeZone;
+import org.openmeetings.app.persistence.beans.lang.FieldLanguage;
+import org.openmeetings.app.persistence.beans.lang.Fieldlanguagesvalues;
import org.openmeetings.app.persistence.beans.lang.Fieldvalues;
-import org.openmeetings.utils.OmFileHelper;
import org.openmeetings.utils.ImportHelper;
+import org.openmeetings.utils.OmFileHelper;
import org.red5.logging.Red5LoggerFactory;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@@ -885,12 +889,12 @@ public class ImportInitvalues {
for (Iterator<Integer> itLang =
listlanguages.keySet().iterator(); itLang
.hasNext();) {
Integer langId = itLang.next();
- LinkedHashMap<String, Object> lang =
listlanguages.get(langId);
- log.debug("loadInitLanguages lang: " + lang);
+ LinkedHashMap<String, Object> langMap =
listlanguages.get(langId);
+ log.debug("loadInitLanguages lang: " + langMap);
- String langName = (String) lang.get("name");
- String rtl = (String) lang.get("rtl");
- String code = (String) lang.get("code");
+ String langName = (String) langMap.get("name");
+ String rtl = (String) langMap.get("rtl");
+ String code = (String) langMap.get("code");
log.debug("loadInitLanguages rtl from xml: " + rtl);
@@ -899,14 +903,15 @@ public class ImportInitvalues {
if (rtl != null && rtl.equals("true"))
langRtl = true;
- Long languages_id =
fieldLanguageDaoImpl.addLanguage(langId, langName,
- langRtl, code);
+ long ticks = System.currentTimeMillis();
+ FieldLanguage lang =
fieldLanguageDaoImpl.addLanguage(langId, langName, langRtl, code);
SAXReader reader = new SAXReader();
Document document = reader.read(new
File(OmFileHelper.getLanguagesDir(), langName + ".xml"));
Element root = document.getRootElement();
+ Map<Long, Fieldlanguagesvalues> flvMap =
lang.getLanguageValuesMap();
for (@SuppressWarnings("rawtypes")
Iterator it = root.elementIterator("string");
it.hasNext();) {
Element item = (Element) it.next();
@@ -924,20 +929,31 @@ public class ImportInitvalues {
// log.error("result: "+langFieldIdIsInited+"
"+id+" "+name+" "+value);
- Fieldvalues fv = null;
- // Only do that for the first field-set
- if (!fieldCache.containsKey(id)) {
- fv = fieldmanagment.addFieldById(name,
id);
- fieldCache.put(id, fv);
+ if (flvMap.containsKey(id)) {
+ Fieldlanguagesvalues flv =
flvMap.get(id);
+ flv.setUpdatetime(new Date());
+ flv.setValue(value);
} else {
- fv = fieldCache.get(id);
+ Fieldvalues fv = null;
+ // Only do that for the first field-set
+ if (!fieldCache.containsKey(id)) {
+ fv =
fieldmanagment.addFieldById(name, id);
+ fieldCache.put(id, fv);
+ } else {
+ fv = fieldCache.get(id);
+ }
+ Fieldlanguagesvalues flv = new
Fieldlanguagesvalues();
+ flv.setStarttime(new Date());
+ flv.setValue(value);
+
flv.setLanguage_id(lang.getLanguage_id());
+ flv.setFieldvalues(fv);
+ flv.setDeleted("false");
+ flvMap.put(id, flv);
}
-
-
fieldmanagment.addFieldValueByFieldAndLanguage(fv,
- languages_id, value);
-
}
- log.debug("Lang ADDED: " + lang);
+ lang.setLanguageValues(flvMap.values());
+ fieldLanguageDaoImpl.updateLanguage(lang);
+ log.debug("Lang ADDED: " + lang + "; seconds passed: "
+ (System.currentTimeMillis() - ticks) / 1000);
}
log.debug("All languages are imported");
}
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/persistence/beans/lang/FieldLanguage.java
Mon Jul 2 10:28:15 2012
@@ -19,17 +19,16 @@
package org.openmeetings.app.persistence.beans.lang;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Collection;
import java.util.Date;
-import java.util.List;
-
-
+import java.util.Hashtable;
+import java.util.Map;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
@@ -40,8 +39,7 @@ public class FieldLanguage implements Se
private static final long serialVersionUID = 3501643212388395425L;
@Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- @Column(name="language_id")
+ @Column(name="language_id", unique=true, nullable= false)
private Long language_id;
@Column(name="name")
private String name;
@@ -56,9 +54,9 @@ public class FieldLanguage implements Se
@Column(name="code")
private String code;
- @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
+ @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "language_id", insertable = true, updatable = true)
- private List<Fieldlanguagesvalues> languageValues;
+ private Collection<Fieldlanguagesvalues> languageValues;
public Long getLanguage_id() {
return language_id;
@@ -108,10 +106,21 @@ public class FieldLanguage implements Se
public void setCode(String code) {
this.code = code;
}
- public List<Fieldlanguagesvalues> getLanguageValues() {
- return languageValues;
+
+ public Collection<Fieldlanguagesvalues> getLanguageValues() {
+ return languageValues == null ? new
ArrayList<Fieldlanguagesvalues>() : languageValues;
}
- public void setLanguageValues(List<Fieldlanguagesvalues>
languageValues) {
- this.languageValues = languageValues;
+ public void setLanguageValues(Collection<Fieldlanguagesvalues>
languageValues) {
+ if (languageValues != null) {
+ this.languageValues = languageValues;
+ }
+ }
+ public Map<Long, Fieldlanguagesvalues> getLanguageValuesMap() {
+ Collection<Fieldlanguagesvalues> langVals = getLanguageValues();
+ Map<Long, Fieldlanguagesvalues> result = new Hashtable<Long,
Fieldlanguagesvalues>(langVals.size());
+ for (Fieldlanguagesvalues flv : langVals) {
+ result.put(flv.getFieldvalues().getFieldvalues_id(),
flv);
+ }
+ return result;
}
}
Modified:
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
URL:
http://svn.apache.org/viewvc/incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java?rev=1356166&r1=1356165&r2=1356166&view=diff
==============================================================================
---
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
(original)
+++
incubator/openmeetings/trunk/singlewebapp/src/org/openmeetings/app/remote/LanguageService.java
Mon Jul 2 10:28:15 2012
@@ -114,7 +114,8 @@ public class LanguageService {
if (authLevelManagement.checkAdminLevel(user_level)) {
if (langName.length() == 0)
return new Long(-30);
- return fieldLanguageDaoImpl.addLanguage(0, langName,
false, code);
+ FieldLanguage lang =
fieldLanguageDaoImpl.addLanguage(0, langName, false, code);
+ return lang != null ? lang.getLanguage_id() : -1;
}
return null;
}