Android Open Source - jepldroid J E P L Connection Impl






From Project

Back to project page jepldroid.

License

The source code is released under:

Apache License

If you think the Android project jepldroid listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
   Copyright 2011 Jose Maria Arranz Santamaria
//from w w  w  . j  a v a2s .  c om
   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 jepl.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

import jepl.JEPLConnection;
import jepl.JEPLConnectionListener;
import jepl.JEPLDataSource;
import jepl.JEPLTransaction;

/**
 *
 * @author jmarranz
 */
public abstract class JEPLConnectionImpl implements JEPLConnection
{
    protected JEPLDataSourceImpl ds;
    protected Connection con;
    protected Map<String,JEPLPreparedStatementImpl> cachedStatements = null;
    protected LinkedList<JEPLTaskExecContextInConnectionImpl<?>> taskList = new LinkedList<JEPLTaskExecContextInConnectionImpl<?>>();
    protected JEPLUserDataMonoThreadImpl userData = new JEPLUserDataMonoThreadImpl();
    protected JEPLCurrentTransactionImpl currentTxn;

    public JEPLConnectionImpl(JEPLDataSourceImpl ds,Connection con)
    {
        this.ds = ds;
        this.con = con;
    }

    public String[] getUserDataNames()
    {
        return userData.getUserDataNames();
    }

    public boolean containsName(String name)
    {
        return userData.containsName(name);
    }

    public Object getUserData(String name)
    {
        return userData.getUserData(name);
    }

    public <T> T getUserData(String name, Class<T> returnType)
    {
        return userData.getUserData(name, returnType);
    }

    public Object setUserData(String name, Object value)
    {
        return userData.setUserData(name, value);
    }

    public Object removeUserData(String name)
    {
        return userData.removeUserData(name);
    }

    public <T> T removeUserData(String name, Class<T> returnType)
    {
        return userData.removeUserData(name, returnType);
    }

    public JEPLDataSource getJEPLDataSource()
    {
        return ds;
    }

    public JEPLDataSourceImpl getJEPLDataSourceImpl()
    {
        return ds;
    }

    public Connection getConnection()
    {
        return con;
    }

    public JEPLTransaction getJEPLTransaction()
    {
        return getJEPLCurrentTransactionImpl();
    }

    public JEPLCurrentTransactionImpl getJEPLCurrentTransactionImpl()
    {
        return currentTxn;
    }

    public boolean isEmptyOfJEPLTasks()
    {
        return taskList.isEmpty();
    }

    public JEPLTaskExecContextInConnectionImpl<?> getCurrentJEPLTaskContext()
    {
        return taskList.getFirst(); // El ltimo insertado realmente es el primero de la lista (se us push)
    }

    public JEPLTaskExecContextInConnectionImpl<?> popJEPLTaskExecContex()
    {
        return taskList.pop(); // Quita del ppio
    }

    public void pushJEPLTaskExecContex(JEPLTaskExecContextInConnectionImpl<?> task)
    {
        taskList.push(task); // Pone en el ppio
    }

    public JEPLPreparedStatementImpl prepareJEPLStatement(JEPLDALImpl dal,String sql,int autoGeneratedKeys) throws SQLException
    {
        // http://download.oracle.com/javase/tutorial/jdbc/basics/prepared.html
        
        JEPLDataSourceImpl ds = getJEPLDataSourceImpl();
        if (ds.isPreparedStatementCached())
        {
            if (cachedStatements == null) cachedStatements = new HashMap<String,JEPLPreparedStatementImpl>();
            String key = autoGeneratedKeys + "-" + sql;
            JEPLPreparedStatementImpl jstmt = cachedStatements.get(key);
            if (jstmt != null)
            {
                boolean closed = false;
                if (!ds.isC3PO())
                {
                    try { closed = jstmt.getPreparedStatement().isClosed(); } catch(AbstractMethodError ex) { closed = false; ds.setIsC3PO(true);  } // Caso de C3PO 0.9.1.2 que no implementa isClosed()
                }
                
                if (closed)  // As nos aseguramos que no utilizamos un statement cerrado
                    cachedStatements.remove(jstmt.getKey());  // No vale la descartamos
                else 
                    return jstmt;
            }

            PreparedStatement stmt = prepareStatement(sql, autoGeneratedKeys);
            jstmt = createJEPLPreparedStatement(dal,stmt,key);
            cachedStatements.put(key,jstmt);
            return jstmt;
        }
        else
        {
            PreparedStatement stmt = prepareStatement(sql, autoGeneratedKeys);
            return createJEPLPreparedStatement(dal,stmt,null);
        }
    }

