我一直在這個問題上幾天,和它的駕駛我瘋了。嵌入式引導Jboss的數據源驅動程序問題
我有一塊有些遺留代碼,使用JBoss 4.2.3。我最近將項目轉換爲Maven進行依賴管理,但爲項目編寫的單元測試需要數據源。當我禁用測試中,程序工作得很好,但是當我使測試,它拋出如下:
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
我已經在POM文件中列出的內嵌JBoss的依賴。
<dependency>
<groupId>org.jboss.embedded</groupId>
<artifactId>jboss-embedded-all</artifactId>
<version>beta3.SP12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.embedded</groupId>
<artifactId>jboss-embedded</artifactId>
<version>beta3.SP12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.embedded</groupId>
<artifactId>hibernate-all</artifactId>
<version>beta3.SP12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.embedded</groupId>
<artifactId>thirdparty-all</artifactId>
<version>beta3.SP12</version>
<scope>test</scope>
</dependency>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<additionalClasspathElements>
<additionalClasspathElement>src/test/bootstrap</additionalClasspathElement>
</additionalClasspathElements>
<forkMode>once</forkMode>
<argLine>-Dsun.lang.ClassLoader.allowArraySyntax=true</argLine>
<includes>
<include>**/*Test.java</include>
</includes>
<skip>false</skip>
</configuration>
</plugin>
在src/test/bootstrap/deploy我已經放置了dev-ds.xml文件,它正在被容器拾取。
Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=jdbc/theDS' to JNDI name 'java:jdbc/theDS'
我的DEV-DS文件看起來像這樣(有一些混淆,請原諒拼寫錯誤)
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/theDS</jndi-name>
<connection-url>jdbc:oracle:thin:@xxx.xxx.xxx:1521:DEVDB</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>user</user-name>
<password>password</password>
</local-tx-datasource>
</datasources>
實際測試本身使用到的Mockito嘗試獲得數據源。
@BeforeClass
public static void setUpClass() throws Exception
{
if(! containerRunning)
{
Bootstrap bootstrap = Bootstrap.getInstance();
bootstrap.bootstrap();
containerRunning = true;
}
}
@Before
public void setUp()
{
MyDAO dao = spy(new MyDAO());
try
{
InitialContext ctx = new InitialContext();
dao.datasource = (DataSource) ctx.lookup("java:jdbc/theDS");
Connection conn = dao.datasource.getConnection(); //bang, we're dead
}
例外:
Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: oracle.jdbc.driver.OracleDriver; - nested throwable: (java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver)); - nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: oracle.jdbc.driver.OracleDriver; - nested throwable: (java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver)
正如我提到的,代碼工作時,它的運行,所以我知道ojdbc6.jar位於$ {} jboss.dir /服務器/默認/庫。但是可以肯定的是,我嘗試將它添加到構建路徑中,並且我嘗試了Eclipse中的「順序和導出」,但都沒有成功。我正在用盡想法。如果我錯過了任何東西,請告訴我。