8 Replies Latest reply: Nov 11, 2011 1:24 PM by John Solomon J RSS

How to programmatically create datasource without configurin

Derrick Koon Newbie

Hi, we are migrating from weblogic to JBoss. So far things are working well, but recently we encounter a show-stopper.

Part of the application code creates new datasources dynamically. In weblogic, JMX MBeans api are published and can be used to do that dynamically without shutting down application server.

I saw from another JBoss forum article dated Nov 2004 that it is a things to do list for JBoss to do the same, but so far no work has been completed.

Does anyone know any back door/undocumented way to create a datasource dynamically without shutting down the server? If so, could you post a code fragment?

Appreciate all the help as this is the show stopper right now. I know that we can programmatically modify the datasource info in one of the xml configuration files, but doing so would require rebooting the server, which is unacceptable to our customer.

  • 1. Re: How to programmatically create datasource without config
    Scott Stark Master

    Write a *-ds.xml descriptor into the deploy directory.

  • 2. Re: How to programmatically create datasource without config
    Derrick Koon Newbie

    Does the *-ds.xml file have to be brand new, or can it be existing? I created the new datasource definitions in an existing mssql-ds.xml and the datasource was not bound until we reboot JBoss.

    So what you are suggesting is to create the new datasource definitions in brand new *-ds.xml file, is this correct?

    Thanks,

    Derrick Koon

  • 3. Re: How to programmatically create datasource without config
    Scott Stark Master

    It can be an existing datasource definition file unless you have hot deploy disabled. In that case you would have to invoke the MainDeployer deploy method passing in the url to the mssql-ds.xml.

  • 4. Re: How to programmatically create datasource without config
    Derrick Koon Newbie

    OK, you are right. JBoss does hot-deply when *-ds.xml got modified. My problem was that the default "ScanPeriod=5000" in jboss-service.xml was too large for the application, cause right after the datasource was defined in *-ds.xml, it will be used almost immediately and 5 secs are too large.

    Now I have changed the ScanPeriod to a smaller value of 100. But I found out the hot-deploy still does not work with the following exception after undeploying *-ds.xml and during redeplying the updated *-ds.xml:

    2005-01-10 12:09:24,234 1057438 ERROR [ScannerThread] - Starting failed jboss:service=KeyGeneratorFactory,type=HiLo
    javax.naming.CommunicationException. Root exception is
    java.io.NotSerializableException: org.jboss.tm.TxManager
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1330)
    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1302)
    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1245)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1052)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
    at java.rmi.MarshalledObject.(MarshalledObject.java:92)
    at org.jnp.interfaces.MarshalledValuePair.(MarshalledValuePair.java:41)
    at org.jnp.interfaces.NamingContext.rebind(NamingContext.java:434)
    at org.jnp.interfaces.NamingContext.rebind(NamingContext.java:413)
    at javax.naming.InitialContext.rebind(InitialContext.java:363)
    at org.jboss.naming.Util.rebind(Util.java:109)
    at org.jboss.naming.Util.rebind(Util.java:96)
    at org.jboss.ejb.plugins.keygenerator.hilo.HiLoKeyGeneratorFactory.startService(HiLoKeyGeneratorFactory.java:205)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:271)
    at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:221)
    at sun.reflect.GeneratedMethodAccessor3.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
    at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:891)
    at $Proxy0.start(Unknown Source)
    at org.jboss.system.ServiceController.start(ServiceController.java:416)
    at org.jboss.system.ServiceController.start(ServiceController.java:438)
    at org.jboss.system.ServiceController.start(ServiceController.java:438)
    at org.jboss.system.ServiceController.start(ServiceController.java:438)
    at org.jboss.system.ServiceController.start(ServiceController.java:438)
    at sun.reflect.GeneratedMethodAccessor7.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
    at $Proxy4.start(Unknown Source)
    at org.jboss.deployment.SARDeployer.start(SARDeployer.java:261)
    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:324)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:72)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
    at org.jboss.mx.util.JMXInvocationHandler.invoke(JMXInvocationHandler.java:272)
    at $Proxy32.start(Unknown Source)
    at org.jboss.deployment.XSLSubDeployer.start(XSLSubDeployer.java:222)
    at org.jboss.deployment.MainDeployer.start(MainDeployer.java:935)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:746)
    at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:709)
    at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:324)
    at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:141)
    at org.jboss.mx.server.Invocation.dispatch(Invocation.java:80)
    at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:119)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:131)
    at org.jboss.mx.server.Invocation.invoke(Invocation.java:74)
    at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:242)
    at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:642)
    at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:176)
    at $Proxy8.deploy(Unknown Source)
    at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:305)
    at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:463)
    at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:204)
    at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.loop(AbstractDeploymentScanner.java:215)
    at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.run(AbstractDeploymentScanner.java:194)

    Also the following exception when application attempts to get a JDBC connection from these rebound/redeployed datasouces:

    2005-01-10 12:09:24,796 1058000 DEBUG [Thread-50] - SERVER IP : 127.0.0.1; BVConnection::getConnection() SQLException Error : org.jboss.util.NestedSQLException: You are trying to use a connection factory that has been shut down: ManagedConnectionFactory is null.; - nested throwable: (javax.resource.ResourceException: You are trying to use a connection factory that has been shut down: ManagedConnectionFactory is null.)

    Appreciate the insight and help.

  • 5. Re: How to programmatically create datasource without config
    zj chen Newbie

    We are migration from JBoss 3.2 to JBoss 4.02 for live production application. Everything goes well, exception hot deployment seems break. It used to pick up new datasource, now I got following error:

    16:47:54,067 INFO [ConnectionFactoryBindingService] Unbound connection factory for resource adapter
    for ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDSMember from JNDI name 'ja
    va:PostgresDSMember'
    16:47:54,067 INFO [ConnectionFactoryBindingService] Unbound connection factory for resource adapter
    for ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDSFare from JNDI name 'java
    :PostgresDSFare'
    16:47:54,082 INFO [ConnectionFactoryBindingService] Unbound connection factory for resource adapter
    for ConnectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS from JNDI name 'java:Pos
    tgresDS'
    16:47:54,395 INFO [WrapperDataSourceService] Bound connection factory for resource adapter for Conn
    ectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDS to JNDI name 'java:PostgresDS'
    16:47:54,426 INFO [WrapperDataSourceService] Bound connection factory for resource adapter for Conn
    ectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDSFare to JNDI name 'java:PostgresDS
    Fare'
    16:47:54,442 INFO [WrapperDataSourceService] Bound connection factory for resource adapter for Conn
    ectionManager 'jboss.jca:service=DataSourceBinding,name=PostgresDSMember to JNDI name 'java:Postgres
    DSMember'
    16:47:54,457 INFO [JCAResource] Registration is not done -> stop
    16:49:06,350 INFO [AirSearch] <<* SEARCH START *>> <BOS-NYC 10DEC-24DEC RT> [C075C9B
    9C330FEF637F3CF7F422C4B30]
    16:49:06,350 INFO [FareDBManager] Getting Round Trip Deals for <BOS|NYC|12-10-2005|NYC|BOS|12-24-20
    05> [C075C9B9C330FEF637F3CF7F422C4B30]
    16:49:06,381 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
    16:49:06,381 ERROR [JDBCExceptionReporter] You are trying to use a connection factory that has been
    shut down: ManagedConnectionFactory is null.; - nested throwable: (javax.resource.ResourceException:
    You are trying to use a connection factory that has been shut down: ManagedConnectionFactory is nul
    l.)
    16:49:06,396 ERROR [JMXPersistentSession] org.hibernate.exception.GenericJDBCException: Cannot open
    connection
    16:49:06,396 WARN [DAOUtils] Exception getting hibernate session, try #1 : com.aaacomp.fram
    ework.persistent.StoreNotFoundException: org.hibernate.exception.GenericJDBCException: Cannot open c
    onnection
    16:49:07,396 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
    16:49:07,396 ERROR [JDBCExceptionReporter] You are trying to use a connection factory that has been
    shut down: ManagedConnectionFactory is null.; - nested throwable: (javax.resource.ResourceException:
    You are trying to use a connection factory that has been shut down: ManagedConnectionFactory is nul
    l.)
    16:49:07,396 ERROR [JMXPersistentSession] org.hibernate.exception.GenericJDBCException: Cannot open
    connection
    16:49:07,396 WARN [DAOUtils] Exception getting hibernate session, try #2 : com.aaacomp.fram
    ework.persistent.StoreNotFoundException: org.hibernate.exception.GenericJDBCException: Cannot open c
    onnection
    16:49:08,396 WARN [JDBCExceptionReporter] SQL Error: 0, SQLState: null
    16:49:08,396 ERROR [JDBCExceptionReporter] You are trying to use a connection factory that has been
    shut down: ManagedConnectionFactory is null.; - nested throwable: (javax.resource.ResourceException:
    You are trying to use a connection factory that has been shut down: ManagedConnectionFactory is nul
    l.)
    16:49:08,396 ERROR [JMXPersistentSession] org.hibernate.exception.GenericJDBCException: Cannot open
    connection
    16:49:08,412 WARN [DAOUtils] Exception getting hibernate session, try #3 : com.aaacomp.fram
    ework.persistent.StoreNotFoundException: org.hibernate.exception.GenericJDBCException: Cannot open c
    onnection


    NEED HELP!

  • 6. Re: How to programmatically create datasource without config
    Henrik Bentel Newbie

    Hi

    I'm also interested in this topic but this thread seems to have died away.

    Are there any way to programmatically configure new datasources in JBoss 4.0?

    We also use Weblogic and it's JMX api to create connection pool and datasources on demand without restarting the server.
    It's all abstracted away, and I'm looking to implement a version for JBoss 4.0 so we can deploy in JBoss also.

    I've looked through some of the API and I've found
    org.jboss.management.j2ee.JDBCDataSource
    which seems like a place to start.
    Some of the replies suggest dropping in Datasource descriptor files at runtime is the only way.

    thanks,
    Henrik

  • 7. Re: How to programmatically create datasource without config
    Adrian Brock Master

    http://wiki.jboss.org/wiki/Wiki.jsp?page=JBossHelp
    Hijacking somebody else's thread just means you are ignored.