    protected PreparedStatement prepareStatement(String sql,int autoGeneratedKeys) throws SQLException
    {
      return con.prepareStatement(sql, autoGeneratedKeys);
    }

    protected JEPLPreparedStatementImpl createJEPLPreparedStatement(JEPLDALImpl dal,PreparedStatement stmt,String key) throws SQLException
    {
      return new JEPLPreparedStatementDefaultImpl(this,dal,stmt,key);
    }
    
    public void releaseJEPLPreparedStatement(JEPLPreparedStatementImpl jstmt) throws SQLException
    {
        PreparedStatement stmt = jstmt.getPreparedStatement();
        if (getJEPLDataSourceImpl().isPreparedStatementCached())
        {

            //try
            //{
                stmt.clearParameters(); // As queda limpio para el siguiente uso y no se mezclan parmetros (muy raro porque el nmero es siempre el mismo pero por si acaso)
            //}
            //catch(SQLException ex)
            //{
                // Parece que MySQL cierra automticamente el PreparedStatement si se supera el lmite interno de PreparedStatements cacheado
                // https://community.jboss.org/thread/170092?_sscc=t
                //cachedStatements.remove(jstmt.getKey());
            //}
        }
        else
        {
            stmt.close();
        }
    }

    public void closePreparedStatements() throws SQLException
    {
        if (cachedStatements == null) return;
        for(Map.Entry<String,JEPLPreparedStatementImpl> entry : cachedStatements.entrySet())
        {
            JEPLPreparedStatementImpl stmt = entry.getValue();
            stmt.getPreparedStatement().close();
        }
        this.cachedStatements = null;
    }

    public <T> JEPLConnectionListener<T> getJEPLConnectionListener(JEPLDALImpl dal,JEPLListenerListImpl paramListener)
    {
        JEPLConnectionListener<T> listener;
        if (paramListener != null)
        {
            listener = paramListener.getJEPLConnectionListener();
            if (listener != null)
                return listener;
        }
        
        // dal PUEDE ser nulo
        if (dal != null)
        {
            listener = dal.getJEPLListenerList().getJEPLConnectionListener();
            if (listener != null)
                return listener;
        }

        listener = ds.getJEPLListenerList().getJEPLConnectionListener();
        if (listener != null)
            return listener;

        return null;
    }

}




Java Source Code List

