You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by am...@apache.org on 2005/11/21 03:06:21 UTC

svn commit: r345808 [2/2] - in /geronimo/trunk: applications/console-ear/src/plan/ applications/console-standard/ applications/console-standard/src/java/org/apache/geronimo/console/databasemanager/wizard/ applications/console-standard/src/webapp/WEB-IN...

Added: geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/bea/WebLogic81DatabaseConverter.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/bea/WebLogic81DatabaseConverter.java?rev=345808&view=auto
==============================================================================
--- geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/bea/WebLogic81DatabaseConverter.java (added)
+++ geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/bea/WebLogic81DatabaseConverter.java Sun Nov 20 18:06:06 2005
@@ -0,0 +1,498 @@
+/**
+ *
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.converter.bea;
+
+import java.io.Reader;
+import java.io.IOException;
+import java.io.FileReader;
+import java.io.File;
+import java.io.FilenameFilter;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
+import java.util.Properties;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+import org.apache.geronimo.converter.DOMUtils;
+import org.apache.geronimo.converter.DatabaseConversionStatus;
+import org.apache.geronimo.converter.JDBCPool;
+import org.apache.geronimo.converter.XADatabasePool;
+import org.apache.geronimo.converter.AbstractDatabasePool;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Converts database pools from WebLogic 8.1 to Geronimo
+ *
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class WebLogic81DatabaseConverter extends DOMUtils {
+    public static DatabaseConversionStatus convert(Reader configXml) throws IOException {
+        List status = new ArrayList();
+        List noTx = new ArrayList();
+        List local = new ArrayList();
+        List xa = new ArrayList();
+
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setValidating(false);
+        try {
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document doc = builder.parse(new InputSource(configXml));
+            configXml.close();
+            parseDocument(doc, status, noTx, local, xa);
+        } catch (ParserConfigurationException e) {
+            throw (IOException)new IOException().initCause(e);
+        } catch (SAXException e) {
+            throw (IOException)new IOException().initCause(e);
+        }
+
+        DatabaseConversionStatus result = new DatabaseConversionStatus();
+        result.setMessages((String[]) status.toArray(new String[status.size()]));
+        result.setNoTXPools((JDBCPool[]) noTx.toArray(new JDBCPool[noTx.size()]));
+        result.setJdbcPools((JDBCPool[]) local.toArray(new JDBCPool[noTx.size()]));
+        result.setXaPools((XADatabasePool[]) xa.toArray(new XADatabasePool[xa.size()]));
+        return result;
+    }
+
+    private static void parseDocument(Document doc, List status, List noTx, List local, List xa) {
+        Element domain = doc.getDocumentElement();
+        if(!domain.getNodeName().equalsIgnoreCase("Domain")) {
+            status.add("ERROR: Unrecognized file beginning with "+domain.getNodeName()+" element.  Expected a WebLogic config.xml file.");
+            return;
+        }
+        NodeList list = domain.getChildNodes();
+        Map pools = new HashMap();
+        for(int i=0; i<list.getLength(); i++) {
+            Node node = list.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                String name = node.getNodeName();
+                if(name.equalsIgnoreCase("JDBCConnectionPool")) {
+                    ConnectionPool pool = getConnectionPool((Element)node, status);
+                    pools.put(pool.getName(), pool);
+                } else if(name.equalsIgnoreCase("JDBCDataSource")) {
+                    DataSource ds = getDataSource((Element)node, false);
+                    ConnectionPool pool = (ConnectionPool) pools.get(ds.getPoolName());
+                    if(pool != null) {
+                        pool.getDataSources().add(ds);
+                    } else {
+                        status.add("ERROR: Can't find pool for data source '"+ds.getName()+"' ("+ds.getPoolName()+")");
+                    }
+                } else if(name.equalsIgnoreCase("JDBCTxDataSource")) {
+                    DataSource ds = getDataSource((Element)node, true);
+                    ConnectionPool pool = (ConnectionPool) pools.get(ds.getPoolName());
+                    if(pool != null) {
+                        pool.getDataSources().add(ds);
+                    } else {
+                        status.add("ERROR: Can't find pool for data source '"+ds.getName()+"' ("+ds.getPoolName()+")");
+                    }
+                } else {
+                    status.add("Skipping element '"+name+"'");
+                }
+            }
+        }
+        processPools((ConnectionPool[]) pools.values().toArray(new ConnectionPool[0]),
+                status, local, xa);
+    }
+
+    private static void processPools(ConnectionPool[] pools, List status, List local, List xa) {
+        for (int i = 0; i < pools.length; i++) {
+            ConnectionPool pool = pools[i];
+            boolean isXA;
+            if(pool.hasEmulate()) {
+                isXA = false;
+            } else if(pool.hasNonTX()) {
+                isXA = false;
+            } else if(pool.hasXADriverName()) {
+                isXA = true;
+            } else {
+                isXA = false;
+                status.add("Can't tell whether pool '"+pool.getName()+"' is an XA driver or not; will create local transaction pools in Geronimo.");
+            }
+            if(pool.getDataSources().size() == 0) {
+                status.add("Pool '"+pool.getName()+"' has no associated data sources.  Creating a default pool for it.");
+                if(isXA) {
+                    xa.add(createXAPool(pool, pool.getName(), null));
+                } else {
+                    local.add(createJDBCPool(pool, pool.getName(), null));
+                }
+            } else {
+                for (int j = 0; j < pool.getDataSources().size(); j++) {
+                    DataSource ds = (DataSource) pool.getDataSources().get(j);
+                    if(isXA) {
+                        xa.add(createXAPool(pool, ds.getName(), ds.getJndiName()));
+                    } else {
+                        local.add(createJDBCPool(pool, ds.getName(), ds.getJndiName()));
+                    }
+                }
+            }
+        }
+    }
+
+    private static void populatePool(ConnectionPool pool, AbstractDatabasePool target) {
+        if(pool.getReserveTimeoutSecs() != null) {
+            target.setBlockingTimeoutMillis(new Integer(pool.getReserveTimeoutSecs().intValue()*1000));
+        }
+        if(pool.getIdleTimeoutSecs() != null) {
+            target.setIdleTimeoutMillis(new Integer(pool.getIdleTimeoutSecs().intValue()*1000));
+        }
+        target.setMaxSize(pool.getMax());
+        target.setMinSize(pool.getMin());
+        target.setNewConnectionSQL(pool.getInitSQL());
+        target.setStatementCacheSize(pool.getCacheSize());
+        target.setTestConnectionSQL(pool.getTestTable() == null ? null : "SELECT * FROM "+pool.getTestTable()+" WHERE 0=1");
+        if(pool.getDriverName().toLowerCase().indexOf("oracle") > -1) target.setVendor(JDBCPool.VENDOR_ORACLE);
+        if(pool.getDriverName().toLowerCase().indexOf("mysql") > -1) target.setVendor(JDBCPool.VENDOR_MYSQL);
+        if(pool.getDriverName().toLowerCase().indexOf("sybase") > -1) target.setVendor(JDBCPool.VENDOR_SYBASE);
+        if(pool.getDriverName().toLowerCase().indexOf("informix") > -1) target.setVendor(JDBCPool.VENDOR_INFORMIX);
+    }
+
+    private static JDBCPool createJDBCPool(ConnectionPool pool, String name, String jndiName) {
+        JDBCPool result = new JDBCPool();
+        result.setName(name);
+        result.setJndiName(jndiName);
+        populatePool(pool, result);
+        result.setConnectionProperties(pool.getProperties());
+        result.setDriverClass(pool.getDriverName());
+        result.setJdbcURL(pool.getUrl());
+        result.setPassword(pool.getPassword());
+        result.setUsername(pool.getUsername());
+        return result;
+    }
+
+    private static XADatabasePool createXAPool(ConnectionPool pool, String name, String jndiName) {
+        XADatabasePool result = new XADatabasePool();
+        result.setName(name);
+        result.setJndiName(jndiName);
+        populatePool(pool, result);
+        result.setXaDataSourceClass(pool.getDriverName());
+        result.setProperties(pool.getProperties());
+        return result;
+    }
+
+    private static DataSource getDataSource(Element root, boolean tx) {
+        DataSource ds = new DataSource();
+        ds.setDeclaredAsTX(tx);
+        ds.setEmulate(getBoolean(root.getAttribute("EnableTwoPhaseCommit"), false));
+        ds.setName(root.getAttribute("Name"));
+        ds.setJndiName(root.getAttribute("JNDIName"));
+        ds.setPoolName(root.getAttribute("PoolName"));
+        return ds;
+    }
+
+    private static boolean getBoolean(String value, boolean defaultResult) {
+        if(value == null) {
+            return defaultResult;
+        }
+        return new Boolean(value).booleanValue();
+    }
+
+    private static ConnectionPool getConnectionPool(Element root, List status) {
+        ConnectionPool pool = new ConnectionPool();
+        pool.setName(root.getAttribute("Name"));
+        pool.setDriverName(root.getAttribute("DriverName"));
+        pool.setUrl(root.getAttribute("URL"));
+        pool.setMin(getInteger(root.getAttribute("InitialCapacity")));
+        pool.setMax(getInteger(root.getAttribute("MaxCapacity")));
+        readProperties(pool.getProperties(), root.getAttribute("Properties"), status);
+        pool.setUsername(pool.getProperties().getProperty("user"));
+        pool.getProperties().remove("user");
+        pool.setPassword(root.getAttribute("Password"));
+        if(pool.getPassword() == null) {
+            pool.setPassword(root.getAttribute("PasswordEncrypted"));
+        }
+        pool.setReserveTimeoutSecs(getInteger(root.getAttribute("ConnectionReserveTimeoutSeconds")));
+        pool.setIdleTimeoutSecs(getInteger(root.getAttribute("InactiveConnectionTimeoutSeconds")));
+        pool.setCacheSize(getInteger(root.getAttribute("StatementCacheSize")));
+        pool.setInitSQL(root.getAttribute("InitSQL"));
+        pool.setTestTable(root.getAttribute("TestTableName"));
+        return pool;
+    }
+
+    private static void readProperties(Properties props, String value, List status) {
+        if(value == null) {
+            return;
+        }
+        value = value.trim();
+        if(value.equals("")) {
+            return;
+        }
+        int last = -1;
+        int pos = value.indexOf(';');
+        while(pos > -1) {
+            String s = value.substring(last+1, pos);
+            int eq = s.indexOf('=');
+            if(eq > -1) {
+                props.setProperty(s.substring(0, eq), s.substring(eq+1));
+            } else {
+                status.add("WARN: Unable to read property '"+s+"'");
+            }
+            last = pos;
+            pos = value.indexOf(';', pos+1);
+        }
+        String s = value.substring(last+1);
+        int eq = s.indexOf('=');
+        if(eq > -1) {
+            props.setProperty(s.substring(0, eq), s.substring(eq+1));
+        } else {
+            status.add("WARN: Unable to read property '"+s+"'");
+        }
+    }
+
+    private static Integer getInteger(String value) {
+        if(value == null) {
+            return null;
+        }
+        value = value.trim();
+        if(value.equals("")) {
+            return null;
+        }
+        return new Integer(value);
+    }
+
+    public static class DataSource {
+        private String name;
+        private String poolName;
+        private String jndiName;
+        private boolean emulate;
+        private boolean declaredAsTX;
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getPoolName() {
+            return poolName;
+        }
+
+        public void setPoolName(String poolName) {
+            this.poolName = poolName;
+        }
+
+        public String getJndiName() {
+            return jndiName;
+        }
+
+        public void setJndiName(String jndiName) {
+            this.jndiName = jndiName;
+        }
+
+        public boolean isEmulate() {
+            return emulate;
+        }
+
+        public void setEmulate(boolean emulate) {
+            this.emulate = emulate;
+        }
+
+        public boolean isDeclaredAsTX() {
+            return declaredAsTX;
+        }
+
+        public void setDeclaredAsTX(boolean declaredAsTX) {
+            this.declaredAsTX = declaredAsTX;
+        }
+    }
+
+    public static class ConnectionPool {
+        private String name;
+        private String driverName;
+        private Integer min, max;
+        private String url;
+        private String username;
+        private String password;
+        private Integer reserveTimeoutSecs;
+        private Integer idleTimeoutSecs;
+        private Integer cacheSize;
+        private String initSQL;
+        private String testTable;
+        private Properties properties = new Properties();
+        private List dataSources = new ArrayList();
+
+        public boolean hasEmulate() {
+            for (int i = 0; i < dataSources.size(); i++) {
+                DataSource ds = (DataSource) dataSources.get(i);
+                if(ds.isEmulate()) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public boolean hasNonTX() {
+            for (int i = 0; i < dataSources.size(); i++) {
+                DataSource ds = (DataSource) dataSources.get(i);
+                if(!ds.isDeclaredAsTX()) {
+                    return true;
+                }
+            }
+            return false;
+        }
+
+        public boolean hasXADriverName() {
+            return driverName.toUpperCase().indexOf("XA") > -1;
+        }
+
+        public String getName() {
+            return name;
+        }
+
+        public void setName(String name) {
+            this.name = name;
+        }
+
+        public String getDriverName() {
+            return driverName;
+        }
+
+        public void setDriverName(String driverName) {
+            this.driverName = driverName;
+        }
+
+        public String getUsername() {
+            return username;
+        }
+
+        public void setUsername(String username) {
+            this.username = username;
+        }
+
+        public String getPassword() {
+            return password;
+        }
+
+        public void setPassword(String password) {
+            this.password = password;
+        }
+
+        public String getInitSQL() {
+            return initSQL;
+        }
+
+        public void setInitSQL(String initSQL) {
+            this.initSQL = initSQL;
+        }
+
+        public String getTestTable() {
+            return testTable;
+        }
+
+        public void setTestTable(String testTable) {
+            this.testTable = testTable;
+        }
+
+        public Properties getProperties() {
+            return properties;
+        }
+
+        public void setProperties(Properties properties) {
+            this.properties = properties;
+        }
+
+        public List getDataSources() {
+            return dataSources;
+        }
+
+        public void setDataSources(List dataSources) {
+            this.dataSources = dataSources;
+        }
+
+        public Integer getMin() {
+            return min;
+        }
+
+        public void setMin(Integer min) {
+            this.min = min;
+        }
+
+        public Integer getMax() {
+            return max;
+        }
+
+        public void setMax(Integer max) {
+            this.max = max;
+        }
+
+        public Integer getReserveTimeoutSecs() {
+            return reserveTimeoutSecs;
+        }
+
+        public void setReserveTimeoutSecs(Integer reserveTimeoutSecs) {
+            this.reserveTimeoutSecs = reserveTimeoutSecs;
+        }
+
+        public Integer getIdleTimeoutSecs() {
+            return idleTimeoutSecs;
+        }
+
+        public void setIdleTimeoutSecs(Integer idleTimeoutSecs) {
+            this.idleTimeoutSecs = idleTimeoutSecs;
+        }
+
+        public Integer getCacheSize() {
+            return cacheSize;
+        }
+
+        public void setCacheSize(Integer cacheSize) {
+            this.cacheSize = cacheSize;
+        }
+
+        public String getUrl() {
+            return url;
+        }
+
+        public void setUrl(String url) {
+            this.url = url;
+        }
+    }
+
+
+    public static void main(String[] args) {
+        File dir = new File("/Users/ammulder/temp/");
+        File[] files = dir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.indexOf("config.xml") > -1;
+            }
+        });
+        for (int i = 0; i < files.length; i++) {
+            File file = files[i];
+            System.out.println("Reading "+file.getName());
+            try {
+                FileReader reader = new FileReader(file);
+                DatabaseConversionStatus status = WebLogic81DatabaseConverter.convert(reader);
+                for (int j = 0; j < status.getMessages().length; j++) {
+                    String message = status.getMessages()[j];
+                    System.out.println("    "+message);
+                }
+                System.out.println("    FOUND "+status.getNoTXPools().length+" NoTX Pools");
+                System.out.println("    FOUND "+status.getJdbcPools().length+" JDBC Pools");
+                System.out.println("    FOUND "+status.getXaPools().length+" XA Pools");
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    }
+}

Propchange: geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/bea/WebLogic81DatabaseConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/jboss/JBoss4DatabaseConverter.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/jboss/JBoss4DatabaseConverter.java?rev=345808&view=auto
==============================================================================
--- geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/jboss/JBoss4DatabaseConverter.java (added)
+++ geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/jboss/JBoss4DatabaseConverter.java Sun Nov 20 18:06:06 2005
@@ -0,0 +1,193 @@
+/**
+ *
+ * Copyright 2003-2004 The Apache Software Foundation
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.geronimo.converter.jboss;
+
+import java.io.Reader;
+import java.io.IOException;
+import java.util.List;
+import java.util.ArrayList;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.ParserConfigurationException;
+import org.apache.geronimo.converter.DatabaseConversionStatus;
+import org.apache.geronimo.converter.JDBCPool;
+import org.apache.geronimo.converter.XADatabasePool;
+import org.apache.geronimo.converter.AbstractDatabasePool;
+import org.apache.geronimo.converter.DOMUtils;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Node;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+/**
+ * Converts database pools from JBoss 4 to Geronimo
+ *
+ * @version $Rev: 46019 $ $Date: 2004-09-14 05:56:06 -0400 (Tue, 14 Sep 2004) $
+ */
+public class JBoss4DatabaseConverter extends DOMUtils {
+    public static DatabaseConversionStatus convert(Reader dsXml) throws IOException {
+        List status = new ArrayList();
+        List noTx = new ArrayList();
+        List local = new ArrayList();
+        List xa = new ArrayList();
+
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setValidating(false);
+        try {
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document doc = builder.parse(new InputSource(dsXml));
+            dsXml.close();
+            parseDocument(doc, status, noTx, local, xa);
+        } catch (ParserConfigurationException e) {
+            throw (IOException)new IOException().initCause(e);
+        } catch (SAXException e) {
+            throw (IOException)new IOException().initCause(e);
+        }
+
+        DatabaseConversionStatus result = new DatabaseConversionStatus();
+        result.setMessages((String[]) status.toArray(new String[status.size()]));
+        result.setNoTXPools((JDBCPool[]) noTx.toArray(new JDBCPool[noTx.size()]));
+        result.setJdbcPools((JDBCPool[]) local.toArray(new JDBCPool[noTx.size()]));
+        result.setXaPools((XADatabasePool[]) xa.toArray(new XADatabasePool[xa.size()]));
+        return result;
+    }
+
+    private static void parseDocument(Document doc, List status, List noTx, List local, List xa) {
+        Element datasources = doc.getDocumentElement();
+        if(!datasources.getNodeName().equalsIgnoreCase("datasources")) {
+            if(datasources.getNodeName().equals("connection-factories")) {
+                status.add("ERROR: Geronimo cannot parse a JBoss data source configured using conection-factories.  This typically means a custom RAR file is required.");
+                return;
+            } else {
+                status.add("ERROR: Unrecognized file beginning with "+datasources.getNodeName()+" element.  Expected a JBoss *-ds.xml file.");
+                return;
+            }
+        }
+        NodeList list = datasources.getChildNodes();
+        for(int i=0; i<list.getLength(); i++) {
+            Node node = list.item(i);
+            if(node.getNodeType() == Node.ELEMENT_NODE) {
+                String name = node.getNodeName();
+                if(name.equalsIgnoreCase("no-tx-datasource")) {
+                    addJDBCDataSource((Element)node, status, noTx);
+                } else if(name.equalsIgnoreCase("local-tx-datasource")) {
+                    addJDBCDataSource((Element)node, status, local);
+                } else if(name.equalsIgnoreCase("xa-datasource")) {
+                    addXADataSource((Element)node, status, xa);
+                } else if(name.equalsIgnoreCase("mbean")) {
+                    status.add("Skipping MBean element");
+                } else {
+                    status.add("WARN: Skipped element "+name);
+                }
+            }
+        }
+    }
+
+    private static void addDataSourceCommon(Element root, AbstractDatabasePool pool, List status) {
+        pool.setJndiName(getChildText(root, "jndi-name"));
+        pool.setName(pool.getJndiName());
+        if(pool.getJndiName() != null && pool.getJndiName().indexOf('/') > -1) {
+            status.add("NOTE: pool will use name '"+pool.getJndiName()+"' though Geronimo doesn't put it in JNDI");
+        }
+        String test = getChildText(root, "min-pool-size");
+        if(test != null && !test.equals("")) pool.setMinSize(new Integer(test));
+        test = getChildText(root, "max-pool-size");
+        if(test != null && !test.equals("")) pool.setMaxSize(new Integer(test));
+        test = getChildText(root, "blocking-timeout-millis");
+        if(test != null && !test.equals("")) pool.setBlockingTimeoutMillis(new Integer(test));
+        test = getChildText(root, "idle-timeout-minutes");
+        if(test != null && !test.equals("")) pool.setIdleTimeoutMillis(new Integer(Integer.parseInt(test)*60*1000));
+        pool.setNewConnectionSQL(getChildText(root, "new-connection-sql"));
+        pool.setTestConnectionSQL(getChildText(root, "check-valid-connection-sql"));
+        String sorter = getChildText(root, "exception-sorter-class-name");
+        if(sorter != null) {
+            if(sorter.indexOf("Oracle") > -1) pool.setVendor(AbstractDatabasePool.VENDOR_ORACLE);
+            if(sorter.indexOf("MySQL") > -1) pool.setVendor(AbstractDatabasePool.VENDOR_MYSQL);
+            if(sorter.indexOf("Sybase") > -1) pool.setVendor(AbstractDatabasePool.VENDOR_SYBASE);
+            if(sorter.indexOf("Informix") > -1) pool.setVendor(AbstractDatabasePool.VENDOR_INFORMIX);
+        }
+        test = getChildText(root, "prepared-statement-cache-size");
+        if(test != null && !test.equals("")) pool.setStatementCacheSize(new Integer(test));
+    }
+
+    private static void addJDBCDataSource(Element root, List status, List results) {
+        JDBCPool pool = new JDBCPool();
+        addDataSourceCommon(root, pool, status);
+        pool.setJdbcURL(getChildText(root, "connection-url"));
+        pool.setDriverClass(getChildText(root, "driver-class"));
+        NodeList list = root.getElementsByTagName("connection-property");
+        for(int i=0; i<list.getLength(); i++) {
+            Element prop = (Element) list.item(i);
+            pool.getConnectionProperties().setProperty(prop.getAttribute("name"), getText(prop));
+        }
+        pool.setUsername(getChildText(root, "user-name"));
+        pool.setPassword(getChildText(root, "password"));
+
+
+        if(pool.getName() != null && !pool.getName().equals("")) {
+            results.add(pool);
+        } else {
+            status.add("WARN: Ignoring pool with no JNDI name");
+        }
+    }
+
+    private static void addXADataSource(Element root, List status, List results) {
+        XADatabasePool pool = new XADatabasePool();
+        addDataSourceCommon(root, pool, status);
+        pool.setXaDataSourceClass(getChildText(root, "xa-datasource-class"));
+        NodeList list = root.getElementsByTagName("xa-datasource-property");
+        for(int i=0; i<list.getLength(); i++) {
+            Element prop = (Element) list.item(i);
+            pool.getProperties().setProperty(prop.getAttribute("name"), getText(prop));
+        }
+
+        if(pool.getName() != null && !pool.getName().equals("")) {
+            results.add(pool);
+        } else {
+            status.add("WARN: Ignoring pool with no JNDI name");
+        }
+    }
+
+    /*
+    public static void main(String[] args) {
+        File dir = new File("/Users/ammulder/temp/jboss-4.0.3SP1/docs/examples/jca/");
+        File[] files = dir.listFiles(new FilenameFilter() {
+            public boolean accept(File dir, String name) {
+                return name.endsWith("-ds.xml");
+            }
+        });
+        for (int i = 0; i < files.length; i++) {
+            File file = files[i];
+            System.out.println("Reading "+file.getName());
+            try {
+                FileReader reader = new FileReader(file);
+                DatabaseConversionStatus status = JBoss4DatabaseConverter.convert(reader);
+                for (int j = 0; j < status.getMessages().length; j++) {
+                    String message = status.getMessages()[j];
+                    System.out.println("    "+message);
+                }
+                System.out.println("    FOUND "+status.getNoTXPools().length+" NoTX Pools");
+                System.out.println("    FOUND "+status.getJdbcPools().length+" JDBC Pools");
+                System.out.println("    FOUND "+status.getXaPools().length+" XA Pools");
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+    } */
+}

Propchange: geronimo/trunk/modules/converter/src/java/org/apache/geronimo/converter/jboss/JBoss4DatabaseConverter.java
------------------------------------------------------------------------------
    svn:eol-style = native