📄 sessionimpl.java
字号:
// // METHODS protected long generateUniqueId () { return ((Long)this.uiGenerator.generateUniqueId()).longValue(); } protected long insert (long xmlDocumentId, String clientId, org.jdom.Document doc) throws XdbcException { java.sql.Statement st = null; try { //log.debug(">>> >>> inserting document"); if (xmlDocumentId < 0) xmlDocumentId = generateUniqueId(); st = getConnection().createStatement(); StringBuffer sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append(DOCUMENT); sb.append(" (id, clientId) VALUES ("); sb.append(xmlDocumentId); sb.append(", "); sb.append("'"); sb.append(clientId); sb.append("'"); sb.append(")"); String s = sb.toString(); log.debug("insert(doc) >\n"+s+"\n<"); log.debug("clientId >"+clientId+"<"); // 'isReady' is automatically set to 'false' st.addBatch(s); insert(st, xmlDocumentId, -1, doc.getRootElement(), 0); // -1 means no parent element st.executeBatch(); st.close(); st = getConnection().createStatement(); sb = new StringBuffer(); sb.append("UPDATE "); sb.append(DOCUMENT); sb.append(" SET isReady = 1"); st.execute(sb.toString()); //log.debug("<<< <<< document inserted"); return xmlDocumentId; } catch (java.sql.SQLException se) { throw new XdbcException ("Failed to insert document", se); } finally { try { releaseConnection(); st.close(); } catch (Exception e) { // forget it } } } protected void insert (java.sql.Statement st, long documentId, long parentElementId, org.jdom.Element elt, long order) throws java.sql.SQLException { long id = -1; if (parentElementId < 0) // // if the element is the root element of a document, // its id the document id // (it saves a column in the xdocument table) // id = documentId; else id = generateUniqueId(); StringBuffer sb = null; String s = null; Object onlyTextChild = getOnlyTextChild(elt); // // add element to element table sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append(ELEMENT); sb.append(" (id, documentId, eTagName, eOrder"); if (parentElementId > 0) { sb.append(", parentElementId"); } if (onlyTextChild != null) { sb.append(", eText"); if (onlyTextChild instanceof org.jdom.CDATA) { sb.append(", eIsCdata"); } } sb.append(") VALUES ("); sb.append(id); sb.append(", "); sb.append(documentId); sb.append(", "); sb.append("'"); sb.append(elt.getName()); sb.append("', "); sb.append(order); if (parentElementId > 0) { sb.append(", "); sb.append(parentElementId); } if (onlyTextChild != null) { if (onlyTextChild instanceof org.jdom.Text) { sb.append(", "); String text = ((org.jdom.Text)onlyTextChild).getTextTrim(); text = SqlUtils.prepareString(text); sb.append(text); } else { sb.append(", "); String text = ((org.jdom.CDATA)onlyTextChild).getTextTrim(); text = SqlUtils.prepareString(text); sb.append(text); sb.append(", "); sb.append("1"); // eIsCdata } } sb.append(")"); s = sb.toString(); //log.debug("element >\n"+s+"\n<"); st.addBatch(s); // // add attributes java.util.Iterator it = elt.getAttributes().iterator(); while (it.hasNext()) { org.jdom.Attribute att = (org.jdom.Attribute)it.next(); insert(st, documentId, id, att.getName(), att.getValue()); } // // add children element if (onlyTextChild != null) return; long cOrder = 0; it = elt.getContent().iterator(); while (it.hasNext()) { Object o = it.next(); if (o instanceof org.jdom.Element) { org.jdom.Element se = (org.jdom.Element)o; insert(st, documentId, id, se, cOrder); cOrder = cOrder + 1; } else if (o instanceof org.jdom.Text) { org.jdom.Text stx = (org.jdom.Text)o; insert(st, documentId, id, stx, cOrder); cOrder = cOrder + 1; } else if (o instanceof org.jdom.CDATA) { org.jdom.CDATA cdt = (org.jdom.CDATA)o; insert(st, documentId, id, cdt, cOrder); cOrder = cOrder + 1; } else { log.info ("skipped jdom content instance of class '"+ o.getClass().getName()+"'"); } } } private Object getOnlyTextChild (org.jdom.Element elt) { java.util.List content = elt.getContent(); if (content.size() != 1) return null; Object child = content.get(0); if (child instanceof org.jdom.Text || child instanceof org.jdom.CDATA) { return child; } return null; } protected void insert (java.sql.Statement st, long documentId, long parentElementId, org.jdom.Text text, long order) throws java.sql.SQLException { long id = generateUniqueId(); String sText = SqlUtils.prepareString(text.getTextTrim()); StringBuffer sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append(ELEMENT); sb.append(" (id, documentId, eText, eOrder, parentElementId"); sb.append(") VALUES ("); sb.append(id); sb.append(", "); sb.append(documentId); sb.append(", "); sb.append(sText); sb.append(", "); sb.append(order); sb.append(", "); sb.append(parentElementId); sb.append(")"); String s = sb.toString(); //log.debug("inserting text element >\n"+s+"\n<"); st.addBatch(s); } protected void insert (java.sql.Statement st, long documentId, long parentElementId, org.jdom.CDATA cdt, long order) throws java.sql.SQLException { long id = generateUniqueId(); StringBuffer sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append(ELEMENT); sb.append(" (id, documentId, eText, eOrder, eIsCdata, parentElementId"); sb.append(") VALUES ("); sb.append(id); sb.append(", "); sb.append(documentId); sb.append(", "); sb.append("'"); sb.append(cdt.getTextTrim()); sb.append("', "); sb.append(order); sb.append(", "); sb.append("1, "); // eIsCdata sb.append(parentElementId); sb.append(")"); String s = sb.toString(); //log.debug("inserting cdata element >\n"+s+"\n<"); st.addBatch(s); } protected void insert (java.sql.Statement st, long documentId, long elementId, String attributeName, String attributeValue) throws java.sql.SQLException { StringBuffer sb = new StringBuffer(); sb.append("INSERT INTO "); sb.append(ATTRIBUTE); sb.append(" (documentId, elementId, attName, attValue"); sb.append(") VALUES ("); sb.append(documentId); sb.append(", "); sb.append(elementId); sb.append(", "); sb.append(SqlUtils.prepareString(attributeName)); sb.append(", "); sb.append(SqlUtils.prepareString(attributeValue)); sb.append(")"); String s = sb.toString(); //log.debug("attribute >\n"+s+"\n<"); st.addBatch(s); } protected java.util.List simpleFind (String query) throws XdbcException { java.sql.Statement st = null; java.sql.ResultSet rs = null; try { st = getConnection().createStatement(); rs = st.executeQuery(query); java.util.List result = new java.util.ArrayList(); while (rs.next()) result.add(new Long(rs.getLong(1))); return result; } catch (java.sql.SQLException se) { throw new XdbcException ("Failed to find in db", se); } finally { try { releaseConnection(); rs.close(); st.close(); } catch (Exception e) { // forget it } } } protected java.sql.Connection getConnection () throws java.sql.SQLException { if (this.connection != null) return this.connection; return this.dataSource.getConnection(); } protected void releaseConnection () { if (this.dataSource != null) this.dataSource.releaseConnection(); } protected java.util.List find (java.util.List documentIds) throws XdbcException { if (documentIds == null || documentIds.size() < 1) { log.debug("No documentIds, returning empty list"); return new java.util.ArrayList(0); } java.sql.Statement st = null; java.sql.ResultSet rs = null; try { st = getConnection().createStatement(); log.debug("documentIds.size() = "+documentIds.size()); // // prepare XmlObjectMaps // and // WHERE clause StringBuffer sb = new StringBuffer(); sb.append(" WHERE "); java.util.Map documentMap = new java.util.HashMap(documentIds.size()); //log.debug("built documentMap"); java.util.Iterator it = documentIds.iterator(); while (it.hasNext()) { Long documentId = (Long)it.next(); // // XmlObjectMap XmlObjectMap map = new XmlObjectMap(); documentMap.put(documentId, map); // // WHERE clause sb.append("documentId="); sb.append(documentId); if (it.hasNext()) sb.append(" OR "); } String whereClause = sb.toString(); //log.debug("whereClause >\n"+whereClause+"\n<"); // // fetch elements sb = new StringBuffer(); sb.append("SELECT "); sb.append("documentId, id, parentElementId, eTagName, eText, eOrder, eIsCdata"); sb.append(" FROM "); sb.append(ELEMENT); sb.append(whereClause); sb.append(" ORDER BY documentId, parentElementId, eOrder"); String s = sb.toString(); //log.debug("fetching elements >\n"+s+"\n<"); rs = st.executeQuery(s); while(rs.next()) { XmlObjectMap map = (XmlObjectMap)documentMap.get(new Long(rs.getLong(1))); map.put(XmlObject.buildElement(rs)); } rs.close(); // // fetch attributes sb = new StringBuffer(); sb.append("SELECT documentId, elementId, attName, attValue FROM "); sb.append(ATTRIBUTE); sb.append(whereClause); sb.append(" ORDER BY documentId"); s = sb.toString(); //log.debug("fetching attributes >\n"+s+"\n<"); rs = st.executeQuery(s); while(rs.next()) { XmlObjectMap map = (XmlObjectMap)documentMap.get(new Long(rs.getLong(1))); map.put(XmlObject.buildAttribute(rs)); } rs.close(); // // return documents java.util.List result = new java.util.ArrayList(documentIds.size()); it = documentIds.iterator(); while (it.hasNext()) { XmlObjectMap map = (XmlObjectMap)documentMap.get((Long)it.next()); result.add(map.buildDocument()); } return result; } catch (java.sql.SQLException se) { throw new XdbcException ("Failed to fetch documents from db", se); } finally { try { releaseConnection(); st.close(); } catch (Exception e) { // forget it } } } // // STATIC METHOD public static Session createSession (final ApplicationContext context, final java.util.Map serviceParams) throws ServiceException { final OwfeDataSource ds = SqlUtils.lookupDataSource(context, serviceParams); int idPrefix = 10; String sIdPrefix = (String)serviceParams .get(UniqueIdGenerator.P_ID_PREFIX); if (sIdPrefix != null) idPrefix = Integer.parseInt(sIdPrefix); Session session = null; try { session = new openwfe.org.xdbc.SessionImpl(); session.init(ds, idPrefix); } catch (XdbcException xe) { throw new ServiceException ("Failed to set up xdbcSession", xe); } return session; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -