1 2 Previous Next 19 Replies Latest reply on Aug 14, 2013 8:07 AM by rareddy

    How to add a resource-adapter programatically?

    madhu.garimilla

      I would like to add a resource-adapter (data source) while jboss 7 is up and running. As per the doc, we can add this using CLI command, but is there a way i can configure this through a java program?  or Can we add this inside a *-ds.xml file in an ear file which jboss 7 can automatically detect?  Could someone please give an example of how this can be done.

        • 1. Re: How to add a resource-adapter programatically?
          rareddy

          Anything operations that can be done through CLI can be done through a JAVA program. See https://github.com/teiid/teiid/blob/master/test-integration/common/src/test/java/org/teiid/arquillian/IntegrationTestDeployment.java

          • 2. Re: How to add a resource-adapter programatically?
            madhu.garimilla

            Hi Ramesh,

             

            I tried with below code to add a file data source programmatically.

             

                    Admin admin = AdminFactory.getInstance().createAdmin("localhost",9999,"admin","admin".toCharArray());

                    Properties p = new Properties();

                    p.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");

                    p.setProperty("pool-name", "marketdata-file");

                    p.setProperty("max-pool-size", "4");

                    p.setProperty("enabled", "true");

                    p.setProperty("use-java-context", "true");

                    p.setProperty("ParentDirectory", "../data/");

                    p.setProperty("AllowParentPaths", "true");

                    admin.createDataSource("java:/marketdata-file","teiid-connector-file.rar",p);

             

            This shows up the below error in jboss console. Am i missing anything here? How do i avoid this error.

             

            15:32:52,571 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-5) MSC00001: Failed to start service jboss.ra.deployment."teiid-connector-file.r

            ar_1": org.jboss.msc.service.StartException in service jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.jca.core.spi.mdr.NotFoundException:

            IJ000855: teiid-connector-file isn't registered

                    at org.jboss.as.connector.metadata.deployment.ResourceAdapterXmlDeploymentService.start(ResourceAdapterXmlDeploymentService.java:127)

                    at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

                    at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

                    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]

                    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]

                    at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]

            Caused by: org.jboss.jca.core.spi.mdr.NotFoundException: IJ000855: teiid-connector-file isn't registered

                    at org.jboss.jca.core.mdr.SimpleMetadataRepository.getResourceAdapter(SimpleMetadataRepository.java:150)

                    at org.jboss.as.connector.metadata.deployment.ResourceAdapterXmlDeploymentService.start(ResourceAdapterXmlDeploymentService.java:87)

                    ... 5 more

             

            15:32:52,673 INFO  [org.jboss.as.controller] (management-handler-thread - 22) JBAS014774: Service status report

            JBAS014777:   Services which failed to start:      service jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.msc.service.StartException in s

            ervice jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.jca.core.spi.mdr.NotFoundException: IJ000855: teiid-connector-file isn't registered

             

            Thanks

            • 3. Re: How to add a resource-adapter programatically?
              rareddy

              try

               

              admin.createDataSource("java:/marketdata-file","file",p);
              

               

              In 8.4, the RAR files have been converted to use JBoss modules and they have simple names like "file".

               

              Ramesh..

              • 4. Re: How to add a resource-adapter programatically?
                madhu.garimilla

                We are using teiid 8.1. Is there anyway that we could do this in 8.1?

                • 5. Re: How to add a resource-adapter programatically?
                  rareddy

                  The original code above should be right one then. Look in 8.1 branch otherwise. Also note there is bug JBoss AS JCA connection factory creation if added it once and deleted and added with same name again.

                   

                  as per the above exception, you need to make sure "teiid-connector-file.rar" has been deployed. You can a call "admin.getDataSourceTemplateNames" to make sure.

                   

                  Ramesh..

                  • 6. Re: How to add a resource-adapter programatically?
                    madhu.garimilla

                    Hi Ramesh, 

                     

                    teiid-connector-file.rar is already deployed. I have checked with admin.getDataSourceTemplateNames and teiid-connector-file.rar is coming as part of it.I see the data source getting added and the vdb referring to it also getting deployed properly but i was not able to query the data source because of the exception i was getting while creating the data source. When i try to query, It says "TEIID30504 text-connector: TEIID30481 Failed to find the Connection Factory with JNDI name java:marketdata-file."

                     

                    Are you referring to the bug https://issues.jboss.org/browse/AS7-4776 ? Currently I am using jboss 7.1.1.

                    • 7. Re: How to add a resource-adapter programatically?
                      rareddy

                      Yes, I was referring to that issue. It got better with JBoss EAP 6.1 alpha build, so you can try using that. EAP 6.1 Alpha works with Teiid 8.4

                       

                      Also where is "/" in your name? shouldn't that be "java:/marketdata-file"?

                       

                      Ramesh..

                      • 8. Re: How to add a resource-adapter programatically?
                        madhu.garimilla

                        Is there any other way that we could read the data from a csv file and refer to it through a teiid view?

                        • 9. Re: How to add a resource-adapter programatically?
                          madhu.garimilla

                          "/" is given while creating the data source but it was not present in the error message i got while querying the data source

                          • 10. Re: How to add a resource-adapter programatically?
                            rareddy

                            Pls attach your log file, if it is too long, delete and restart the server and re-run the testcase and attach that. I do not see anything wrong with it so far.

                            • 11. Re: How to add a resource-adapter programatically?
                              madhu.garimilla

                              Hi Ramesh, I tried the following 2 approaches.

                               

                              Approach 1:

                              With jboss 7.1.1 and teiid 8.1 , I tried to add a file data source using the below code and it resulted in an exception which i mentioned in my earlier post, attached the log(jboss_711_Teiid_81.log).

                               

                              Admin admin = AdminFactory.getInstance().createAdmin("localhost",9999,"admin","admin".toCharArray());

                              final Properties p = new Properties();

                              p.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");

                              p.setProperty("pool-name", "marketdata-file");

                              p.setProperty("max-pool-size", "4");

                              p.setProperty("enabled", "true");

                              p.setProperty("use-java-context", "true");

                              p.setProperty("ParentDirectory", "../data/");

                              p.setProperty("AllowParentPaths", "true");

                              admin.createDataSource("java:/marketdata-file","teiid-connector-file.rar",p);

                               

                              Approach 2:

                              With jboss-eap-6.1 and teiid 8.4,I tried to add a file data source using the below code and it resulted in an exception in my test case, attached the log (jboss_eap_61_Teiid_81.log)

                               

                              Admin admin = AdminFactory.getInstance().createAdmin("localhost",9999,"admin","admin".toCharArray());

                              final Properties p = new Properties();

                              p.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");

                              p.setProperty("pool-name", "marketdata-file");

                              p.setProperty("max-pool-size", "4");

                              p.setProperty("enabled", "true");

                              p.setProperty("use-java-context", "true");

                              p.setProperty("ParentDirectory", "../data/");

                              p.setProperty("AllowParentPaths", "true");

                              admin.createDataSource("java:/marketdata-file", "file", p);

                              • 12. Re: How to add a resource-adapter programatically?
                                rareddy

                                try

                                 

                                Admin admin = AdminFactory.getInstance().createAdmin("localhost",9999,"admin","admin".toCharArray());
                                final Properties p = new Properties();
                                p.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");
                                p.setProperty("ParentDirectory", "../data/");
                                p.setProperty("AllowParentPaths", "true");
                                admin.createDataSource("java:/marketdata-file","teiid-connector-file.rar",p);
                                

                                 

                                 

                                 


                                • 13. Re: How to add a resource-adapter programatically?
                                  madhu.garimilla

                                  Thanks Ramesh. I could get this working.

                                   

                                  However, I still have the problem (https://issues.jboss.org/browse/AS7-4776 ) while deleting and readding data source as i am using Jboss 7.1.1 and Teiid 8.1.

                                  • 14. Re: How to add a resource-adapter programatically?
                                    madhu.garimilla

                                    Hi Ramesh,

                                     

                                    I tried to test this by adding multiple file data sources.

                                     

                                     

                                      {code} final Admin admin = AdminFactory.getInstance().createAdmin("localhost",9999,"admin","admin".toCharArray());

                                     

                                            final Properties p = new Properties();

                                            p.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");

                                            p.setProperty("ParentDirectory", "${jboss.home.dir}/../data/");

                                            p.setProperty("AllowParentPaths", "true");

                                            admin.createDataSource("java:/marketdata-file","teiid-connector-file.rar",p);

                                     

                                            final Properties p1 = new Properties();

                                            p1.setProperty("class-name","org.teiid.resource.adapter.file.FileManagedConnectionFactory");

                                            p1.setProperty("ParentDirectory", "${jboss.home.dir}/../data/");

                                            p1.setProperty("AllowParentPaths", "true");

                                            admin.createDataSource("java:/marketdata-file1","teiid-connector-file.rar",p1);{code}

                                        

                                     

                                    Then it throws the below exception in the jboss console.

                                     

                                     

                                    13:28:58,987 INFO  [org.jboss.as.connector.deployers.RaXmlDeployer] (MSC service thread 1-2) IJ020001: Required license terms for file:/C:/Chorus/CAR/

                                    Work/jboss-as-7.1.1.Final/standalone/tmp/vfs/temp98701600a4006a0e/teiid-connector-file.rar-4c490c2c33dad3d0/contents/

                                    13:28:58,993 INFO  [org.jboss.as.deployment.connector] (MSC service thread 1-2) JBAS010406: Registered connection factory java:/marketdata-file

                                    13:28:58,996 INFO  [org.jboss.as.connector.deployers.RaXmlDeployer] (MSC service thread 1-2) IJ020002: Deployed: file:/C:/Chorus/CAR/Work/jboss-as-7.1

                                    .1.Final/standalone/tmp/vfs/temp98701600a4006a0e/teiid-connector-file.rar-4c490c2c33dad3d0/contents/

                                    13:28:58,998 INFO  [org.jboss.as.deployment.connector] (MSC service thread 1-8) JBAS010401: Bound JCA ConnectionFactory [java:/marketdata-file]

                                    13:28:59,379 INFO  [org.jboss.as.deployment.connector] (MSC service thread 1-11) JBAS010410: Unbound JCA ConnectionFactory [java:/marketdata-file]

                                    13:28:59,381 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-16) MSC00001: Failed to start service jboss.ra.deployment."teiid-connector-file.

                                    rar_1": org.jboss.msc.service.StartException in service jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.jca.core.spi.mdr.NotFoundException

                                    : IJ000855: teiid-connector-file isn't registered

                                            at org.jboss.as.connector.metadata.deployment.ResourceAdapterXmlDeploymentService.start(ResourceAdapterXmlDeploymentService.java:127)

                                            at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

                                            at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]

                                            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_03]

                                            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_03]

                                            at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_03]

                                    Caused by: org.jboss.jca.core.spi.mdr.NotFoundException: IJ000855: teiid-connector-file isn't registered

                                            at org.jboss.jca.core.mdr.SimpleMetadataRepository.getResourceAdapter(SimpleMetadataRepository.java:150)

                                            at org.jboss.as.connector.metadata.deployment.ResourceAdapterXmlDeploymentService.start(ResourceAdapterXmlDeploymentService.java:87)

                                            ... 5 more

                                     

                                    13:28:59,453 INFO  [org.jboss.as.controller] (management-handler-thread - 1) JBAS014774: Service status report

                                    JBAS014777:   Services which failed to start:      service jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.msc.service.StartException in s

                                    ervice jboss.ra.deployment."teiid-connector-file.rar_1": org.jboss.jca.core.spi.mdr.NotFoundException: IJ000855: teiid-connector-file isn't registered

                                     

                                    Where as this works fine when i add only one file data source. Though it is adding the resource adapters in the standalone-teiid.xml, those are working fine only after a jboss restart.

                                    1 2 Previous Next