JBoss EAP中连接池的问题

时间:2015-03-02 16:39:23

标签: java exception jboss datasource connection-pooling

我正在尝试在JDBC connection pool中实施JBoss EAP 6.4。我使用JBoss EAP 6.1+ adapter IDE中的Eclipse LunaJboss EAP management console来管理此服务器。

我的应用程序使用的数据库是Oracle 11g SE。我正在使用的JDBC jar版本是Oracle Database 12c Release 1 (12.1.0.1) JDBC Driver

以下是我遵循的步骤:

  • 将JDBC jar部署为独立应用程序。为此,我将jar放在jboss-eap-6.4\standalone\deployments目录中。然后我从eclipse重新启动服务器,我可以看到服务器自动将JDBC jar识别为符合Type 4的驱动程序。

  • 然后,我使用JBoss EAP管理控制台UI创建并配置了数据源。我能够使用UI成功测试连接。以下是用户在standalone.xml目录中的jboss-eap-6.4\standalone\configuration文件中创建的条目



<datasource jta="true" jndi-name="java:/MyWebServiceOracleDs" pool-name="MyWebService" enabled="true" use-ccm="true" statistics-enabled="true">
  <connection-url>jdbc:oracle:thin:@//myIp:1521/myDbName</connection-url>
  <driver-class>oracle.jdbc.OracleDriver</driver-class>
  <driver>ojdbc7.jar</driver>
  <pool>
    <min-pool-size>10</min-pool-size>
    <max-pool-size>50</max-pool-size>
    <prefill>true</prefill>
    <use-strict-min>true</use-strict-min>
  </pool>
  <security>
    <user-name>myUsername</user-name>
    <password>myPassword</password>
  </security>
  <validation>
    <validate-on-match>false</validate-on-match>
    <background-validation>false</background-validation>
  </validation>
  <timeout>
    <set-tx-query-timeout>false</set-tx-query-timeout>
    <blocking-timeout-millis>0</blocking-timeout-millis>
    <idle-timeout-minutes>5</idle-timeout-minutes>
    <query-timeout>0</query-timeout>
    <use-try-lock>0</use-try-lock>
    <allocation-retry>0</allocation-retry>
    <allocation-retry-wait-millis>0</allocation-retry-wait-millis>
  </timeout>
  <statement>
    <prepared-statement-cache-size>32</prepared-statement-cache-size>
    <share-prepared-statements>false</share-prepared-statements>
  </statement>
</datasource>
&#13;
&#13;
&#13;

  • 我更新了我的应用程序代码,使用以下代码段创建了与数据库的连接(仅发布代码的相关部分):

&#13;
&#13;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

InitialContext context = null;
DataSource dataSource = null;
Connection conn = null;

try
{
        // Create a Database Connection
	context = new InitialContext();
	dataSource = (DataSource) context.lookup("java:/MyWebServiceOracleDs");
        conn = dataSource.getConnection();
&#13;
&#13;
&#13;

一旦我在服务器上运行更新的代码并运行我的单元测试,我就会得到以下异常:

&#13;
&#13;
javax.naming.NamingException: Lookup failed for 'java:/MyWebServiceOracleDs' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: No object bound for java:/MyWebServiceOracleDs [Root exception is java.lang.NullPointerException]]
javax.naming.NamingException: Lookup failed for 'java:/MyWebServiceOracleDs' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.url.pkgs=com.sun.enterprise.naming, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl} [Root exception is javax.naming.NameNotFoundException: No object bound for java:/MyWebServiceOracleDs [Root exception is java.lang.NullPointerException]]
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:491)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
	at javax.naming.InitialContext.lookup(InitialContext.java:411)
	at com.myprj.business.MyWebServiceImpl.doSomethings(MyWebServiceImpl.java:250)
	at com.myprj.webservice.MyWebService.doSomethings(MyWebService.java:64)
	at com.myprj.test.SomeFunctionality.doSomethingsTest(SomeFunctionality.java:34)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: javax.naming.NameNotFoundException: No object bound for java:/MyWebServiceOracleDs [Root exception is java.lang.NullPointerException]
	at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:229)
	at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:471)
	... 29 more
Caused by: java.lang.NullPointerException
	at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:167)
	... 30 more
&#13;
&#13;
&#13;

似乎我在查找服务器上创建的数据源时遇到问题。我在代码中使用其确切的JNDI名称。我可以直接在我的代码中引用JNDI资源,还是必须先在我的应用程序中在某个XML配置文件中定义它。

只是一些背景知识,我的应用程序是使用JAX-B annotations创建的Web服务。我已将其创建为Dynamic Web Project Eclipse工作区。

我正在尝试了解导致此问题的原因以及我如何解决此问题。

0 个答案:

没有答案