JBOSS配置连接sybase数据库

我的jboss是安装在:C:/jboss-eap-4.3中的。

 1,把驱动器的jar包放在C:/jboss-eap-4.3/jboss-as/server/default/lib文件夹下

 2,sybase-ds.xml文件:

     拷贝:

        C:/jboss-eap-4.3/jboss-as/docs/examples/jca有各种数据库的配置文件。

      在C:/jboss-eap-4.3/jboss-as/docs/examples/jca中找到sybase-ds.xml文件,复制粘贴到

C:/jboss-eap-4.3/jboss-as/server/default/deploy中。

     修改配置sybase-ds.xml文件:

        <connection-url>jdbc:sybase:Tds:你的数据库的IP:你的数据库的端口号/你的数据库名称?JCONNECT_VERSION=6</connection-url>
    <driver-class>com.sybase.jdbc.SybDriver</driver-class> //这句应该改为com.sybase.jdbc2.jdbc.SybDriver,具体看后面的报错。
    <user-name>用户名</user-name>
    <password>用户名密码</password>

        保存文件

3,修改jaws.xml

    jaws.xml文件在EJB工程的WEB-INF中 加入:
<jaws>

<datasource>java:/SybaseDS</datasource>
<type-mapping>Sybase</type-mapping>
</jaws>

4,修改standardjbosscmp-jdbc.xml

    位置:C:/jboss-eap-4.3/jboss-as/server/default/conf中

    <jbosscmp-jdbc>
<defaults>
<datasource>java:/SybaseDS</datasource>
<datasource-mapping>Sybase</datasource-mapping>

</defaults>
</jbosscmp-jdbc>

5,修改login-config.xml

位置:C:/jboss-eap-4.3/jboss-as/server/default/conf中

设置:<application-policy>

<application-policy name = "SybaseDbRealm">
<authentication>
<login-module code =
"org.jboss.resource.security.ConfiguredIdentityLoginModule"
flag = "required">
<module-option name ="principal">sa</module-option>
<module-option name = "userName">sa</module-option>
<module-option name = "password"></module-option>
<module-option name = "managedConnectionFactoryName">
jboss.jca:service=LocalTxCM,name=SybaseDS
</module-option>
</login-module>
</authentication>
</application-policy>

这一步完成后,就可以在JBOSS中使用sybase了。

6,连接数据库代码:

 

import java.sql.Connection;

import javax.naming.InitialContext;
import javax.sql.DataSource;

public class JbossConnection3 {
 public Connection getConnection(){
  Connection conn=null;
    try{
  InitialContext   ctx   =   new   InitialContext();    
   DataSource   ds   =   (DataSource)   ctx.lookup("jdbc/SybaseDB");    
   conn   =   ds.getConnection();
   return conn;
 }catch(Exception ex){  
  ex.printStackTrace();
  return conn;
 }
 }

}

 

7,客户端代码:

public int searchID(){
  int id=-1; 
   JbossConnection3 jc3 = new JbossConnection3();
   Connection conn = jc3.getConnection();
   if(conn==null){
    System.out.println("connection is null.");
    return id;
   }else{
             Statement stmt = conn.createStatement();
     ResultSet rs = stmt.executeQuery("SELECT user_id FROM manager where login_id='xiaoMing'");
   while ( rs.next() ){
    id=rs.getInt("user_id");
     }   
      conn.close();
   }
     
       }catch(Exception ex){
     ex.printStackTrace();
     return id;
    }
    
        return id;
     
 }

 

8,调用这个方法,运行报错:

javax.naming.NameNotFoundException: jdbc not bound
 at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
 at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
 at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
 at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
 at sun.rmi.transport.Transport$1.run(Transport.java:153)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
 at java.lang.Thread.run(Thread.java:595)
 at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
 at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
 at org.jnp.server.NamingServer_Stub.lookup(Unknown Source)
 at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
 at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:589)
 at javax.naming.InitialContext.lookup(InitialContext.java:351)
 at yourcompany.com.connection.JbossConnection3.getConnection(JbossConnection3.java:23)
 at gg.ejb.testJbossConnection.searchID(testJbossConnection.java:25)
 at gg.ejb.testJbossConnection.main(testJbossConnection.java:50)

 

