001: /*
002:
003: Derby - Class org.apache.derby.jdbc.ClientXADataSource40
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derby.jdbc;
023:
024: import java.sql.SQLException;
025: import javax.sql.DataSource;
026: import javax.sql.XAConnection;
027: import org.apache.derby.client.ClientXAConnection40;
028: import org.apache.derby.client.am.ClientMessageId;
029: import org.apache.derby.client.am.SqlException;
030: import org.apache.derby.client.net.NetLogWriter;
031: import org.apache.derby.shared.common.reference.SQLState;
032:
033: /**
034: * <p>
035: * This is Derby's network XADataSource for use with JDBC4.0.
036: * </p>
037: * An XADataSource is a factory for XAConnection objects. It represents a
038: * RM in a DTP environment. An object that implements the XADataSource
039: * interface is typically registered with a JNDI service provider.
040: * <P>
041: * ClientXADataSource40 supports the JDBC 4.0 specification
042: * for the J2SE 6.0 Java Virtual Machine environment. Use ClientXADataSource
043: * if your application runs in the following environments:
044: * <UL>
045: * <LI> JDBC 3.0 - Java 2 - JDK 1.4, J2SE 5.0
046: * <LI> JDBC 2.0 - Java 2 - JDK 1.2,1.3
047: * </UL>
048: *
049: * <P>ClientXADataSource40 is serializable and referenceable.</p>
050: *
051: * <P>See ClientDataSource40 for DataSource properties.</p>
052: */
053: public class ClientXADataSource40 extends ClientXADataSource {
054:
055: /**
056: * creates a jdbc4.0 XAConnection
057: * @param user
058: * @param password
059: * @return XAConnection
060: */
061: public XAConnection getXAConnection(String user, String password)
062: throws SQLException {
063: try {
064: NetLogWriter dncLogWriter = (NetLogWriter) super
065: .computeDncLogWriterForNewConnection("_xads");
066: return new ClientXAConnection40(this , dncLogWriter, user,
067: password);
068: } catch (SqlException se) {
069: throw se.getSQLException();
070: }
071: }
072:
073: /**
074: * Returns false unless <code>interfaces</code> is implemented
075: *
076: * @param interfaces a Class defining an interface.
077: * @return true if this implements the interface or
078: * directly or indirectly wraps an object
079: * that does.
080: * @throws java.sql.SQLException if an error occurs while determining
081: * whether this is a wrapper for an object
082: * with the given interface.
083: */
084: public boolean isWrapperFor(Class<?> interfaces)
085: throws SQLException {
086: return interfaces.isInstance(this );
087: }
088:
089: /**
090: * Returns <code>this</code> if this class implements the interface
091: *
092: * @param interfaces a Class defining an interface
093: * @return an object that implements the interface
094: * @throws java.sql.SQLExption if no object if found that implements the
095: * interface
096: */
097: public <T> T unwrap(java.lang.Class<T> interfaces)
098: throws SQLException {
099: try {
100: return interfaces.cast(this );
101: } catch (ClassCastException cce) {
102: throw new SqlException(null, new ClientMessageId(
103: SQLState.UNABLE_TO_UNWRAP), interfaces)
104: .getSQLException();
105: }
106: }
107: }
|