You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gk...@apache.org on 2007/09/18 01:01:26 UTC
svn commit: r576620 - in
/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon:
SpringToAvalonDataSourceBridge.java SpringToAvalonDataSourceWrapper.java
Author: gkossakowski
Date: Mon Sep 17 16:01:25 2007
New Revision: 576620
URL: http://svn.apache.org/viewvc?rev=576620&view=rev
Log:
COCOON-2083: Implemented wrapping bean that can act as DataSource and DataSourceComponent at the same time. Removed similar wrapper from SpringToAvalonDataSourceBridge.
Added:
cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java (with props)
Modified:
cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceBridge.java
Modified: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceBridge.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceBridge.java?rev=576620&r1=576619&r2=576620&view=diff
==============================================================================
--- cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceBridge.java (original)
+++ cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceBridge.java Mon Sep 17 16:01:25 2007
@@ -1,14 +1,11 @@
package org.apache.cocoon.databases.bridge.spring.avalon;
-import java.sql.Connection;
-import java.sql.SQLException;
+import java.util.HashSet;
import java.util.Map;
+import java.util.Set;
import javax.sql.DataSource;
-import org.apache.avalon.excalibur.datasource.DataSourceComponent;
-import org.apache.avalon.framework.configuration.Configuration;
-import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.service.ServiceException;
import org.apache.avalon.framework.service.ServiceSelector;
@@ -21,41 +18,39 @@
public class SpringToAvalonDataSourceBridge implements ServiceSelector {
private ServiceSelector dataSourceSelector;
private Map springDataSources;
+
+ private Set sourcesFromDataSourceSelector;
+
+ public SpringToAvalonDataSourceBridge() {
+ sourcesFromDataSourceSelector = new HashSet();
+ }
public boolean isSelectable(Object policy) {
return dataSourceSelector.isSelectable(policy) || springDataSources.containsKey(policy);
}
public void release(Object object) {
- if (object instanceof DataSourceComponent)
+ if (sourcesFromDataSourceSelector.contains(object)) {
+ sourcesFromDataSourceSelector.remove(object);
dataSourceSelector.release(object);
+ }
}
public Object select(Object policy) throws ServiceException {
- if (dataSourceSelector.isSelectable(policy))
- return dataSourceSelector.select(policy);
- else if (springDataSources.containsKey(policy))
- return new SpringDataSourceWrapper((DataSource) springDataSources.get(policy));
- else
- return null;
- }
-
- private class SpringDataSourceWrapper implements DataSourceComponent {
-
- private DataSource springDataSource;
-
- private SpringDataSourceWrapper(DataSource springDataSource) {
- this.springDataSource = springDataSource;
- }
-
- public Connection getConnection() throws SQLException {
- return springDataSource.getConnection();
+ if (dataSourceSelector.isSelectable(policy)) {
+ Object object = dataSourceSelector.select(policy);
+ sourcesFromDataSourceSelector.add(object);
+ return object;
}
-
- public void configure(Configuration configuration) throws ConfigurationException {
- //do nothing
+ else if (springDataSources.containsKey(policy)) {
+ Object object = (DataSource) springDataSources.get(policy);
+ if (!(object instanceof SpringToAvalonDataSourceWrapper))
+ throw new ClassCastException("Bean with key '" + policy + "' is not SpringToAvalonDataSourceWrapper class. " +
+ "Only this wrapper is allowed when you want to use DataSources defined in Spring way in Avalon components");
+ return object;
}
-
+ else
+ return null;
}
public Map getSpringDataSources() {
Added: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java
URL: http://svn.apache.org/viewvc/cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java?rev=576620&view=auto
==============================================================================
--- cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java (added)
+++ cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java Mon Sep 17 16:01:25 2007
@@ -0,0 +1,122 @@
+/**
+ *
+ */
+package org.apache.cocoon.databases.bridge.spring.avalon;
+
+import java.io.PrintWriter;
+import java.sql.Connection;
+import java.sql.SQLException;
+
+import javax.sql.DataSource;
+
+import org.apache.avalon.excalibur.datasource.DataSourceComponent;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+
+/**
+ * Wrapper bean for {@link DataSource} that implements {@link DataSourceComponent} additionally in order
+ * to provide access to DataSources for Avalon components.
+ *
+ */
+public class SpringToAvalonDataSourceWrapper implements DataSource, DataSourceComponent {
+
+ private DataSource wrappedBean;
+
+ /**
+ * @return the wrappedBean
+ */
+ public DataSource getWrappedBean() {
+ return wrappedBean;
+ }
+
+ /**
+ * @param wrappedBean the wrappedBean to set
+ */
+ public void setWrappedBean(DataSource wrappedBean) {
+ this.wrappedBean = wrappedBean;
+ }
+
+ /**
+ * @return
+ * @throws SQLException
+ * @see javax.sql.DataSource#getConnection()
+ */
+ public Connection getConnection() throws SQLException {
+ return wrappedBean.getConnection();
+ }
+
+ /**
+ * @param username
+ * @param password
+ * @return
+ * @throws SQLException
+ * @see javax.sql.DataSource#getConnection(java.lang.String, java.lang.String)
+ */
+ public Connection getConnection(String username, String password) throws SQLException {
+ return wrappedBean.getConnection(username, password);
+ }
+
+ /**
+ * @return
+ * @throws SQLException
+ * @see javax.sql.CommonDataSource#getLoginTimeout()
+ */
+ public int getLoginTimeout() throws SQLException {
+ return wrappedBean.getLoginTimeout();
+ }
+
+ /**
+ * @return
+ * @throws SQLException
+ * @see javax.sql.CommonDataSource#getLogWriter()
+ */
+ public PrintWriter getLogWriter() throws SQLException {
+ return wrappedBean.getLogWriter();
+ }
+
+ /**
+ * @param seconds
+ * @throws SQLException
+ * @see javax.sql.CommonDataSource#setLoginTimeout(int)
+ */
+ public void setLoginTimeout(int seconds) throws SQLException {
+ wrappedBean.setLoginTimeout(seconds);
+ }
+
+ /**
+ * @param out
+ * @throws SQLException
+ * @see javax.sql.CommonDataSource#setLogWriter(java.io.PrintWriter)
+ */
+ public void setLogWriter(PrintWriter out) throws SQLException {
+ wrappedBean.setLogWriter(out);
+ }
+
+ /**
+ * @param iface
+ * @return
+ * @throws SQLException
+ * @see java.sql.Wrapper#isWrapperFor(java.lang.Class)
+ */
+ public boolean isWrapperFor(Class iface) throws SQLException {
+ throw new UnsupportedOperationException("This operation is not supported because we need to stay compatible " +
+ "with Java 1.4 where isWrapperFor() is not defined");
+ }
+
+ /**
+ * @param iface
+ * @return
+ * @throws SQLException
+ * @see java.sql.Wrapper#unwrap(java.lang.Class)
+ */
+ public Object unwrap(Class iface) throws SQLException {
+ //I hope that nothing will call this method (GK)
+ throw new UnsupportedOperationException("This operation is not supported because we need to stay compatible " +
+ "with Java 1.4 where unwrap() is not defined");
+ }
+
+ public void configure(Configuration arg0) throws ConfigurationException {
+ //do nothing
+ }
+
+}
Propchange: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cocoon/trunk/blocks/cocoon-databases/cocoon-databases-bridge/src/main/java/org/apache/cocoon/databases/bridge/spring/avalon/SpringToAvalonDataSourceWrapper.java
------------------------------------------------------------------------------
svn:mime-type = text/plain