| /* |
| * Copyright (c) 2007, 2009, 2011, 2012 Eike Stepper (Berlin, Germany) and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Eike Stepper - initial API and implementation |
| */ |
| package org.eclipse.net4j.jms.server.internal.jdbc; |
| |
| import org.eclipse.net4j.db.IDBAdapter; |
| import org.eclipse.net4j.jms.internal.server.store.AbstractStore; |
| import org.eclipse.net4j.jms.internal.server.store.StoreException; |
| import org.eclipse.net4j.jms.server.IStoreTransaction; |
| |
| import javax.sql.DataSource; |
| |
| import java.sql.Connection; |
| import java.sql.SQLException; |
| |
| /** |
| * @author Eike Stepper |
| */ |
| public class JDBCStore extends AbstractStore |
| { |
| private static final String STORE_TYPE = "JDBC"; //$NON-NLS-1$ |
| |
| private IDBAdapter dbAdapter; |
| |
| private DataSource dataSource; |
| |
| public JDBCStore(IDBAdapter dbAdapter, DataSource dataSource) |
| { |
| super(STORE_TYPE); |
| if (dbAdapter == null) |
| { |
| throw new IllegalArgumentException("dbAdapter == null"); //$NON-NLS-1$ |
| } |
| |
| if (dataSource == null) |
| { |
| throw new IllegalArgumentException("dataSource == null"); //$NON-NLS-1$ |
| } |
| |
| this.dbAdapter = dbAdapter; |
| this.dataSource = dataSource; |
| } |
| |
| public IDBAdapter getDBAdapter() |
| { |
| return dbAdapter; |
| } |
| |
| public DataSource getDataSource() |
| { |
| return dataSource; |
| } |
| |
| public Connection getConnection() |
| { |
| try |
| { |
| return dataSource.getConnection(); |
| } |
| catch (SQLException ex) |
| { |
| throw new StoreException(ex); |
| } |
| } |
| |
| public void initDatabase(String instanceID) |
| { |
| JMSSchema.INSTANCE.create(dbAdapter, dataSource); |
| // TODO Store instanceID |
| } |
| |
| public IStoreTransaction startTransaction() |
| { |
| try |
| { |
| Connection connection = getConnection(); |
| connection.setAutoCommit(false); |
| return new JDBCTransaction(this, connection); |
| } |
| catch (SQLException ex) |
| { |
| throw new StoreException(ex); |
| } |
| } |
| |
| public void commitTransaction(IStoreTransaction transaction) |
| { |
| JDBCTransaction jdbcTransaction = (JDBCTransaction)transaction; |
| try |
| { |
| Connection connection = jdbcTransaction.getConnection(); |
| connection.commit(); |
| } |
| catch (SQLException ex) |
| { |
| throw new StoreException(ex); |
| } |
| finally |
| { |
| jdbcTransaction.dispose(); |
| } |
| } |
| |
| public void rollbackTransaction(IStoreTransaction transaction) |
| { |
| JDBCTransaction jdbcTransaction = (JDBCTransaction)transaction; |
| try |
| { |
| Connection connection = jdbcTransaction.getConnection(); |
| connection.rollback(); |
| } |
| catch (SQLException ex) |
| { |
| throw new StoreException(ex); |
| } |
| finally |
| { |
| jdbcTransaction.dispose(); |
| } |
| } |
| } |