You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by te...@apache.org on 2007/05/11 22:51:47 UTC
svn commit: r537286 - in /harmony/enhanced/classlib/trunk: depends/files/
make/ modules/sql/src/main/java/javax/sql/rowset/spi/
modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/
Author: tellison
Date: Fri May 11 13:51:46 2007
New Revision: 537286
URL: http://svn.apache.org/viewvc?view=rev&rev=537286
Log:
Apply modified patch for HARMONY-3828 ([classlib][sql] 3 new methods in javax.sql.rowset.spi.SyncFactory)
Added:
harmony/enhanced/classlib/trunk/depends/files/rowset.properties (with props)
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java (with props)
Modified:
harmony/enhanced/classlib/trunk/make/build-java.xml
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/SyncFactory.java
harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties
Added: harmony/enhanced/classlib/trunk/depends/files/rowset.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/depends/files/rowset.properties?view=auto&rev=537286
==============================================================================
--- harmony/enhanced/classlib/trunk/depends/files/rowset.properties (added)
+++ harmony/enhanced/classlib/trunk/depends/files/rowset.properties Fri May 11 13:51:46 2007
@@ -0,0 +1,23 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You 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.
+
+
+rowset.provider.classname.0=
+rowset.provider.vendor.0=
+rowset.provider.version.0=
+
+rowset.provider.classname.1=
+rowset.provider.vendor.1=
+rowset.provider.version.1=
Propchange: harmony/enhanced/classlib/trunk/depends/files/rowset.properties
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/make/build-java.xml
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/make/build-java.xml?view=diff&rev=537286&r1=537285&r2=537286
==============================================================================
--- harmony/enhanced/classlib/trunk/make/build-java.xml (original)
+++ harmony/enhanced/classlib/trunk/make/build-java.xml Fri May 11 13:51:46 2007
@@ -280,6 +280,12 @@
<include name="net.properties" />
</fileset>
</copy>
+
+ <copy todir="${hy.jdk}/jre/lib">
+ <fileset dir="${depends.files}">
+ <include name="rowset.properties" />
+ </fileset>
+ </copy>
</target>
Added: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java?view=auto&rev=537286
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java (added)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java Fri May 11 13:51:46 2007
@@ -0,0 +1,98 @@
+package javax.sql.rowset.spi;
+
+import javax.sql.RowSetReader;
+import javax.sql.RowSetWriter;
+
+import org.apache.harmony.sql.internal.nls.Messages;
+
+class ProviderImpl extends SyncProvider {
+
+ private String className;
+
+ private String vendor;
+
+ private String version;
+
+ private SyncProvider impl;
+
+ private String errMsg;
+
+ public ProviderImpl() {
+ // default constructor
+ }
+
+ public ProviderImpl(String name) {
+ className = name;
+
+ try {
+ Class<?> implClass = Class.forName(className);
+ impl = (SyncProvider) implClass.newInstance();
+ } catch (ClassNotFoundException e) {
+ errMsg = Messages.getString("sql.40", className); //$NON-NLS-1$
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+
+ public ProviderImpl(String name, String vendor, String version) {
+ this(name);
+
+ this.vendor = vendor;
+ this.version = version;
+ }
+
+ @Override
+ public int getDataSourceLock() throws SyncProviderException {
+ checkClassNameValid();
+ return impl.getDataSourceLock();
+ }
+
+ @Override
+ public int getProviderGrade() {
+ return impl == null ? 0 : impl.getProviderGrade();
+ }
+
+ @Override
+ public String getProviderID() {
+ return impl == null ? className : impl.getProviderID();
+ }
+
+ @Override
+ public RowSetReader getRowSetReader() {
+ return impl == null ? null : impl.getRowSetReader();
+ }
+
+ @Override
+ public RowSetWriter getRowSetWriter() {
+ return impl == null ? null : impl.getRowSetWriter();
+ }
+
+ @Override
+ public String getVendor() {
+ return impl == null ? vendor : impl.getVendor();
+ }
+
+ @Override
+ public String getVersion() {
+ return impl == null ? version : impl.getVersion();
+ }
+
+ @Override
+ public void setDataSourceLock(int dataSourceLock)
+ throws SyncProviderException {
+ checkClassNameValid();
+ impl.setDataSourceLock(dataSourceLock);
+ }
+
+ @Override
+ public int supportsUpdatableView() {
+ return impl == null ? 0 : impl.supportsUpdatableView();
+ }
+
+ private void checkClassNameValid() throws SyncProviderException {
+ if (null == impl) {
+ throw new SyncProviderException(errMsg);
+ }
+ }
+
+}
Propchange: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/ProviderImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/SyncFactory.java
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/SyncFactory.java?view=diff&rev=537286&r1=537285&r2=537286
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/SyncFactory.java (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/javax/sql/rowset/spi/SyncFactory.java Fri May 11 13:51:46 2007
@@ -17,41 +17,162 @@
package javax.sql.rowset.spi;
+import java.io.FileInputStream;
+import java.io.IOException;
import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Properties;
import java.util.logging.Level;
import java.util.logging.Logger;
+
+import javax.naming.Binding;
import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+
+import org.apache.harmony.sql.internal.nls.Messages;
+/**
+ * A singleton factory class that generates SyncProvider instances. There are
+ * three places to search SyncProviders: system properties, resource files and
+ * the JNDI context.
+ *
+ * Applications can also use it to add and remove SyncProviders at runtime. By
+ * default there are two providers offered by RI:
+ * com.sun.rowset.providers.RIOptimisticProvider and
+ * com.sun.rowset.providers.RIXMLProvider. The former is the default provider
+ * for RowSet that does not specify any provider while the latter is usually
+ * used for WebRowSet instances.
+ *
+ */
public class SyncFactory {
public static String ROWSET_SYNC_PROVIDER = "rowset.provider.classname"; //$NON-NLS-1$
public static String ROWSET_SYNC_VENDOR = "rowset.provider.vendor"; //$NON-NLS-1$
public static String ROWSET_SYNC_PROVIDER_VERSION = "rowset.provider.version"; //$NON-NLS-1$
-
+
+ private static SyncFactory instance = new SyncFactory();
+
+ private static final String ROWSET_PROPERTIES = "rowset.properties"; //$NON-NLS-1$
+
+ private static Hashtable<String, SyncProvider> providers = new Hashtable<String, SyncProvider>();
+
+ private static Context ctx;
+
+ private static String resLocation;
+
+ private static boolean initialized;
+
+ static {
+ // the properties file is located at ${java.home}/lib/rowset.properties
+ // In RI, it is in ${java.home}/lib/resources.jar/rowset.properties
+ resLocation = new StringBuilder(System.getProperty("java.home")).append( //$NON-NLS-1$
+ System.getProperty("file.separator")).append("lib").append( //$NON-NLS-1$ //$NON-NLS-2$
+ System.getProperty("file.separator")).append(ROWSET_PROPERTIES) //$NON-NLS-1$
+ .toString();
+ }
+
+ private static String getProviderProperties(Properties prop, String inital,
+ int index) {
+ StringBuilder builder = new StringBuilder(inital);
+ builder.append("."); //$NON-NLS-1$
+ builder.append(index);
+
+ return prop.getProperty(builder.toString());
+ }
+
+ private static Enumeration<SyncProvider> getRegisteredProvidersImpl() {
+ if (!initialized) {
+ // 1. load from System property
+ String sysProvider = System.getProperty(ROWSET_SYNC_PROVIDER);
+ if (sysProvider != null) {
+ providers.put(sysProvider, new ProviderImpl(sysProvider));
+ }
+
+ // 2. looks in the resource file
+ Properties rowsetProp = new Properties();
+ try {
+ FileInputStream resInput = new FileInputStream(resLocation);
+ rowsetProp.load(resInput);
+ resInput.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ int index = 0;
+ while (true) {
+ String className = getProviderProperties(rowsetProp,
+ ROWSET_SYNC_PROVIDER, index);
+ if (null == className) {
+ break;
+ }
+
+ String vendor = getProviderProperties(rowsetProp,
+ ROWSET_SYNC_VENDOR, index);
+ String version = getProviderProperties(rowsetProp,
+ ROWSET_SYNC_PROVIDER_VERSION, index);
+ providers.put(className, new ProviderImpl(className, vendor,
+ version));
+ index++;
+ }
+
+ // 3. checks the JNDI context that has been set
+ if (ctx != null) {
+ try {
+ NamingEnumeration<Binding> bindings = ctx.listBindings("");
+ while (bindings.hasMore()) {
+ Binding bind = bindings.next();
+ providers.put(bind.getName(), (SyncProvider) bind
+ .getObject());
+ }
+ } catch (NamingException e) {
+ // ignore
+ }
+ }
+ initialized = true;
+ }
+ return providers.elements();
+ }
+
// This class does not have public constructor
private SyncFactory() {
+ // do nothing
}
- public static void registerProvider(String providerID) throws SyncFactoryException {
+ public static void registerProvider(String providerID)
+ throws SyncFactoryException {
throw new UnsupportedOperationException();
}
+ /**
+ * Answers the singleton instance of the SyncFactory.
+ *
+ * @return - the singleton instance of the SyncFactory.
+ */
public static SyncFactory getSyncFactory() {
- throw new UnsupportedOperationException();
+ return instance;
}
- public static void unregisterProvider(String providerID) throws SyncFactoryException {
+ public static void unregisterProvider(String providerID)
+ throws SyncFactoryException {
throw new UnsupportedOperationException();
}
- public static SyncProvider getInstance(String providerID) throws SyncFactoryException {
+ public static SyncProvider getInstance(String providerID)
+ throws SyncFactoryException {
throw new UnsupportedOperationException();
}
+ /**
+ * Answers the collection of SyncProvider instances that can be retrieved.
+ * RowSet implementation is able to use any member in this enumeration.
+ *
+ * @return - the collection of SyncProvider registered in SyncFactory.
+ * @throws SyncFactoryException
+ */
public static Enumeration<SyncProvider> getRegisteredProviders()
throws SyncFactoryException {
- throw new UnsupportedOperationException();
+ return getRegisteredProvidersImpl();
}
public static void setLogger(Logger logger) {
@@ -66,7 +187,19 @@
throw new UnsupportedOperationException();
}
+ /**
+ * Sets the JNDI context from which the implementation of SyncProvider can
+ * be got.
+ *
+ * @param ctx -
+ * the JNDI context
+ * @throws SyncFactoryException -
+ * if the given JNDI context is null
+ */
public static void setJNDIContext(Context ctx) throws SyncFactoryException {
- throw new UnsupportedOperationException();
+ if (null == ctx) {
+ throw new SyncFactoryException(Messages.getString("sql.41")); //$NON-NLS-1$
+ }
+ SyncFactory.ctx = ctx;
}
}
Modified: harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties
URL: http://svn.apache.org/viewvc/harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties?view=diff&rev=537286&r1=537285&r2=537286
==============================================================================
--- harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties (original)
+++ harmony/enhanced/classlib/trunk/modules/sql/src/main/java/org/apache/harmony/sql/internal/nls/messages.properties Fri May 11 13:51:46 2007
@@ -47,7 +47,9 @@
sql.30=Invalid column display size. Cannot be less than zero
sql.31=Invalid precision value. Cannot be less than zero
sql.32=Invalid scale size. Cannot be less than zero
+sql.40=ClassNotFoundException: {0}
+sql.41=Invalid JNDI context supplied
sql.33=Cannot instantiate a SQLOutputImpl instance with null parameters
sql.34=Cannot instantiate a SQLInputImpl instance with null parameters
sql.35=SQLInputImpl exception: Invalid read position
-sql.37=Operation not supported
\ No newline at end of file
+sql.37=Operation not supported