/* * 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. */ package org.superbiz; import org.jboss.arquillian.container.test.api.Deployment; import org.jboss.arquillian.junit.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import javax.annotation.Resource; import javax.ejb.EJB; import javax.ejb.Stateless; import javax.sql.DataSource; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.SQLException; @RunWith(Arquillian.class) public class AlternateDataSourceTest { @Deployment public static WebArchive createDeployment() { return ShrinkWrap.create(WebArchive.class, "test.war") .addClasses(DataSourceTester.class) .addAsResource(new ClassLoaderAsset("META-INF/beans.xml"), "META-INF/beans.xml"); //We are using src/test/conf/tomee.xml, but this also works - .addAsResource(new ClassLoaderAsset("META-INF/resources.xml"), "META-INF/resources.xml"); //Or even using a persistence context - .addAsResource(new ClassLoaderAsset("META-INF/persistence.xml"), "META-INF/persistence.xml"); } @EJB private DataSourceTester tester; @Test public void testDataSourceOne() throws Exception { Assert.assertEquals("Should be using 10.10.1.1 - (1458268)", "10.10.1.1 - (1458268)", tester.getOne()); } @Test public void testDataSourceTwo() throws Exception { Assert.assertEquals("Should be using 10.9.1.0 - (1344872)", "10.9.1.0 - (1344872)", tester.getTwo()); } @Test public void testDataSourceBoth() throws Exception { Assert.assertEquals("Should be using 10.10.1.1 - (1458268)|10.9.1.0 - (1344872)", "10.10.1.1 - (1458268)|10.9.1.0 - (1344872)", tester.getBoth()); } @Stateless public static class DataSourceTester { @Resource(name = "DatabaseOne") DataSource dataSourceOne; @Resource(name = "DatabaseTwo") DataSource dataSourceTwo; public String getOne() throws Exception { return getVersion(dataSourceOne); } public String getTwo() throws Exception { return getVersion(dataSourceTwo); } public String getBoth() throws Exception { return getOne() + "|" + getTwo(); } private static String getVersion(final DataSource ds) throws SQLException { Connection con = null; try { con = ds.getConnection(); final DatabaseMetaData md = con.getMetaData(); return md.getDriverVersion(); } finally { if (con != null) { con.close(); } } } } }