Wednesday, May 8, 2013

ATG OOTB SqlJMSAdmin

Today I would like to share about one of the less used but effective tool SQLJMSAdmin that is shipped by Oracle along with ATG install.

How does it help?
There is a need to administer and monitor JMS messages once you begin using SQL JMS Provider in your application. Since SQL JMS stores message states in database, you have two choices:

  1. Use DML statements as specified in documentation to query message build up or
  2. Use SQLJMSAdmin, a browser based administration tool for SQL JMS 

How to configure?
  1. If your application server
    • Jboss: Modify <ATG_INSTALL_FOLDER>\SQLJMSAdmin\j2ee-apps\sqlJmsAdmin\ejbModule\META-INF\jboss.xml with appropriate Core datasource (same as Order repository DataSource)
    • Weblogic: Modify all enterprise bean definitions in file <ATG_INSTALL_FOLDER>\SQLJMSAdmin\j2ee-apps\sqlJmsAdmin\ejbModule\META-INF\weblogic-ejb-jar.xml to include Core datasource, for example
    •  ...  
        <weblogic-enterprise-bean>  
         <ejb-name>DMSTopicSubscription</ejb-name>  
         <reference-descriptor>  
          <resource-description>  
          <res-ref-name>jdbc/datasource</res-ref-name>  
          <jndi-name>atg_core</jndi-name>  
          </resource-description>  
         </reference-descriptor>    
         <enable-call-by-reference>True</enable-call-by-reference>  
        </weblogic-enterprise-bean>  
       ...  
      
  2. You need to add "SQLJMSAdmin" to runAssembler task so that it is included in the ear file
How to use it?
Once the ear is built including SQLJMSAdmin module, you can access the administration tool at http://<host>:<port>/sqlJmsAdmin.
When prompted for credentials, use the same credentials as in Dynamo Administration Tool. Now you access to monitor message build up
Fig 1: SQLJmsAdmin Dashboard


Fig 2: Messages in a Queue

if you look at Fig2, you can see choices to move messages from let's say a DeadLetterQueue to a Normal Queue like "SubmitToOMS" to be retried.



4 comments:

  1. Hi This is vinodh
    \SQLJMSAdmin\j2ee-apps\sqlJmsAdmin\ejbModule\META-INF\jboss.xml file.

    My jboss.xml looks like this





    jdbc/dataSource
    java:/commprod_ds





    I included the SQLJMS ADMIN module in the build script and restarted the server . but when i try to accessing the "http://localhost:8180/sqlJmsAdmin/" (Note : 8180 is the production port i have configured) . I get the following error


    java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:commprod, moduleName:ejbModule, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@1c3a2f66
    at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:727)
    at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
    at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:183)
    at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:253)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181)
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144)
    at com.sun.proxy.$Proxy36.create(Unknown Source)
    at atg.sqljmsadmin.taglib.DMSAdminTag.doStartTag(DMSAdminTag.java:232)
    at org.apache.jsp.main_jsp._jspService(main_jsp.java:3030)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:69)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:365)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:309)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:242)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:295)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:214)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:149)
    at org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:145)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:336)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:653)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:920)
    at java.lang.Thread.run(Thread.java:724)



    Please share your thougts...

    ReplyDelete
  2. jboss.xml




    jdbc/dataSource
    java:/commprod_ds



    ReplyDelete
  3. This comment has been removed by the author.

    ReplyDelete
  4. Hi this is Pavan. How is the clients created. My application has around 4 clients. And in I I deleted the topics that are not needed. But on every restart they appear back again. Can you tell me how I can permanently remove those topics from being created

    ReplyDelete