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/07/21 03:38:23 UTC
svn commit: r219976 [6/12] - in /geronimo/trunk: ./ etc/
sandbox/console-core/ sandbox/console-core/src/
sandbox/console-core/src/java/ sandbox/console-core/src/java/org/
sandbox/console-core/src/java/org/apache/
sandbox/console-core/src/java/org/apach...
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DBViewerPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DBViewerPortlet.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DBViewerPortlet.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DBViewerPortlet.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,179 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.io.IOException;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+public class DBViewerPortlet extends GenericPortlet {
+
+ private static final int RDBMS_DERBY = 1;
+
+ private static final int RDBMS_MSSQL = 2;
+
+ private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/internaldb/dbViewerMaximized.jsp";
+
+ private static final String HELPVIEW_JSP = "/WEB-INF/view/internaldb/dbViewerHelp.jsp";
+
+ private static final String LISTDATABASES_JSP = "/WEB-INF/view/internaldb/listDatabases.jsp";
+
+ private static final String LISTTABLES_JSP = "/WEB-INF/view/internaldb/listTables.jsp";
+
+ private static final String VIEWTABLECONTENTS_JSP = "/WEB-INF/view/internaldb/viewTableContents.jsp";
+
+ private static final String LISTDB_ACTION = "listDatabases";
+
+ private static final String LISTTBLS_ACTION = "listTables";
+
+ private static final String VIEWTBLCONTENTS_ACTION = "viewTableContents";
+
+ private static final String DERBY_HOME = System
+ .getProperty("derby.system.home");
+
+ private static DBViewerHelper helper = new DBViewerHelper();
+
+ private PortletRequestDispatcher maximizedView;
+
+ private PortletRequestDispatcher helpView;
+
+ private PortletRequestDispatcher listDatabasesView;
+
+ private PortletRequestDispatcher listTablesView;
+
+ private PortletRequestDispatcher viewTableContentsView;
+
+ public void processAction(ActionRequest actionRequest,
+ ActionResponse actionResponse) throws PortletException, IOException {
+ // getting parameters here because it fails on doView()
+ String action = actionRequest.getParameter("action");
+ String db = actionRequest.getParameter("db");
+ String tbl = actionRequest.getParameter("tbl");
+ String viewTables = actionRequest.getParameter("viewTables");
+ String rdbms = actionRequest.getParameter("rdbms");
+ // pass them to the render request
+ if (action != null) {
+ actionResponse.setRenderParameter("action", action);
+ }
+ if (db != null) {
+ actionResponse.setRenderParameter("db", db);
+ }
+ if (tbl != null) {
+ actionResponse.setRenderParameter("tbl", tbl);
+ }
+ if (viewTables != null) {
+ actionResponse.setRenderParameter("viewTables", viewTables);
+ }
+ if (rdbms != null) {
+ actionResponse.setRenderParameter("rdbms", rdbms);
+ }
+ }
+
+ protected void doView(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws IOException, PortletException {
+ if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+ return;
+ }
+ String action = renderRequest.getParameter("action");
+ String db = renderRequest.getParameter("db");
+ String tbl = renderRequest.getParameter("tbl");
+ String viewTables = renderRequest.getParameter("viewTables");
+ String rdbms = renderRequest.getParameter("rdbms");
+ int rdbmsParam = (rdbms == null ? RDBMS_DERBY : Integer.parseInt(rdbms));
+
+ if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
+ if (rdbmsParam == RDBMS_DERBY) {
+ // Check is database & table is valid
+ if (LISTTBLS_ACTION.equals(action)
+ || VIEWTBLCONTENTS_ACTION.equals(action)) {
+ if (!helper.isDBValid(DERBY_HOME, db)) {
+ // DB not valid
+ System.out.println("ERROR: db not valid: " + db);
+ action = "";
+ }
+ }
+ if (VIEWTBLCONTENTS_ACTION.equals(action)) {
+ if (!helper.isTblValid(db, tbl)) {
+ // Table not valid
+ System.out.println("ERROR: table not valid: " + tbl);
+ action = "";
+ }
+ }
+ }
+
+ renderRequest.setAttribute("rdbms", rdbms);
+ if (LISTTBLS_ACTION.equals(action)) {
+ renderRequest.setAttribute("db", db);
+ renderRequest.setAttribute("viewTables", viewTables);
+ renderRequest.setAttribute("ds", DerbyConnectionUtil
+ .getDataSource(db));
+ listTablesView.include(renderRequest, renderResponse);
+ } else if (VIEWTBLCONTENTS_ACTION.equals(action)) {
+ renderRequest.setAttribute("db", db);
+ renderRequest.setAttribute("tbl", tbl);
+ renderRequest.setAttribute("viewTables", viewTables);
+ renderRequest.setAttribute("ds", DerbyConnectionUtil
+ .getDataSource(db));
+ viewTableContentsView.include(renderRequest, renderResponse);
+ } else {
+ renderRequest.setAttribute("databases", helper
+ .getDerbyDatabases(DERBY_HOME));
+ listDatabasesView.include(renderRequest, renderResponse);
+ }
+ } else {
+ maximizedView.include(renderRequest, renderResponse);
+ }
+ }
+
+ protected void doHelp(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws PortletException, IOException {
+ helpView.include(renderRequest, renderResponse);
+ }
+
+ public void init(PortletConfig portletConfig) throws PortletException {
+ super.init(portletConfig);
+ maximizedView = portletConfig.getPortletContext().getRequestDispatcher(
+ MAXIMIZEDVIEW_JSP);
+ helpView = portletConfig.getPortletContext().getRequestDispatcher(
+ HELPVIEW_JSP);
+ listDatabasesView = portletConfig.getPortletContext()
+ .getRequestDispatcher(LISTDATABASES_JSP);
+ listTablesView = portletConfig.getPortletContext()
+ .getRequestDispatcher(LISTTABLES_JSP);
+ viewTableContentsView = portletConfig.getPortletContext()
+ .getRequestDispatcher(VIEWTABLECONTENTS_JSP);
+ }
+
+ public void destroy() {
+ maximizedView = null;
+ helpView = null;
+ listDatabasesView = null;
+ listTablesView = null;
+ viewTableContentsView = null;
+ super.destroy();
+ }
+
+}
\ No newline at end of file
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DBViewerPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DerbyConnectionUtil.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DerbyConnectionUtil.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DerbyConnectionUtil.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DerbyConnectionUtil.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,136 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.SQLException;
+
+import javax.management.ObjectName;
+import javax.sql.DataSource;
+
+import org.apache.geronimo.kernel.KernelRegistry;
+import org.apache.geronimo.kernel.jmx.JMXUtil;
+
+/**
+ * A static class to handle retreiving connections. This class is built to
+ * handle lookups to the SystemDatabase as a special case. If a connection is
+ * requested for the SystemDatabase this class gets a DataSource from an admin
+ * object registered in the geronimo kernel otherwise the DataSource is looked
+ * up via JNDI.
+ */
+public class DerbyConnectionUtil {
+
+ public static final String CREATE_DB_PROP = ";create=true";
+
+ public static final String SHUTDOWN_DB_PROP = ";shutdown=true";
+
+ private static final int RDBMS_DERBY = 1;
+
+ private static final int RDBMS_MSSQL = 2;
+
+ private static final String SYSTEM_DB = "SYSTEMDATABASE";
+
+ private static final String DERBY_DRIVER = "org.apache.derby.jdbc.EmbeddedDriver";
+
+ private static final String PROTOCOL = "jdbc:derby:";
+
+ private static final String EMPTY_PROPS = "";
+
+ private static final ObjectName SYSTEM_DATASOURCE_NAME = JMXUtil
+ .getObjectName("geronimo.server:J2EEApplication=null,J2EEServer=geronimo,JCAResource=org/apache/geronimo/SystemDatabase,j2eeType=JCAManagedConnectionFactory,name=SystemDatasource");
+
+ /**
+ * Get database connection.
+ *
+ * @param dbName
+ * @return
+ * @throws SQLException
+ */
+ private static Connection getConnection(String dbName, String properties,
+ String protocol, String driver) throws SQLException {
+ try {
+ Class.forName(driver).newInstance();
+ } catch (Exception e) {
+ // Problem loading driver class
+ return null;
+ }
+ // If we are looking for the SystemDatabase get it from the kernel
+ // because it is not binded to our JNDI Context.
+ if (SYSTEM_DB.equalsIgnoreCase(dbName)) {
+ return getSystemDBConnection();
+ } else {
+ return DriverManager.getConnection(protocol + dbName + properties);
+ }
+ }
+
+ /**
+ * Get a connection to derby.
+ *
+ * @param dbName
+ * the name of the database to connect to.
+ * @param properties
+ * the properties to pass to the connection string.
+ * @return
+ */
+ public static Connection getDerbyConnection(String dbName, String properties)
+ throws SQLException {
+ return getConnection(dbName, properties, PROTOCOL, DERBY_DRIVER);
+ }
+
+ public static Connection getDerbyConnection(String dbName)
+ throws SQLException {
+ return getDerbyConnection(dbName, EMPTY_PROPS);
+ }
+
+ /**
+ * Get a connection to the SystemDatabase.
+ *
+ * @return
+ * @throws SQLException
+ */
+ public static Connection getSystemDBConnection() throws SQLException {
+ DataSource ds = null;
+ try {
+ ds = getDataSource(SYSTEM_DB);
+ return ds.getConnection();
+ } catch (Exception e) {
+ throw new SQLException(e.getMessage());
+ }
+ }
+
+ /**
+ * Get the datasource if dbName is == SYSTEM_DB, otherwise returns null.
+ *
+ * @param dbName
+ * @return
+ */
+ public static DataSource getDataSource(String dbName) {
+ try {
+ if (SYSTEM_DB.equalsIgnoreCase(dbName)) {
+ return (DataSource) KernelRegistry.getSingleKernel().invoke(
+ SYSTEM_DATASOURCE_NAME, "$getResource");
+ } else {
+ return null;
+ }
+ } catch (Exception e) {
+ return null;
+ }
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/DerbyConnectionUtil.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBHelper.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBHelper.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBHelper.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBHelper.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,228 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Hashtable;
+import java.util.Map;
+
+public class InternalDBHelper {
+
+ private static final int RDBMS_DERBY = 1;
+
+ private static final int RDBMS_MSSQL = 2;
+
+ private static final String JNDI_DERBY = "java:comp/env/SystemDatasource";
+
+ private static final Map derbyDBInfo = new Hashtable();
+
+ /**
+ * Returns the database metadata as a map.
+ *
+ * @return
+ */
+ public Map getDBInfo() {
+ derbyDBInfo.clear();
+ Connection conn = null;
+ try {
+ conn = DerbyConnectionUtil.getSystemDBConnection();
+ DatabaseMetaData dbMD = (DatabaseMetaData) conn.getMetaData();
+
+ // DB
+ derbyDBInfo.put("URL", removeNull(dbMD.getURL()));
+ derbyDBInfo.put("Username", removeNull(dbMD.getUserName()));
+ derbyDBInfo.put("Read Only", removeNull(String.valueOf(dbMD
+ .isReadOnly())));
+ derbyDBInfo.put("DB Product Name", removeNull(dbMD
+ .getDatabaseProductName()));
+ derbyDBInfo.put("DB Product Version", removeNull(dbMD
+ .getDatabaseProductVersion()));
+ derbyDBInfo.put("DB Major Version", removeNull(String.valueOf(dbMD
+ .getDatabaseMajorVersion())));
+ derbyDBInfo.put("DB Minor Version", removeNull(String.valueOf(dbMD
+ .getDatabaseMinorVersion())));
+
+ // Driver
+ derbyDBInfo.put("Driver Name", removeNull(dbMD.getDriverName()));
+ derbyDBInfo.put("Driver Version", removeNull(dbMD
+ .getDriverVersion()));
+ derbyDBInfo.put("Driver Major Version", removeNull(String
+ .valueOf(dbMD.getDriverMajorVersion())));
+ derbyDBInfo.put("Driver Minor Version", removeNull(String
+ .valueOf(dbMD.getDriverMinorVersion())));
+
+ // JDBC
+ derbyDBInfo.put("JDBC Major Version", removeNull(String
+ .valueOf(dbMD.getJDBCMajorVersion())));
+ derbyDBInfo.put("JDBC Minor Version", removeNull(String
+ .valueOf(dbMD.getJDBCMinorVersion())));
+
+ // Functions
+ derbyDBInfo.put("Numeric Functions", removeNull(dbMD
+ .getNumericFunctions()));
+ derbyDBInfo.put("String Functions", removeNull(dbMD
+ .getStringFunctions()));
+ derbyDBInfo.put("System Functions", removeNull(dbMD
+ .getSystemFunctions()));
+ derbyDBInfo.put("Time Date Functions", removeNull(dbMD
+ .getTimeDateFunctions()));
+
+ // Etc
+ derbyDBInfo.put("Supported SQL Keywords", removeNull(dbMD
+ .getSQLKeywords().replace(',', ' ')));
+ derbyDBInfo.put("Supported Types", removeNull(getColumnData(dbMD
+ .getTypeInfo(), "TYPE_NAME")));
+ derbyDBInfo.put("Table Types", removeNull(getColumnData(dbMD
+ .getTableTypes(), "TABLE_TYPE")));
+ derbyDBInfo.put("Schemas", removeNull(getColumnData(dbMD
+ .getSchemas(), "TABLE_SCHEM")));
+ String tx = null;
+
+ switch (dbMD.getDefaultTransactionIsolation()) {
+ case Connection.TRANSACTION_NONE:
+ tx = "not supported";
+ break;
+ case Connection.TRANSACTION_READ_COMMITTED:
+ tx = "dirty reads are prevented; non-repeatable reads and phantom reads can occur";
+ break;
+ case Connection.TRANSACTION_READ_UNCOMMITTED:
+ tx = "dirty reads, non-repeatable reads and phantom reads can occur";
+ break;
+ case Connection.TRANSACTION_REPEATABLE_READ:
+ tx = "dirty reads and non-repeatable reads are prevented; phantom reads can occur";
+ break;
+ case Connection.TRANSACTION_SERIALIZABLE:
+ tx = "dirty reads, non-repeatable reads and phantom reads are prevented";
+ break;
+ default:
+ tx = "";
+ break;
+ }
+
+ derbyDBInfo.put("Default Transaction Isolation", removeNull(tx));
+ String holdability = null;
+
+ switch (dbMD.getResultSetHoldability()) {
+ case ResultSet.HOLD_CURSORS_OVER_COMMIT:
+ holdability = "hold cursors over commit";
+ break;
+ case ResultSet.CLOSE_CURSORS_AT_COMMIT:
+ holdability = "close cursors at commit";
+ break;
+ default:
+ holdability = "";
+ break;
+ }
+ derbyDBInfo.put("Result Set Holdability", removeNull(holdability));
+ String sqlStateType = null;
+
+ switch (dbMD.getSQLStateType()) {
+ case DatabaseMetaData.sqlStateXOpen:
+ sqlStateType = "X/Open SQL CLI";
+ break;
+ case DatabaseMetaData.sqlStateSQL99:
+ sqlStateType = "SQL99";
+ break;
+ default:
+ sqlStateType = "";
+ break;
+ }
+ derbyDBInfo.put("SQL State Type", removeNull(sqlStateType));
+ } catch (SQLException e) {
+ printSQLError((SQLException) e);
+ } finally {
+ // close DB connection
+ try {
+ if (conn != null) {
+ conn.close();
+ }
+ } catch (SQLException e) {
+ // problem closing DB connection
+ }
+ }
+
+ return derbyDBInfo;
+ }
+
+ private String removeNull(String s) {
+ return ((s == null) ? "" : s);
+ }
+
+ /**
+ * Get a specific column data as a string separated by ','.
+ *
+ * @param rs
+ * @param colName
+ * @return
+ */
+ private String getColumnData(ResultSet rs, String colName) {
+ StringBuffer result = new StringBuffer();
+ try {
+ ResultSetMetaData rsmd = rs.getMetaData();
+
+ // 1) Get column number
+ int selectedCol = -1;
+ int numberOfColumns = rsmd.getColumnCount();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ String columnName = rsmd.getColumnName(i);
+ if (columnName.equals(colName)) {
+ selectedCol = i;
+ break;
+ }
+ }
+
+ // 2) Get data
+ boolean firstData = true;
+ while (rs.next()) {
+ for (int i = 1; i <= numberOfColumns; i++) {
+ if (i == selectedCol) {
+ if (firstData) {
+ firstData = false;
+ } else {
+ result.append(',');
+ }
+ String columnValue = rs.getString(i);
+ result.append(columnValue);
+ }
+ }
+ }
+ } catch (SQLException e) {
+ printSQLError((SQLException) e);
+ }
+
+ return result.toString();
+ }
+
+ /**
+ * Print the SQL exception including chained exceptions
+ * if there is one.
+ *
+ * @param e
+ */
+ private void printSQLError(SQLException e) {
+ while (e != null) {
+ System.out.println(e.toString());
+ e = e.getNextException();
+ }
+ }
+
+}
\ No newline at end of file
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBPortlet.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBPortlet.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBPortlet.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,104 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+public class InternalDBPortlet extends GenericPortlet {
+
+ private static final String NORMALVIEW_JSP = "/WEB-INF/view/internaldb/internalDBNormal.jsp";
+
+ private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/internaldb/internalDBMaximized.jsp";
+
+ private static final String HELPVIEW_JSP = "/WEB-INF/view/internaldb/internalDBHelp.jsp";
+
+ private static InternalDBHelper helper = new InternalDBHelper();
+
+ private static Map javaSysInfo = new HashMap();
+
+ private PortletRequestDispatcher normalView;
+
+ private PortletRequestDispatcher maximizedView;
+
+ private PortletRequestDispatcher helpView;
+
+ public void processAction(ActionRequest actionRequest,
+ ActionResponse actionResponse) throws PortletException, IOException {
+ // Getting parameters here because it fails on doView()
+ String rdbms = actionRequest.getParameter("rdbms");
+ if (rdbms != null) {
+ actionResponse.setRenderParameter("rdbms", rdbms);
+ }
+ }
+
+ protected void doView(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws IOException, PortletException {
+ if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+ return;
+ }
+
+ String rdbmsParam = renderRequest.getParameter("rdbms");
+ int rdbms = 1;
+ if ((rdbmsParam != null) && (rdbmsParam.length() > 0)) {
+ rdbms = Integer.parseInt(rdbmsParam);
+ }
+ Map internalDB = helper.getDBInfo();
+ renderRequest.setAttribute("internalDB", internalDB);
+
+ if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
+ normalView.include(renderRequest, renderResponse);
+ } else {
+ maximizedView.include(renderRequest, renderResponse);
+ }
+ }
+
+ protected void doHelp(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws PortletException, IOException {
+ helpView.include(renderRequest, renderResponse);
+ }
+
+ public void init(PortletConfig portletConfig) throws PortletException {
+ super.init(portletConfig);
+ normalView = portletConfig.getPortletContext().getRequestDispatcher(
+ NORMALVIEW_JSP);
+ maximizedView = portletConfig.getPortletContext().getRequestDispatcher(
+ MAXIMIZEDVIEW_JSP);
+ helpView = portletConfig.getPortletContext().getRequestDispatcher(
+ HELPVIEW_JSP);
+ }
+
+ public void destroy() {
+ normalView = null;
+ maximizedView = null;
+ helpView = null;
+ super.destroy();
+ }
+
+}
\ No newline at end of file
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/InternalDBPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLHelper.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLHelper.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLHelper.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLHelper.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,218 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.io.File;
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+public class RunSQLHelper {
+
+ public static final String SQL_SUCCESS_MSG = "SQL command/s successful";
+
+ public static final String SQL_EMPTY_MSG = "SQL Command/s can't be empty";
+
+ private static final String DB_CREATED_MSG = "Database created";
+
+ private static final String DB_DELETED_MSG = "Database deleted";
+
+ private static final String DERBY_BACKUP_FOLDER = "derby.backup";
+
+ private static final String PARENT_FOLDER = "..";
+
+ private static final String BAK_EXTENSION = ".bak";
+
+ private static final String BAK_PREFIX = "BAK_";
+
+ public String createDB(String dbName) {
+ String result = DB_CREATED_MSG + ": " + dbName;
+
+ Connection conn = null;
+ try {
+ conn = DerbyConnectionUtil.getDerbyConnection(dbName,
+ DerbyConnectionUtil.CREATE_DB_PROP);
+ } catch (Throwable e) {
+ if (e instanceof SQLException) {
+ result = getSQLError((SQLException) e);
+ } else {
+ result = e.getMessage();
+ }
+ } finally {
+ // close DB connection
+ try {
+ if (conn != null) {
+ conn.close();
+ }
+ } catch (SQLException e) {
+ result = "Problem closing DB connection";
+ }
+ }
+
+ return result;
+ }
+
+ public String backupDB(String derbyHome, String dbName) {
+ return "";
+ }
+
+ public String restoreDB(String derbyHome, String dbName) {
+ return "";
+ }
+
+ public String deleteDB(String derbyHome, String dbName) {
+ String result = DB_DELETED_MSG + ": " + dbName;
+
+ // shutdown database before deleting it
+ if (!shutdownDB(dbName)) {
+ result = "Database not deleted: " + dbName
+ + " Couldn't shutdown db: " + dbName;
+ return result;
+ }
+
+ try {
+ // create backup folder if not created
+ File derbyBackupFolder = new File(derbyHome + File.separatorChar
+ + PARENT_FOLDER + File.separatorChar + DERBY_BACKUP_FOLDER);
+ if (!derbyBackupFolder.exists()) {
+ if (!derbyBackupFolder.mkdirs()) {
+ result = "Database not deleted: " + dbName
+ + " Derby backup folder not created: "
+ + derbyBackupFolder;
+ return result;
+ }
+ }
+
+ File oldDBFolder = new File(derbyHome + File.separatorChar + dbName);
+ if (oldDBFolder.exists()) {
+ // Need to add a prefix because File.createTempFile's first
+ // argument must be a String at least three characters long.
+ File tmpFile = File.createTempFile(BAK_PREFIX + dbName,
+ BAK_EXTENSION, derbyBackupFolder);
+ File newDBFolder = new File(tmpFile.getAbsolutePath());
+ /*
+ * Delete temp file and create a temp folder using the temp
+ * filename
+ */
+ if (tmpFile.delete()) {
+ if (newDBFolder.mkdirs()) {
+ if (!oldDBFolder.renameTo(new File(newDBFolder,
+ oldDBFolder.getName()))) {
+ result = "Database not deleted: " + dbName
+ + " DB folder not renamed";
+ return result;
+ }
+ }
+ }
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return result;
+ }
+
+ public String runSQL(String dbName, String sql) {
+ String result = SQL_SUCCESS_MSG;
+
+ if ((sql == null) || (sql.trim().length() == 0)) {
+ result = SQL_EMPTY_MSG;
+ return result;
+ }
+
+ Connection conn = null;
+ Statement s = null;
+ try {
+
+ conn = DerbyConnectionUtil.getDerbyConnection(dbName);
+ conn.setAutoCommit(false);
+
+ s = conn.createStatement();
+ String[] sqlCmds = sql.split(";");
+ for (int i = 0; i < sqlCmds.length; i++) {
+ if (sqlCmds[i].trim().length() > 0) {
+ // debug printout (remove later)
+ System.out.println("SQL" + i + ": <" + sqlCmds[i].trim()
+ + ">");
+ s.execute(sqlCmds[i]);
+ }
+ }
+ conn.commit();
+ } catch (Throwable e) {
+ if (e instanceof SQLException) {
+ result = getSQLError((SQLException) e);
+ } else {
+ result = e.getMessage();
+ }
+ } finally {
+ // close DB connection
+ try {
+ if (s != null) {
+ s.close();
+ }
+ if (conn != null) {
+ conn.close();
+ }
+ } catch (SQLException e) {
+ if (SQL_SUCCESS_MSG.equals(result)) {
+ result = "Problem closing DB connection: " + e.getMessage();
+ }
+ }
+ }
+
+ return result;
+ }
+
+ private boolean shutdownDB(String dbName) {
+ boolean ok = true;
+
+ boolean gotSQLExc = false;
+ try {
+ DerbyConnectionUtil.getDerbyConnection(dbName,
+ DerbyConnectionUtil.SHUTDOWN_DB_PROP);
+ } catch (SQLException se) {
+ gotSQLExc = true;
+ }
+
+ if (!gotSQLExc) {
+ ok = false;
+ }
+
+ return ok;
+ }
+
+ private String getSQLError(SQLException e) {
+ StringBuffer errorMsg = new StringBuffer();
+ while (e != null) {
+ //errorMsg.append(e.toString());
+ errorMsg.append(e.getMessage());
+ errorMsg.append(" * ");
+ e = e.getNextException();
+ }
+
+ return errorMsg.toString();
+ }
+
+ public static void main(String[] args) {
+ new RunSQLHelper().runSQL("derbyDB4",
+ "create table derbyTbl1(num int, addr varchar(40));"
+ + "create table derbyTbl2(num int, addr varchar(40));"
+ + "create table derbyTbl3(num int, addr varchar(40));"
+ + "insert into derb");
+ }
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLHelper.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLPortlet.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLPortlet.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLPortlet.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,168 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.internaldb;
+
+import java.io.IOException;
+import java.util.Collection;
+
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+public class RunSQLPortlet extends GenericPortlet {
+
+ private static final String NORMALVIEW_JSP = "/WEB-INF/view/internaldb/runSQLNormal.jsp";
+
+ private static final String MAXIMIZEDVIEW_JSP = "/WEB-INF/view/internaldb/runSQLMaximized.jsp";
+
+ private static final String HELPVIEW_JSP = "/WEB-INF/view/internaldb/runSQLHelp.jsp";
+
+ private static final String CREATEDB_ACTION = "Create";
+
+ private static final String DELETEDB_ACTION = "Delete";
+
+ private static final String RUNSQL_ACTION = "Run SQL";
+
+ private static final String BACKUPDB_ACTION = "Backup";
+
+ private static final String RESTOREDB_ACTION = "Restore";
+
+ private static RunSQLHelper sqlHelper = new RunSQLHelper();
+
+ private static DBViewerHelper dbHelper = new DBViewerHelper();
+
+ private static String derbyHome = System.getProperty("derby.system.home");
+
+ private PortletRequestDispatcher normalView;
+
+ private PortletRequestDispatcher maximizedView;
+
+ private PortletRequestDispatcher helpView;
+
+ private Collection databases;
+
+ private String action;
+
+ private String createDB;
+
+ private String deleteDB;
+
+ private String useDB;
+
+ private String backupDB;
+
+ private String restoreDB;
+
+ private String sqlStmts;
+
+ private String actionResult;
+
+ public void processAction(ActionRequest actionRequest,
+ ActionResponse actionResponse) throws PortletException, IOException {
+ // Getting parameters here because it fails on doView()
+ action = actionRequest.getParameter("action");
+ createDB = actionRequest.getParameter("createDB");
+ deleteDB = actionRequest.getParameter("deleteDB");
+ useDB = actionRequest.getParameter("useDB");
+ backupDB = actionRequest.getParameter("backupDB");
+ restoreDB = actionRequest.getParameter("restoreDB");
+ sqlStmts = actionRequest.getParameter("sqlStmts");
+ actionResult = "";
+ if (CREATEDB_ACTION.equals(action)) {
+ actionResult = sqlHelper.createDB(createDB);
+ } else if (DELETEDB_ACTION.equals(action)) {
+ actionResult = sqlHelper.deleteDB(derbyHome, deleteDB);
+ } else if (RUNSQL_ACTION.equals(action)) {
+ actionResult = sqlHelper.runSQL(useDB, sqlStmts);
+ } else if (BACKUPDB_ACTION.equals(action)) {
+ actionResult = sqlHelper.backupDB(derbyHome, backupDB);
+ } else if (RESTOREDB_ACTION.equals(action)) {
+ actionResult = sqlHelper.restoreDB(derbyHome, restoreDB);
+ }
+ }
+
+ protected void doView(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws IOException, PortletException {
+ if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+ return;
+ }
+
+ String singleSelectStmt;
+ if (WindowState.NORMAL.equals(renderRequest.getWindowState())) {
+ databases = dbHelper.getDerbyDatabases(derbyHome);
+ renderRequest.setAttribute("databases", databases);
+ if (RUNSQL_ACTION.equals(action)) {
+ // check if it's a single Select statement
+ if ((sqlStmts != null) && (sqlStmts.trim().indexOf(';') == -1)
+ && sqlStmts.trim().toUpperCase().startsWith("SELECT")
+ && RunSQLHelper.SQL_SUCCESS_MSG.equals(actionResult)) {
+ singleSelectStmt = sqlStmts.trim();
+ // set action result to blank so it won't display
+ actionResult = "";
+ } else {
+ singleSelectStmt = "";
+ }
+ renderRequest.setAttribute("useDB", useDB);
+ renderRequest
+ .setAttribute("singleSelectStmt", singleSelectStmt);
+ renderRequest.setAttribute("ds", DerbyConnectionUtil
+ .getDataSource(useDB));
+ }
+ if ((action != null) && (action.trim().length() > 0)) {
+ renderRequest.setAttribute("actionResult", actionResult);
+ //set action to null so that subsequent renders of portlet
+ // won't display
+ //action result if there is no action to process
+ action = null;
+ }
+ normalView.include(renderRequest, renderResponse);
+ } else {
+ maximizedView.include(renderRequest, renderResponse);
+ }
+ }
+
+ protected void doHelp(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws PortletException, IOException {
+ helpView.include(renderRequest, renderResponse);
+ }
+
+ public void init(PortletConfig portletConfig) throws PortletException {
+ super.init(portletConfig);
+ normalView = portletConfig.getPortletContext().getRequestDispatcher(
+ NORMALVIEW_JSP);
+ maximizedView = portletConfig.getPortletContext().getRequestDispatcher(
+ MAXIMIZEDVIEW_JSP);
+ helpView = portletConfig.getPortletContext().getRequestDispatcher(
+ HELPVIEW_JSP);
+ databases = dbHelper.getDerbyDatabases(derbyHome);
+ }
+
+ public void destroy() {
+ normalView = null;
+ maximizedView = null;
+ helpView = null;
+ super.destroy();
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/internaldb/RunSQLPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/AbstractJMSManager.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/AbstractJMSManager.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/AbstractJMSManager.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/AbstractJMSManager.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,122 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.jmsmanager;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContext;
+import org.apache.geronimo.j2ee.j2eeobjectnames.J2eeContextImpl;
+import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+
+public abstract class AbstractJMSManager {
+
+ protected static final String JMS_SERVER_MBEAN_NAME = "geronimo.server:J2EEApplication=null,J2EEModule=org/apache/geronimo/ActiveMQServer,J2EEServer=geronimo,j2eeType=JMSServer,name=ActiveMQl";
+
+ protected static final String GET_BROKER_ADMIN_FUNCTION = "getBrokerAdmin";
+
+ public static final String TOPIC_TYPE = "Topic";
+
+ public static final String QUEUE_TYPE = "Queue";
+
+ //ViewDestinations attribute names
+ protected static final String DESTINATION_LIST = "destinations";
+
+ protected static final String DESTINATION_MSG = "destinationsMsg";
+
+ //CreateDestinations attribute names
+ protected static final String DESTINATION_NAME = "destinationMessageDestinationName";
+
+ protected static final String DESTINATION_PHYSICAL_NAME = "destinationPhysicalName";
+
+ protected static final String DESTINATION_TYPE = "destinationType";
+
+ protected static final String DESTINATION_APPLICATION_NAME = "destinationApplicationName";
+
+ protected static final String DESTINATION_MODULE_NAME = "destinationModuleName";
+
+ protected static final String DESTINATION_CONFIG_URI = "destinationConfigURI";
+
+ protected static final String CONNECTION_FACTORY_NAME = "geronimo.server:J2EEApplication=null,J2EEServer=geronimo,JCAResource=org/apache/geronimo/SystemJMS,j2eeType=JCAManagedConnectionFactory,name=DefaultActiveMQConnectionFactory";
+
+ protected static Object[] no_args = new Object[0];
+
+ protected static String[] no_params = new String[0];
+
+ protected static Kernel kernel = KernelRegistry.getSingleKernel();
+
+ protected static final String BASE_CONFIG_URI = "runtimedestination/";
+
+ protected ObjectName mBeanName;
+
+ public static final ObjectName DESTINATION_QUERY;
+
+ public static final ObjectName ACTIVEMQJCA_RESOURCE_QUERY;
+
+ public static final String ACTIVEMQJCA_RESOURCE;
+
+ static {
+ try {
+
+ DESTINATION_QUERY = ObjectName
+ .getInstance("geronimo.server:j2eeType="
+ + NameFactory.JCA_ADMIN_OBJECT + ",*");
+ ACTIVEMQJCA_RESOURCE_QUERY = ObjectName
+ .getInstance("*:j2eeType=JCAManagedConnectionFactory,name=DefaultActiveMQConnectionFactory,*");
+ ACTIVEMQJCA_RESOURCE = getActiveMQJCA_RESOURCE(ACTIVEMQJCA_RESOURCE_QUERY);
+
+ if (null == ACTIVEMQJCA_RESOURCE) {
+ throw new RuntimeException(
+ "No JCA resource was found for DefaultActiveMQConnectionFactory");
+ }
+
+ } catch (MalformedObjectNameException e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ public static final J2eeContext baseContext = new J2eeContextImpl(
+ "geronimo.server", "geronimo", "null", ACTIVEMQJCA_RESOURCE, null,
+ null, NameFactory.JCA_ADMIN_OBJECT);
+
+ /**
+ * Get the JCA resource name of the activemq bean.
+ *
+ * @return JCA resource name
+ */
+ public static String getActiveMQJCA_RESOURCE(ObjectName obj) {
+
+ Set modules = kernel.listGBeans(obj);
+
+ String JCA_Resource = null;
+
+ for (Iterator iterator = modules.iterator(); iterator.hasNext();) {
+ ObjectName activemqObject = (ObjectName) iterator.next();
+ JCA_Resource = activemqObject
+ .getKeyProperty(NameFactory.JCA_RESOURCE);
+ }
+
+ return JCA_Resource;
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/AbstractJMSManager.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/DestinationInfo.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/DestinationInfo.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/DestinationInfo.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/DestinationInfo.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,132 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.jmsmanager;
+
+import javax.jms.Queue;
+
+public class DestinationInfo implements Comparable {
+
+ private final String name;
+
+ private final String physicalName;
+
+ private final Class type;
+
+ private final String applicationName;
+
+ private final String moduleName;
+
+ private final String configURI;
+
+ public DestinationInfo(String name, String physicalName, Class type,
+ String applicationName, String moduleName, String configURI) {
+ this.name = name;
+ this.physicalName = physicalName;
+ this.type = type;
+ this.applicationName = applicationName;
+ this.moduleName = moduleName;
+ this.configURI = configURI;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getPhysicalName() {
+ return physicalName;
+ }
+
+ public Class getType() {
+ return type;
+ }
+
+ public String getApplicationName() {
+ return applicationName;
+ }
+
+ public String getModuleName() {
+ return moduleName;
+ }
+
+ public String getConfigURI() {
+ return configURI;
+ }
+
+ /**
+ * Determines if the destination that this objects represents is viewable
+ * from the console this means that either the destination that this object
+ * represents was added via the Geronimo JMS Console or it is a Queue.
+ *
+ * @return true if the console knows how to display this Destination
+ * otherwise returns false.
+ */
+ public boolean isViewable() {
+ return Queue.class.isAssignableFrom(type) || isConsoleManaged();
+ }
+
+ /**
+ * Determines if the destination that this objects represents is removable
+ * from the console this means that the destination that this object
+ * represents was added via the Geronimo JMS Console.
+ *
+ * @return true if the console knows how to remove this Destination
+ * otherwise returns false.
+ */
+ public boolean isRemovable() {
+ return isConsoleManaged();
+ }
+
+ /**
+ * Determines if the destination that this objects represents was added via
+ * the console.
+ *
+ * @return true if the destination that this objects represents was added
+ * via the console otherwise returns false.
+ */
+ private boolean isConsoleManaged() {
+ return configURI.indexOf(AbstractJMSManager.BASE_CONFIG_URI + name) > -1;
+ }
+
+ public int compareTo(Object o) {
+ if (o instanceof DestinationInfo) {
+ DestinationInfo rhs = (DestinationInfo) o;
+ // If one of the objects is removable and the other is not, the
+ // removable one is less (comes first in a descending sort).
+ if (rhs.isRemovable() != this.isRemovable()) {
+ if (this.isRemovable()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ // If one of the objects is viewable and the other is not the
+ // viewable one is less (comes first in a descending sort).
+ } else if (rhs.isViewable() != this.isViewable()) {
+ if (this.isViewable()) {
+ return -1;
+ } else {
+ return 1;
+ }
+ // Sort by name if all else fails.
+ } else {
+ return this.name.compareTo(rhs.getName());
+ }
+ }
+ return 1;
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/DestinationInfo.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSConnectionFactoryManagerPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSConnectionFactoryManagerPortlet.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSConnectionFactoryManagerPortlet.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSConnectionFactoryManagerPortlet.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,306 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.jmsmanager;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import javax.jms.Connection;
+import javax.jms.ConnectionFactory;
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+import org.apache.geronimo.console.databasemanager.DataSourceInfo;
+import org.apache.geronimo.console.jmsmanager.activemqCF.ActiveMQConnectorHelper;
+import org.apache.geronimo.gbean.GAttributeInfo;
+import org.apache.geronimo.gbean.GBeanInfo;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+import org.apache.geronimo.kernel.jmx.JMXUtil;
+
+public class JMSConnectionFactoryManagerPortlet extends GenericPortlet {
+
+ private final static ActiveMQConnectorHelper helper = new ActiveMQConnectorHelper();
+
+ private final static String PARENT_ID = "org/apache/geronimo/SystemJMS";
+
+ private final static String ADD_MODE = "addACF";
+
+ private final static String SUBMIT_CREATE = "Create";
+
+ private final ObjectName DATABASE_QUERY = JMXUtil
+ .getObjectName("*:j2eeType=JCAManagedConnectionFactory,*");
+
+ protected final String NORMAL_VIEW = "/WEB-INF/view/jmsmanager/activemq/normal.jsp";;
+
+ protected final String DETAIL_VIEW = "/WEB-INF/view/jmsmanager/activemq/detail.jsp";
+
+ protected final String HELP_VIEW = "/WEB-INF/view/jmsmanager/activemq/help.jsp";;
+
+ protected final String ADD_VIEW = "/WEB-INF/view/jmsmanager/activemq/addACF.jsp";
+
+ protected Kernel kernel;
+
+ private PortletRequestDispatcher normalView;
+
+ private PortletRequestDispatcher detailView;
+
+ private PortletRequestDispatcher helpView;
+
+ private PortletRequestDispatcher addView;
+
+ private static final Set HIDDEN_ATTRIBUTES;
+
+ static {
+ HIDDEN_ATTRIBUTES = new HashSet();
+ HIDDEN_ATTRIBUTES.add("kernel");
+ HIDDEN_ATTRIBUTES.add("connectionImplClass");
+ HIDDEN_ATTRIBUTES.add("connectionInterface");
+ HIDDEN_ATTRIBUTES.add("connectionFactoryInterface");
+ HIDDEN_ATTRIBUTES.add("connectionFactoryImplClass");
+ HIDDEN_ATTRIBUTES.add("implementedInterfaces");
+ HIDDEN_ATTRIBUTES.add("managedConnectionFactoryClass");
+ HIDDEN_ATTRIBUTES.add("recoveryXAResources");
+ }
+
+ public void init(PortletConfig portletConfig) throws PortletException {
+ super.init(portletConfig);
+ kernel = KernelRegistry.getSingleKernel();
+ PortletContext context = portletConfig.getPortletContext();
+ normalView = context.getRequestDispatcher(NORMAL_VIEW);
+ detailView = context.getRequestDispatcher(DETAIL_VIEW);
+ helpView = context.getRequestDispatcher(HELP_VIEW);
+ addView = context.getRequestDispatcher(ADD_VIEW);
+ }
+
+ public void processAction(ActionRequest actionRequest,
+ ActionResponse actionResponse) throws PortletException, IOException {
+ String mode = actionRequest.getParameter("mode");
+ String submit = actionRequest.getParameter("submit");
+
+ if (mode == null) {
+ return;
+ } else if (ADD_MODE.equals(mode)) {
+ actionResponse.setRenderParameter("mode", mode);
+ if (SUBMIT_CREATE.equals(submit)) {
+ String acfName = actionRequest.getParameter("acfName");
+ String jndiName = actionRequest.getParameter("jndiName");
+ String serverURL = actionRequest.getParameter("serverURL");
+ String userName = actionRequest.getParameter("userName");
+ String pword = actionRequest.getParameter("pword");
+ String poolMaxSize = actionRequest.getParameter("poolMaxSize");
+ String blocking = actionRequest.getParameter("blocking");
+
+ String[] args = { trimStr(acfName), trimStr(PARENT_ID),
+ trimStr(acfName), trimStr(serverURL),
+ trimStr(userName), pword, trimStr(acfName),
+ trimStr(poolMaxSize), trimStr(blocking),
+ trimStr(jndiName) };
+ helper.deployPlan(args);
+ // Set mode to list after creating the new ConnectionFactories
+ actionResponse.setRenderParameter("mode", "list");
+ }
+ return;
+ }
+
+ String name = actionRequest.getParameter("name");
+ if (name != null) {
+ actionResponse.setRenderParameter("mode", "list");
+ return;
+ }
+ }
+
+ protected void doView(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws IOException, PortletException {
+ if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+ return;
+ }
+
+ List dependencies = helper.getDependencies();
+ // pass them to the render request
+ renderRequest.setAttribute("dependencies", (String[]) dependencies
+ .toArray(new String[dependencies.size()]));
+
+ String name = renderRequest.getParameter("name");
+ String mode = renderRequest.getParameter("mode");
+ String check = renderRequest.getParameter("check");
+
+ if (ADD_MODE.equals(mode)) {
+ addView.include(renderRequest, renderResponse);
+ return;
+ }
+
+ boolean test = false;
+ if (name == null || mode == null) {
+ mode = "list";
+ }
+ if ("true".equals(check)) {
+ test = true;
+ }
+ if ("detail".equals(mode) || "config".equals(mode)) {
+ renderDetail(renderRequest, renderResponse, name);
+ } else {
+ renderList(renderRequest, renderResponse, name, test);
+ }
+ }
+
+ private void renderList(RenderRequest renderRequest,
+ RenderResponse renderResponse, String name, boolean check)
+ throws PortletException, IOException {
+
+ Set gbeanNames = kernel.listGBeans(DATABASE_QUERY);
+ List connectionFactories = new ArrayList(gbeanNames.size());
+ for (Iterator i = gbeanNames.iterator(); i.hasNext();) {
+ ObjectName gbeanName = (ObjectName) i.next();
+
+ // check that this connector is a DataSource
+ try {
+ Class cfInterface = Class.forName((String) kernel.getAttribute(
+ gbeanName, "connectionFactoryInterface"));
+ if (!(ConnectionFactory.class).isAssignableFrom(cfInterface)) {
+ continue;
+ }
+ } catch (Exception e) {
+ throw new PortletException(e);
+ }
+
+ DataSourceInfo info = new DataSourceInfo();
+ info.setObjectName(gbeanName);
+ info.setName(gbeanName.getKeyProperty("name"));
+ try {
+ info.setJndiName((String) kernel.getAttribute(gbeanName,
+ "globalJNDIName"));
+ info
+ .setState((Integer) kernel.getAttribute(gbeanName,
+ "state"));
+ //check if user asked this connection to be tested
+ if ((gbeanName.toString().equals(name)) && (check)) {
+ info.setWorking(true);
+ try {
+ Object cf = kernel.invoke(gbeanName, "$getResource");
+ testConnection(cf);
+ info.setMessage("Connected");
+ } catch (Exception e) {
+ Throwable t = e;
+ String message = "Failed: ";
+ if (t.getMessage() != null) {
+ message = message + t.getMessage();
+ } else {
+ while (t.getMessage() == null) {
+ t = t.getCause();
+ if (t != null) {
+ message = message + t.getMessage();
+ } else {
+ message = message + "Unknown reason";
+ }
+ }
+ }
+ info.setMessage(message);
+ }
+ } else {
+ info.setWorking(false);
+ }
+
+ } catch (Exception e) {
+ throw new PortletException(e);
+ }
+ connectionFactories.add(info);
+ }
+ Collections.sort(connectionFactories);
+ renderRequest.setAttribute("cFactories", connectionFactories);
+
+ normalView.include(renderRequest, renderResponse);
+ }
+
+ private void renderDetail(RenderRequest renderRequest,
+ RenderResponse renderResponse, String name)
+ throws PortletException, IOException {
+ ObjectName gbeanName;
+
+ try {
+ gbeanName = new ObjectName(name);
+ } catch (MalformedObjectNameException e) {
+ throw new PortletException("Malformed parameter name: "
+ + renderRequest.getParameter("name"));
+ }
+
+ try {
+ GBeanInfo gbeanInfo = kernel.getGBeanInfo(gbeanName);
+ Set attributes = gbeanInfo.getAttributes();
+ Map values = new HashMap(attributes.size());
+ for (Iterator i = attributes.iterator(); i.hasNext();) {
+ GAttributeInfo attribute = (GAttributeInfo) i.next();
+ String gname = attribute.getName();
+ if (HIDDEN_ATTRIBUTES.contains(gname)) {
+ continue;
+ }
+ Object value = kernel.getAttribute(gbeanName, gname);
+ values.put(gname, value);
+ }
+ renderRequest.setAttribute("attributeMap", values);
+ } catch (Exception e) {
+ throw new PortletException(e);
+ }
+
+ detailView.include(renderRequest, renderResponse);
+ }
+
+ protected void doHelp(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws PortletException, IOException {
+ helpView.include(renderRequest, renderResponse);
+ }
+
+ public void destroy() {
+ normalView = null;
+ helpView = null;
+ addView = null;
+ kernel = null;
+ super.destroy();
+ }
+
+ private String trimStr(String str) {
+ if (str != null) {
+ return str.trim();
+ }
+ return "";
+ }
+
+ protected void testConnection(Object cf) throws Exception {
+ ConnectionFactory jmscf = (ConnectionFactory) cf;
+ Connection c = jmscf.createConnection();
+ c.close();
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSConnectionFactoryManagerPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSManagerPortlet.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSManagerPortlet.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSManagerPortlet.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSManagerPortlet.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,141 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.jmsmanager;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.jms.ConnectionFactory;
+import javax.portlet.ActionRequest;
+import javax.portlet.ActionResponse;
+import javax.portlet.GenericPortlet;
+import javax.portlet.PortletConfig;
+import javax.portlet.PortletContext;
+import javax.portlet.PortletException;
+import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.RenderRequest;
+import javax.portlet.RenderResponse;
+import javax.portlet.WindowState;
+
+import org.apache.geronimo.console.jmsmanager.handlers.CreateDestinationHandler;
+import org.apache.geronimo.console.jmsmanager.handlers.PortletResponseHandler;
+import org.apache.geronimo.console.jmsmanager.handlers.RemoveDestinationHandler;
+import org.apache.geronimo.console.jmsmanager.handlers.StatisticsHandler;
+import org.apache.geronimo.console.jmsmanager.renderers.CreateDestinationRenderer;
+import org.apache.geronimo.console.jmsmanager.renderers.PortletRenderer;
+import org.apache.geronimo.console.jmsmanager.renderers.StatisticsRenderer;
+import org.apache.geronimo.console.jmsmanager.renderers.ViewDLQRenderer;
+import org.apache.geronimo.console.jmsmanager.renderers.ViewDestinationsRenderer;
+import org.apache.geronimo.console.jmsmanager.renderers.ViewMessagesRenderer;
+
+public class JMSManagerPortlet extends GenericPortlet {
+
+ private PortletRequestDispatcher edit;
+
+ private PortletRequestDispatcher help;
+
+ private ConnectionFactory cf;
+
+ private Map handlers;
+
+ private Map renderers;
+
+ private PortletContext context;
+
+ public void init(PortletConfig portletConfig) throws PortletException {
+ super.init(portletConfig);
+
+ context = portletConfig.getPortletContext();
+
+ help = context
+ .getRequestDispatcher("/WEB-INF/view/jmsmanager/help.jsp");
+ edit = context
+ .getRequestDispatcher("/WEB-INF/view/jmsmanager/edit.jsp");
+
+ renderers = new HashMap();
+ renderers.put("createDestination", new CreateDestinationRenderer());
+ renderers.put("viewDestinations", new ViewDestinationsRenderer());
+ renderers.put("statistics", new StatisticsRenderer());
+ renderers.put("viewMessages", new ViewMessagesRenderer());
+ renderers.put("viewDLQ", new ViewDLQRenderer());
+
+ handlers = new HashMap();
+ handlers.put("createDestination", new CreateDestinationHandler());
+ handlers.put("removeDestination", new RemoveDestinationHandler());
+ handlers.put("statistics", new StatisticsHandler());
+
+ }
+
+ public void doHelp(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws PortletException, IOException {
+ help.include(renderRequest, renderResponse);
+ }
+
+ public void doView(RenderRequest renderRequest,
+ RenderResponse renderResponse) throws IOException, PortletException {
+
+ if (WindowState.MINIMIZED.equals(renderRequest.getWindowState())) {
+ return;
+ }
+
+ String view = renderRequest.getParameter("processAction");
+ if (view == null) {
+ // no specific content requested - show the destinations list
+ view = "viewDestinations";
+ }
+
+ PortletRenderer renderer = (PortletRenderer) renderers.get(view);
+ if (renderer == null) {
+ throw new PortletException("Invalid view parameter specified: "
+ + view);
+ }
+
+ String include = renderer.render(renderRequest, renderResponse);
+ if (include != null) {
+ PortletRequestDispatcher requestDispatcher = context
+ .getRequestDispatcher(include);
+ requestDispatcher.include(renderRequest, renderResponse);
+ }
+
+ }
+
+ public void processAction(ActionRequest actionRequest,
+ ActionResponse actionResponse) throws PortletException, IOException {
+ String processAction = actionRequest.getParameter("processaction");
+
+ PortletResponseHandler handler = (PortletResponseHandler) handlers
+ .get(processAction);
+
+ if (handler == null) {
+ // throw new RuntimeException( "no handlers for processAction = " +
+ // processAction );
+ handler = (PortletResponseHandler) handlers.get("viewDestinations");
+ }
+
+ handler.processAction(actionRequest, actionResponse);
+ }
+
+ public void destroy() {
+
+ help = null;
+ edit = null;
+ super.destroy();
+ }
+
+}
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/JMSManagerPortlet.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/activemqCF/ActiveMQConnectorHelper.java
URL: http://svn.apache.org/viewcvs/geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/activemqCF/ActiveMQConnectorHelper.java?rev=219976&view=auto
==============================================================================
--- geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/activemqCF/ActiveMQConnectorHelper.java (added)
+++ geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/activemqCF/ActiveMQConnectorHelper.java Wed Jul 20 18:38:12 2005
@@ -0,0 +1,270 @@
+/**
+ *
+ * Copyright 2004, 2005 The Apache Software Foundation or its licensors, as applicable.
+ *
+ * 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.console.jmsmanager.activemqCF;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.management.ObjectName;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.console.util.ObjectNameConstants;
+import org.apache.geronimo.kernel.Kernel;
+import org.apache.geronimo.kernel.KernelRegistry;
+import org.apache.geronimo.kernel.config.ConfigurationManager;
+import org.apache.geronimo.kernel.config.ConfigurationUtil;
+import org.apache.geronimo.kernel.jmx.JMXUtil;
+
+public class ActiveMQConnectorHelper {
+
+ private final static File REPO_FOLDER;
+
+ private final static String PLAN_FILE;
+
+ private final static String MODULE_FILE;
+
+ private final static String ACTIVEMQ_RA = "/activemq/rars/activemq-ra-3.1-SNAPSHOT.rar";
+
+ private final static String PLAN_XML = "/activemq/rars/amqconnectorPlan.xml";
+
+ private static final String LINE_SEP = System.getProperty("line.separator");
+
+ private static final String PLAN_TEMPLATE = getPlanTemplate();
+
+ // Deployer
+ private static final ObjectName DEPLOYER_NAME = JMXUtil
+ .getObjectName(ObjectNameConstants.DEPLOYER_OBJECT_NAME);
+
+ private static final String[] DEPLOYER_ARGS = { File.class.getName(),
+ File.class.getName() };
+
+ private static final String DEPLOY_METHOD = "deploy";
+
+ // Repository
+ private static final ObjectName REPO_NAME = JMXUtil
+ .getObjectName(ObjectNameConstants.REPO_OBJECT_NAME);
+
+ private static final String[] REPO_ARGS = { URI.class.getName() };
+
+ private static final String GETURL_METHOD = "getURL";
+
+ private List dependencies;
+
+ static {
+ // Initialize static vars
+ REPO_FOLDER = getRepositoryFile();
+ MODULE_FILE = REPO_FOLDER.getAbsolutePath() + ACTIVEMQ_RA;
+ PLAN_FILE = REPO_FOLDER.getAbsolutePath() + PLAN_XML;
+ }
+
+ private static File getRepositoryFile() {
+ File repoFile = null;
+
+ try {
+ Kernel kernel = KernelRegistry.getSingleKernel();
+ URI uri = new URI(".");
+ URL rootURL = (URL) kernel.invoke(REPO_NAME, GETURL_METHOD,
+ new Object[] {uri}, REPO_ARGS);
+ uri = new URI(rootURL.toString());
+ repoFile = new File(uri);
+ } catch (URISyntaxException e) {
+ System.out.println("ERROR: Invalid repository URL");
+ e.printStackTrace();
+ } catch (Exception e) {
+ System.out.println("ERROR: Problem getting repository location");
+ e.printStackTrace();
+ }
+
+ return repoFile;
+ }
+
+ private static String getPlanTemplate() {
+ StringBuffer sb = new StringBuffer();
+ sb.append("<?xml version=\"1.0\"?>\n");
+ sb
+ .append("<connector xmlns=\"http://geronimo.apache.org/xml/ns/j2ee/connector\"\n");
+ sb.append(" version=\"1.5\" configId=\"{0}\" parentId=\"{1}\">\n");
+ sb.append(" <resourceadapter>\n");
+ sb.append(" <resourceadapter-instance>\n");
+ sb.append(" <resourceadapter-name>{2}</resourceadapter-name>\n");
+ sb
+ .append(" <config-property-setting name=\"ServerUrl\">{3}</config-property-setting>\n");
+ sb
+ .append(" <config-property-setting name=\"UserName\">{4}</config-property-setting>\n");
+ sb
+ .append(" <config-property-setting name=\"Password\">{5}</config-property-setting>\n");
+ sb
+ .append(" <workmanager><gbean-link>DefaultWorkManager</gbean-link></workmanager>\n");
+ sb.append(" </resourceadapter-instance>\n");
+ sb.append(" <outbound-resourceadapter>\n");
+ sb.append(" <connection-definition>\n");
+ sb
+ .append(" <connectionfactory-interface>javax.jms.ConnectionFactory</connectionfactory-interface>\n");
+ sb.append(" <connectiondefinition-instance>\n");
+ sb.append(" <name>{6}</name>\n");
+ sb
+ .append(" <implemented-interface>javax.jms.QueueConnectionFactory</implemented-interface>\n");
+ sb
+ .append(" <implemented-interface>javax.jms.TopicConnectionFactory</implemented-interface>\n");
+ sb.append(" <connectionmanager>\n");
+ sb.append(" <xa-transaction>\n");
+ sb.append(" <transaction-caching/>\n");
+ sb.append(" </xa-transaction>\n");
+ sb.append(" <single-pool>\n");
+ sb.append(" <max-size>{7}</max-size>\n");
+ sb
+ .append(" <blocking-timeout-milliseconds>{8}</blocking-timeout-milliseconds>\n");
+ sb.append(" <match-one/>\n");
+ sb.append(" </single-pool>\n");
+ sb.append(" </connectionmanager>\n");
+ sb.append(" <global-jndi-name>{9}</global-jndi-name>\n");
+ sb
+ .append(" <credential-interface>javax.resource.spi.security.PasswordCredential</credential-interface>\n");
+ sb.append(" </connectiondefinition-instance>\n");
+ sb.append(" </connection-definition>\n");
+ sb.append(" </outbound-resourceadapter>\n");
+ sb.append(" </resourceadapter>\n");
+ sb.append("</connector>\n");
+
+ return sb.toString();
+ }
+
+ private void savePlan(String filename, Object[] args) {
+ MessageFormat mf = new MessageFormat(PLAN_TEMPLATE);
+ String plan = mf.format(args);
+
+ try {
+ File f = new File(filename);
+ f.createNewFile();
+ FileOutputStream fos = new FileOutputStream(f);
+ OutputStreamWriter osw = new OutputStreamWriter(fos);
+ Writer out = new BufferedWriter(osw);
+ out.write(plan);
+ out.flush();
+ out.close();
+ osw.close();
+ fos.close();
+ } catch (Exception e) {
+ System.out.println("ERROR: Problem creating the plan file");
+ e.printStackTrace();
+ }
+ }
+
+ public void deployPlan(Object[] args) {
+ savePlan(PLAN_FILE, args);
+ deployPlan(new File(MODULE_FILE), new File(PLAN_FILE));
+ }
+
+ public void deployPlan(File moduleFile, File planFile) {
+ try {
+ Kernel kernel = KernelRegistry.getSingleKernel();
+ List list = (List) kernel.invoke(DEPLOYER_NAME, DEPLOY_METHOD,
+ new Object[] {moduleFile, planFile}, DEPLOYER_ARGS);
+ System.out.println("Deployed: " + moduleFile + " : " + planFile);
+ // start installed app/s
+ int size = list.size();
+ for (int i = 0; i < size; i++) {
+ String config = (String) list.get(i);
+ //URI configID = new URI(config);
+ //kernel.startConfiguration(configID);
+ ConfigurationManager configurationManager = ConfigurationUtil
+ .getConfigurationManager(kernel);
+ ObjectName configName = configurationManager.load(URI
+ .create(config));
+
+ kernel.startRecursiveGBean(configName);
+ }
+ } catch (DeploymentException e) {
+ StringBuffer buf = new StringBuffer(256);
+ Throwable cause = e;
+ while (cause != null) {
+ buf.append(cause.getMessage());
+ buf.append(LINE_SEP);
+ cause = cause.getCause();
+ }
+ System.out
+ .println("ERROR: Problem deploying the ActiveMQ connector: "
+ + buf.toString());
+ e.printStackTrace();
+ } catch (URISyntaxException e) {
+ System.out
+ .println("ERROR: Newly installed app has invalid config ID");
+ e.printStackTrace();
+ } catch (Exception e) {
+ System.out.println("ERROR: Problem creating the datasource");
+ e.printStackTrace();
+ }
+ }
+
+ public List getDependencies() {
+ List dependencies = null;
+
+ try {
+ dependencies = getListing(REPO_FOLDER, REPO_FOLDER
+ .getCanonicalPath());
+ Collections.sort(dependencies);
+ } catch (Exception e) {
+ System.out.println("ERROR: Problem getting dependencies");
+ e.printStackTrace();
+ }
+
+ return dependencies;
+ }
+
+ private List getListing(File dir, String basepath)
+ throws java.io.IOException {
+ if (dir == null) {
+ throw new IllegalArgumentException("directory argument is null");
+ }
+
+ if (!dir.isDirectory()) {
+ throw new IllegalArgumentException("directory argument expected");
+ }
+
+ List listing = new ArrayList();
+
+ List ls = Arrays.asList(dir.listFiles());
+ Iterator iter = ls.iterator();
+
+ while (iter.hasNext()) {
+ File f = (File) iter.next();
+
+ if (f.isDirectory()) {
+ List listing1 = getListing(f, basepath);
+ listing.addAll(listing1);
+ } else {
+ listing.add(f.getCanonicalPath().substring(
+ basepath.length() + 1).replace('\\', '/'));
+ }
+ }
+ return listing;
+ }
+
+}
\ No newline at end of file
Propchange: geronimo/trunk/sandbox/console-standard/src/java/org/apache/geronimo/console/jmsmanager/activemqCF/ActiveMQConnectorHelper.java
------------------------------------------------------------------------------
svn:eol-style = native