-1

 

解决:

   修改C:/jboss-eap-4.3/jboss-as/server/default/deploy中的sybase-ds.xml文件,

在<jndi-name>jdbc/SybaseDB</jndi-name>下面加入一句:

    <use-java-context>false</use-java-context>

 

 

jboss启动信息出现一句:

10:57:43,562 INFO  [WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=jdbc/SybaseDB' to JNDI name 'jdbc/SybaseDB'

 

9,再运行客户端:

   报错:

org.jboss.util.NestedSQLException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: com.sybase.jdbc.SybDriver; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: com.sybase.jdbc.SybDriver)); - nested throwable: (org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: com.sybase.jdbc.SybDriver; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: com.sybase.jdbc.SybDriver)))
 at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:94)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService.doDataSourceMethod(WrapperDataSourceService.java:344)
 at org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService.invoke(WrapperDataSourceService.java:201)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:818)
 at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:419)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
 at sun.rmi.transport.Transport$1.run(Transport.java:153)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
 at java.lang.Thread.run(Thread.java:595)
 at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:247)
 at sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:223)
 at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:126)
 at org.jboss.invocation.jrmp.server.JRMPInvoker_Stub.invoke(Unknown Source)
 at org.jboss.invocation.jrmp.interfaces.JRMPInvokerProxy.invoke(JRMPInvokerProxy.java:133)
 at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365)
 at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197)
 at org.jboss.proxy.ClientMethodInterceptor.invoke(ClientMethodInterceptor.java:74)
 at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100)
 at $Proxy0.getConnection(Unknown Source)
 at yourcompany.com.connection.JbossConnection3.getConnection(JbossConnection3.java:24)
 at gg.ejb.testJbossConnection.searchID(testJbossConnection.java:25)
 at gg.ejb.testJbossConnection.main(testJbossConnection.java:50)
Caused by: org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (org.jboss.resource.JBossResourceException: Failed to register driver for: com.sybase.jdbc.SybDriver; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: com.sybase.jdbc.SybDriver))
 at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:179)
 at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:577)
 at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:262)
 at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:500)
 at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:341)
 at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:315)
 at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:396)
 at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:842)
 at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:88)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService.doDataSourceMethod(WrapperDataSourceService.java:344)
 at org.jboss.resource.adapter.jdbc.remote.WrapperDataSourceService.invoke(WrapperDataSourceService.java:201)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
 at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
 at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
 at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
 at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
 at org.jboss.invocation.jrmp.server.JRMPInvoker$MBeanServerAction.invoke(JRMPInvoker.java:818)
 at org.jboss.invocation.jrmp.server.JRMPInvoker.invoke(JRMPInvoker.java:419)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:294)
 at sun.rmi.transport.Transport$1.run(Transport.java:153)
 at java.security.AccessController.doPrivileged(Native Method)
 at sun.rmi.transport.Transport.serviceCall(Transport.java:149)
 at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:466)
 at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:707)
 at java.lang.Thread.run(Thread.java:595)
Caused by: org.jboss.resource.JBossResourceException: Failed to register driver for: com.sybase.jdbc.SybDriver; - nested throwable: (java.lang.ClassNotFoundException: No ClassLoaders found for: com.sybase.jdbc.SybDriver)
 at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:287)
 at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:170)
 ... 36 more
Caused by: java.lang.ClassNotFoundException: No ClassLoaders found for: com.sybase.jdbc.SybDriver
 at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:306)
 at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:514)
 at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:408)
 at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
 at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
 at java.lang.Class.forName0(Native Method)
 at java.lang.Class.forName(Class.java:242)
 at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:272)
 ... 37 more

-1

 

解决:

  找到之前放入lib文件夹下面的驱动jar包。打开看到SybDriver.class文件的实际路径为com.sybase.jdbc2.jdbc.SybDriver。

把sybase-ds.xml文件中的<driver-class>的值改为SybDriver.class的实际路径即可,即com.sybase.jdbc2.jdbc.SybDriver。

 

运行后成功。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值