com.innowhere.jepldroidtest.JEPLDroidTestActivity.java
jepl.JEPLBootNonJTA.java
jepl.JEPLBootRoot.java
jepl.JEPLBoot.java
jepl.JEPLCachedResultSet.java
jepl.JEPLConnectionListener.java
jepl.JEPLConnection.java
jepl.JEPLDALQuery.java
jepl.JEPLDAL.java
jepl.JEPLDAOQuery.java
jepl.JEPLDAO.java
jepl.JEPLDataSource.java
jepl.JEPLException.java
jepl.JEPLListener.java
jepl.JEPLNonJTADataSource.java
jepl.JEPLParameter.java
jepl.JEPLPreparedStatementListener.java
jepl.JEPLPreparedStatement.java
jepl.JEPLResultSetDALListener.java
jepl.JEPLResultSetDAOListenerDefault.java
jepl.JEPLResultSetDAOListener.java
jepl.JEPLResultSetDAO.java
jepl.JEPLResultSet.java
jepl.JEPLRowBeanMapper.java
jepl.JEPLStatement.java
jepl.JEPLTask.java
jepl.JEPLTransactionPropagation.java
jepl.JEPLTransaction.java
jepl.JEPLTransactionalJTA.java
jepl.JEPLTransactionalNonJTA.java
jepl.JEPLUserData.java
jepl.impl.JEPLBootImpl.java
jepl.impl.JEPLBootRootImpl.java
jepl.impl.JEPLConnectionImpl.java
jepl.impl.JEPLCurrentTransactionImpl.java
jepl.impl.JEPLDALDefaultImpl.java
jepl.impl.JEPLDALImpl.java
jepl.impl.JEPLDAOImpl.java
jepl.impl.JEPLDataSourceImpl.java
jepl.impl.JEPLListenerListImpl.java
jepl.impl.JEPLPreparedStatementDefaultImpl.java
jepl.impl.JEPLPreparedStatementImpl.java
jepl.impl.JEPLStatementImpl.java
jepl.impl.JEPLTaskExecContextImpl.java
jepl.impl.JEPLTaskExecContextInConnectionImpl.java
jepl.impl.JEPLTaskOneExecWithConnectionImpl.java
jepl.impl.JEPLTaskOneExecWithConnectionWrapperImpl.java
jepl.impl.JEPLTaskOneExecutionImpl.java
jepl.impl.JEPLTaskOneExecutionWrapperImpl.java
jepl.impl.JEPLUserDataMonoThreadImpl.java
jepl.impl.JEPLUserDataMultiThreadImpl.java
jepl.impl.JEPLUtilImpl.java
jepl.impl.lex.Cursor.java
jepl.impl.lex.Identifier.java
jepl.impl.lex.JDBCParamStandardToken.java
jepl.impl.lex.JDBCParamToken.java
jepl.impl.lex.JDBCParamWithNameToken.java
jepl.impl.lex.JDBCParamWithNumberToken.java
jepl.impl.lex.OtherCharToken.java
jepl.impl.lex.SourceCode.java
jepl.impl.lex.Space.java
jepl.impl.lex.StringDoubleQuote.java
jepl.impl.lex.StringLiteral.java
jepl.impl.lex.StringSimpleQuote.java
jepl.impl.lex.TestSourceCode.java
jepl.impl.lex.TokenFilter.java
jepl.impl.lex.Token.java
jepl.impl.nonjta.JEPLBootNonJTAImpl.java
jepl.impl.nonjta.JEPLCurrentTransactionNonJTAImpl.java
jepl.impl.nonjta.JEPLNonJTAConnectionDefaultImpl.java
jepl.impl.nonjta.JEPLNonJTAConnectionImpl.java
jepl.impl.nonjta.JEPLNonJTADataSourceDefaultImpl.java
jepl.impl.nonjta.JEPLNonJTADataSourceImpl.java
jepl.impl.nonjta.JEPLTaskExecContextInConnectionNonJTAImpl.java
jepl.impl.nonjta.android.JEPLNonJTAConnectionSQLDroidImpl.java
jepl.impl.nonjta.android.JEPLNonJTADataSourceAndroidImpl.java
jepl.impl.nonjta.android.JEPLPreparedStatementSQLDroidImpl.java
jepl.impl.query.JEPLCachedResultSetImpl.java
jepl.impl.query.JEPLDALQueryImpl.java
jepl.impl.query.JEPLDAOQueryImpl.java
jepl.impl.query.JEPLParameterDecImpl.java
jepl.impl.query.JEPLParameterDecWithNameImpl.java
jepl.impl.query.JEPLParameterDecWithNumberImpl.java
jepl.impl.query.JEPLParameterImpl.java
jepl.impl.query.JEPLParameterValueImpl.java
jepl.impl.query.JEPLParameterValueNamedImpl.java
jepl.impl.query.JEPLParameterWithNameImpl.java
jepl.impl.query.JEPLParameterWithNumberImpl.java
jepl.impl.query.JEPLPropertyDescriptorImpl.java
jepl.impl.query.JEPLPropertyDescriptorJavaBeansImpl.java
jepl.impl.query.JEPLQueryParsedCacheImpl.java
jepl.impl.query.JEPLQueryParsedImpl.java
jepl.impl.query.JEPLResultSetBeanInfo.java
jepl.impl.query.JEPLResultSetDAOImpl.java
jepl.impl.query.JEPLResultSetDAOIteratorImpl.java
jepl.impl.query.JEPLResultSetDAOListenerDefaultImpl.java
jepl.impl.query.JEPLResultSetDefaultImpl.java
jepl.impl.query.JEPLResultSetImpl.java