1 2 Previous Next 15 Replies Latest reply: Dec 9, 2013 8:38 AM by Henrik Hoffmann RSS

Threading inside JBoss

Stratos Pavlakis Newbie

Hi all,

I want to refer to something I could not find information about, after googling half an hour. Threading inside Jboss.

As far as I know, it is not a best practice to create you own threads inside an application server, but instead you should ask from the server to do so for you. On the other hand, several apps I 've seen (a couple of mine I must admit) do so without any problem.

So, my question comes down to this :
I know we can assign different apps inside Jboss, to be server by different ThreadPools, but when we need to start our own threads what should we do?
A. Create our own threads like : new Thread(runnable) ?
B. Use JSE Executors ThreadPool ?
C. Create a BasicThreadPool MBean for our app in Jboss and run our runnables on this pool?
D. Other way I cannot imagine.

If the correct answer is C, doesn't it tightly couples our application to Jboss?

Btw during my search I came across this :
http://www.coderanch.com/t/428370/JBoss/JBoss-Basic-ThreadPool

A friend here is wondering, if using a JSE fixedThreadPool inside a .SAR
is actually delegating to the basicThreadPool assigned to this .SAR. Which of course I guess doesn't happen.

Thx in advance for any replies.



  • 1. Threading inside JBoss
    vijaysachin sachin Newbie

    I am new to Jboss. Please tell me how to configure thread pool. I fedup by searching google from long time please me.

     

    I found a link http://community.jboss.org/wiki/ConfigBasicThreadPool  in this link they had not specfied which file I have to put those XML code.

     

    And also give some sample code how can I implement Thread Pool

  • 2. Threading inside JBoss
    Ales Justin Master
    Please tell me how to configure thread pool. I fedup by searching google from long time please me.

    * http://lmgtfy.com/?q=jboss+thread+pool ... top item ;-)

  • 3. Threading inside JBoss
    vijaysachin sachin Newbie

    Seen all the links man but cannot get proper Information. Please post some same example

  • 4. Threading inside JBoss
    Ales Justin Master

    Please post some same example

    What kind of example?

     

    The wiki goes into details explaining all sorts of config options.

    And the actual code is here: https://github.com/dmlloyd/jboss-threads

    While you can search the JBossAS config files for actual usage.

  • 5. Threading inside JBoss
    jaikiran pai Master

    Actually, you even got a detailed reply in this post here http://www.coderanch.com/t/528949/JBoss/configure-Thread-pool-JBOSS

  • 6. Threading inside JBoss
    vijaysachin sachin Newbie

    Actually, you even got a detailed reply in this post here http://www.coderanch.com/t/528949/JBoss/configure-Thread-pool-JBOSS

    But the above link shows how to creates MDB pool.

    But I need to know how can we creat normal Thread pool in jboss

     

    While googling I got to see this one link  http://community.jboss.org/wiki/ConfigBasicThreadPool

    But below they had not specified which xml file I need to change. And also I need to know how can I use this Java code

     

    Configuration of a BasicThreadPool

    The basic thread pool provides a simple thread pooling service

    Example Configuration


      <mbean code="org.jboss.util.threadpool.BasicThreadPool" name="jboss.jca:service=WorkManagerThreadPool">
         <!-- The name that appears in thread names -->
         <attribute name="Name">WorkManager</attribute>
         <!-- The maximum amount of work in the queue -->
         <attribute name="MaximumQueueSize">1024</attribute>
         <!-- The maximum number of active threads -->
         <attribute name="MaximumPoolSize">100</attribute>
         <!-- How long to keep threads alive after their last work (default one minute) -->
         <attribute name="KeepAliveTime">60000</attribute>
      </mbean>
  • 7. Threading inside JBoss
    jaikiran pai Master

    vijaysachin sachin wrote:

     

    Actually, you even got a detailed reply in this post here http://www.coderanch.com/t/528949/JBoss/configure-Thread-pool-JBOSS

    But the above link shows how to creates MDB pool.

    But I need to know how can we creat normal Thread pool in jboss

    And how and where do you plan to use that thread pool?

  • 8. Threading inside JBoss
    vijaysachin sachin Newbie

    And how and where do you plan to use that thread pool?

    My requirement is something different MDB pool can solve my requirement.

    But I need to know like Connection pool, MDB pool how can I create Thread Pool in jboss.

    Which xml files need to be changed?

  • 9. Threading inside JBoss
    Peter Johnson Master

    I still do not understand why my answer does not solve your problem. You stated that when your MDB grabs a message off of the queue that it might take a long time for it to process the message and you do not want the other messages in the queue being ignored during that time. I told you that there are actually 15 (by default) MDB instances processing messages out of the queue and even showed you how you could increase that limit.

     

    If you pull a message off a queue and decide you need to fork a thread to process the message, then you are not thinking correctly. The whole purpose of a messaging system is so that you can process things asynchronously.

     

    Or was message processing by and MDB not your real requirement? If you get some other request, let's say from a web service, and that request will take a long time to process, then I suggest that you create another messaging queue and place the request on that queue and have an MDB do the processing. That is the whole purpose of messaging. Don't fight the Java EE architecture, and don't limit yourself to requirements that you don't really need. Instead, make use of the Java EE architecture.

  • 10. Threading inside JBoss
    Mahesh Venkat Newbie

    Hi Peter,

     

    I have same frustration as Vijay.  I would like to use JBoss threads programmatically in non-MDB cases. In a Web App, when I want to integrate with an external service, I would like to fork a thread to invoke the external http service.

    Rather than using JDK concurrent util package, if I want to JBoss org.jboss.util.threadpool.BasicThreadPool for my custom logic how will I do it programmatically?

    Sure I can add an entry in the conf\jboss-service.xml or jbossweb.sar\META-INF\jboss-beans.xml to define a custom worker thread pool

    Now I in order to use this custom worker thread pool, I think we need to develop JMX MBean Proxy to invoke it.

     

    Can someone provide a code snippet to develop JBoss MBean and its Proxy that can invoked programmatically in an jboss web app ?

     

    Thanks

    --Mahesh

  • 11. Threading inside JBoss
    Mahesh Venkat Newbie

    I think I finally have the answer on how to feed a runnable task to the BasicthreadPool.  Look at

       http://community.jboss.org/message/230378

     

    This post describes the configuration and code snippet which I have elaborated below ...

     

    Use JBossWorkManager.

     

    Implement a javax.resource.spi.work.Work; which extends Runnable interface and implement the run() method.

     

     

    Mywork implements  Work {

         void run()  {

              // your main logic

        }

     

    }

     

    Get an instance of JBossWorkManager using the following code:

     

    WorkManager customWorkManager = null; // JBossWorkManager extends WorkManager

    Work mywork = new MyWork();
    try {
        MBeanServer server = MBeanServerLocator.locateJBoss();
        customWorkManager = (WorkManager) server.getAttribute(new ObjectName(
                                      "custom.jca:service=CustomWorkManager"), "Instance");

         customWorkManager.getInstance().doWork(mywork);
    } catch (MalformedObjectNameException e) {
                  // TODO
    } catch (Exception e) {
                 // TODO
    }

      

    Let me know if this works for you.


    Thanks

    --Mahesh

  • 12. Re: Threading inside JBoss
    spyhunter99 Novice

    From the class that actual performs the work, how do you access context variables or objects that are necessary to do the work?

    I was expecting something like,

     

    customWorkManager.getInstance().doWork(mywork);           //this does the enqueue

     

    then the work manager does the dequeue and handles the threading

     

    void run()  {

              // your main logic

              Object j = //some code is needed to get stuff from the queue?

        }

  • 13. Re: Threading inside JBoss
    spyhunter99 Novice

    Ahh never mind, I understand the way it works now. thanks for the post

  • 14. Re: Threading inside JBoss
    spyhunter99 Novice

    I'm using Jboss 6.1 and I keep getting instancenotfound exception on server.getAttribute. Should the thread pool be visible in the jmx console?

    In addition, the api seems to be different in jboss 6.1.

     

      customWorkManager.getInstance().doWork(mywork);

    doesn't exist

      customWorkManager.doWork(mywork);

    does

1 2 Previous Next