JMS multi thread best practise

Hi,
I would like to code a JMS layer that could be accessed by
a multi thread environment (a web app)
Is there any "Connection-Pool/DAO" equivalent design
pattern for JMS ?
Form what I know, connection are Thread Safe and Sessions
are not ...
Philippe

Many J2EE providers have their own JMS facades which provide pooling - so you could just use your container's JMS wrappers.
Another option, if you are inside a Servlet Engine, is to use Jencks which provides JMS & JDBC connection pooling as well as pooling of threads & message listeners & exception handling when consuming JMS messages.
e.g. here's inbound message consumption...
http://jencks.org/Message+Driven+POJOs
and here's outbound JMS (i.e. pooling when sending JMS messages etc)
http://jencks.org/Outbound+JMS
Jencks is basically a Spring based JCA container so it takes care of all the pooling for you as well as handling message inflow & outflow and can work with XA if you need it as well as local transactions.
James
http://logicblaze.com/

Similar Messages

  • Multi Threading in EJB by sending requests to JDBC or JMS queue

    Hi,
    I know that multi-threading is not permitted on EJB, but I'm planning an application which has to send a copule of requests to another system in parallel. So the EJB should be talking to any number of other systems at one time.
    In an application I would simply create some threads, and that's it. With EJB this is not possible, so I've come up with the following idea:
    A Queuing system will be implemented. This can be a simple table in a database or a message bean (JMS-Java Message Service). In both cases request objects have to be serialized into byte streams and stored as a Binary Object (e.g. Oracle BLOB) in the database or attach somehow to the JMS message.
    Some sort of queue processor looks at the queue, deserializes the requests, does something and sends back a response (again by serialization and through db or jms).
    Technically the db solution should work, I've been doing ths (de)serialization of java objects into an oracle blob, and it works. Creating a process which scans a database should also work, and with timestamps I can implement a queue.
    With JMS I'm not that sure, mainly because I'm not familiar with it :-). But as far as I know some JMS vendors (I do not remember who) are using database for messaging anyway.
    Any comments ?
    Thanks

    As I understand JMS, the database is used for persistence of messages before they are acknowledged.
    If persistence is turned on, once a message arrives on the queue, the message object is serialized and stored in the database with an appropriate primary key.
    When the consumer calls the receive() method the Message Object is sent to the consumer, when this acknowledged the corresponding entry is removed from the database.

  • What's wrong with my multi-threaded Matrix Mult. code? 1 thread is fastest

    For some reason, 1 thread performs the best. What's wrong with my implementation?
    import java.util.Random;
    import java.util.Date;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.concurrent.TimeUnit;
    public class Matrix {     
         private int values[][];
         private int rows;
         private int columns;
         public Matrix(int r, int c) {
              this.rows = r;
              this.columns = c;
              this.values = new int[r][c];
         private void randomize() {
              Random generator = new Random();
              for (int r = 0; r < this.rows; r++) {
                   for (int c = 0; c < this.columns; c++) {
                        this.values[r][c] = generator.nextInt(10);
         public String toString() {
              String out = "";
              for (int r = 0; r < this.rows; r++) {
                   for (int c = 0; c < this.columns; c++) {
                        if (c == 0) out += "[";
                        else out += "\t";
                        out += this.values[r][c];
                   out += "]\n";
              return out;
         public boolean equals(Object obj) {
              Matrix other = (Matrix) obj;
              if (this.columns != other.columns || this.rows != other.rows)  {
                   return false;
              for (int r = 0; r < this.rows; r++) {
                   for (int c = 0; c < this.columns; c++) {
                        if (this.values[r][c] != other.values[r][c]) {
                             return false;
              return true;
         // matrix multiplication using single thread
         public Matrix times(Matrix other) {
              assert(this.columns == other.rows);
              Matrix out = new Matrix(this.rows, other.columns);
              for (int r = 0; r < this.rows; r++) {
                   for (int c = 0; c < other.columns; c++) {
                        int dotProduct = 0;
                        for (int z = 0; z < this.columns; z++) {
                             dotProduct += this.values[r][z] * other.values[z][c];
                        out.values[r][c] = dotProduct;
              return out;
         // matrix multiplication with many threads
         public Matrix ptimes(Matrix other, int numberOfThreads) throws InterruptedException { // parallel
              assert(this.columns == other.rows);
              Matrix out = new Matrix(this.rows, other.columns);
              ExecutorService threadExecutor = Executors.newFixedThreadPool(numberOfThreads);
              for (int r = 0; r < this.rows; r++) {
                   for (int c = 0; c < other.columns; c++) {
                        threadExecutor.execute(new HelperThread(r, c, this, other, out));
              threadExecutor.shutdown();
              threadExecutor.awaitTermination(2, TimeUnit.DAYS);
              return out;
         private class HelperThread implements Runnable {
              private int row;
              private int col;
              private Matrix a;
              private Matrix b;
              private Matrix out;
              HelperThread(int r, int c, Matrix a, Matrix b, Matrix o) {
                   this.row = r;
                   this.col = c;
                   this.a = a;
                   this.b = b;
                   this.out = o;
              public void run() {
                   int dotProduct = 0;
                   for (int z = 0; z < a.columns; z++) {
                        dotProduct += this.a.values[row][z] * this.b.values[z][col];
                   this.out.values[row][col] = dotProduct;
         public static void main(String[] args) throws InterruptedException {
              int size = 100;
              Matrix a = new Matrix(size, size);
              a.randomize();     
              Matrix b = new Matrix(size, size);
              b.randomize();
              for (int t = 1; t < 15; t++) {
                   long start = new Date().getTime();
                   System.out.print(t + " threads: ");
                   Matrix c = a.ptimes(b, t);
                   //System.out.println(c);
                   long finish = new Date().getTime();
                   System.out.println((finish - start) + " milliseconds");
                   Matrix d = a.times(b);
                   assert(c.equals(d));
    }

    This one is even faster. On my dual core I get:
    Warmup
    Single Threaded
    5.20616 milliseconds
    5.52872 milliseconds
    5.12708 milliseconds
    5.59048 milliseconds
    5.16104 milliseconds
    5.1838 milliseconds
    5.37104 milliseconds
    5.1788 milliseconds
    5.18636 milliseconds
    5.15736 milliseconds
    Multi Threaded with 2 threads
    3.22184 milliseconds
    2.86552 milliseconds
    2.86284 milliseconds
    3.67032 milliseconds
    3.08032 milliseconds
    2.97388 milliseconds
    2.93084 milliseconds
    3.44012 milliseconds
    2.89744 milliseconds
    2.88136 milliseconds
    As you can see the Multi-Threaded versions are now faster.
        // matrix multiplication with many threads
        ExecutorService threadExecutor = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
        public Matrix ptimes(Matrix other) throws InterruptedException, ExecutionException {
            assert (this.columns == other.rows);
            Matrix out = new Matrix(this.rows, other.columns);
            Future futures[] = new Future[rows];
            for (int r = 0; r < this.rows; r++) {
                futures[r] = threadExecutor.submit(new HelperThread(r, this, other, out));
            for(Future f : futures) {
                f.get();
            return out;
        private class HelperThread implements Callable<Object> {
            private int row;
            private Matrix a;
            private Matrix b;
            private Matrix out;
            HelperThread(int r, Matrix a, Matrix b, Matrix o) {
                this.row = r;
                this.a = a;
                this.b = b;
                this.out = o;
            public String call() throws Exception {
                int dotProduct = 0;
                for (int c = 0; c < b.columns; c++) {
                    for (int z = 0; z < a.columns; z++) {
                        dotProduct += this.a.values[row][z] * this.b.values[z][c];
                    this.out.values[row][c] = dotProduct;
                return null;
        public static void main(String[] args) throws InterruptedException, ExecutionException {
            int size = 100;
            Matrix a = new Matrix(size, size);
            a.randomize();
            Matrix b = new Matrix(size, size);
            b.randomize();
            System.out.println("Warmup");
            for (int t = 0; t < 1000; t++) {
                Matrix c = a.ptimes(b);
                Matrix d = a.times(b);
                assert (c.equals(d));
            System.out.println("Single Threaded");
            for (int t = 0; t < 10; t++) {
                long start = System.nanoTime();
                Matrix d = a.times(b);
                long finish = System.nanoTime();
                System.out.println((finish - start)/1000000.0 + " milliseconds");
            System.out.println("Multi Threaded with " + Runtime.getRuntime().availableProcessors() + " threads");
            for (int t = 0; t < 10; t++) {
                long start = System.nanoTime();
                Matrix c = a.ptimes(b);
                long finish = System.nanoTime();
                System.out.println((finish - start)/1000000.0 + " milliseconds");
                Matrix d = a.times(b);
                assert (c.equals(d));
            System.exit(0);
        }

  • Oracle 8 on Linux in Multi-Thread mode

    I installed Oracle 8.0.5.0.0 on Linux RedHat 5.1
    But I cann't startup database in multi-threaed mode.
    When I try to startup DB the errors follow
    SVRMGR> startup;
    ORA-00101: invalid specification for system parameter
    MTS_DISPATCHERS
    ORA-00102: network protocol
    (ADDRESS=(PARTIAL=YES)(PROTOCOL=tcp)) cannot be used by
    dispatchers
    My configuration files are:
    listener.ora
    LISTENER =
    (ADDRESS_LIST =
    (ADDRESS= (PROTOCOL= IPC)(KEY= orcl))
    (ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))
    (ADDRESS= (PROTOCOL= TCP)(Host=
    pcstar.kharkov.ua)(Port= 1521))
    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (GLOBAL_DBNAME= pcstar.kharkov.ua)
    (ORACLE_HOME= /usr/oracle)
    (SID_NAME = orcl)
    (SID_DESC =
    (SID_NAME = extproc)
    (ORACLE_HOME = /usr/oracle)
    (PROGRAM = extproc)
    STARTUP_WAIT_TIME_LISTENER = 0
    CONNECT_TIMEOUT_LISTENER = 10
    TRACE_LEVEL_LISTENER = OFF
    tnslistener working normally
    tnsnames.ora
    extproc_connection_data =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = IPC)(KEY = orcl))
    (CONNECT_DATA = (SID = extproc))
    orcl =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL= TCP)(Host=
    pcstar.pcstar.kharkov.ua)(Port= 1521))
    (CONNECT_DATA = (SID = orcl))
    orcl_BEQ =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = BEQ)(PROGRAM = /usr/oracle)
    (argv0 = oracleorcl)
    (args = '(DESCRIPTION =
    (LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')
    (envs =
    'ORACLE_HOME=/usr/oracle,ORACLE_SID=orcl')
    initorcl.ora
    mts_dispatchers="tcp,1"
    mts_max_dispatchers=3
    mts_servers=1
    mts_max_servers=5
    mts_service=orcl
    mts_listener_address="(ADDRESS=(PROTOCOL=tcp)(Host=pcstar)(Por
    t=1521))"
    If anybody started server in Multi-Thread mode, mail me
    [email protected]
    Best Regards!
    Gennady Saldiga
    null

    Yes, the MTS for TCP protocol does not work. A patch will be
    released soon for the production release with the fix for
    the MTS problem.
    Maturi
    Satoshi Hirai (guest) wrote:
    : Gennady Saldiga (guest) wrote:
    : : I installed Oracle 8.0.5.0.0 on Linux RedHat 5.1
    : : But I cann't startup database in multi-threaed mode.
    : : When I try to startup DB the errors follow
    : : SVRMGR> startup;
    : : ORA-00101: invalid specification for system parameter
    : : MTS_DISPATCHERS
    : : ORA-00102: network protocol
    : : (ADDRESS=(PARTIAL=YES)(PROTOCOL=tcp)) cannot be used by
    : : dispatchers
    : : My configuration files are:
    : : listener.ora
    : : LISTENER =
    : : (ADDRESS_LIST =
    : : (ADDRESS= (PROTOCOL= IPC)(KEY= orcl))
    : : (ADDRESS= (PROTOCOL= IPC)(KEY= PNPKEY))
    : : (ADDRESS= (PROTOCOL= TCP)(Host=
    : : pcstar.kharkov.ua)(Port= 1521))
    : : SID_LIST_LISTENER =
    : : (SID_LIST =
    : : (SID_DESC =
    : : (GLOBAL_DBNAME= pcstar.kharkov.ua)
    : : (ORACLE_HOME= /usr/oracle)
    : : (SID_NAME = orcl)
    : : (SID_DESC =
    : : (SID_NAME = extproc)
    : : (ORACLE_HOME = /usr/oracle)
    : : (PROGRAM = extproc)
    : : STARTUP_WAIT_TIME_LISTENER = 0
    : : CONNECT_TIMEOUT_LISTENER = 10
    : : TRACE_LEVEL_LISTENER = OFF
    : : tnslistener working normally
    : : tnsnames.ora
    : : extproc_connection_data =
    : : (DESCRIPTION =
    : : (ADDRESS = (PROTOCOL = IPC)(KEY = orcl))
    : : (CONNECT_DATA = (SID = extproc))
    : : orcl =
    : : (DESCRIPTION =
    : : (ADDRESS = (PROTOCOL= TCP)(Host=
    : : pcstar.pcstar.kharkov.ua)(Port= 1521))
    : : (CONNECT_DATA = (SID = orcl))
    : : orcl_BEQ =
    : : (DESCRIPTION =
    : : (ADDRESS = (PROTOCOL = BEQ)(PROGRAM = /usr/oracle)
    : : (argv0 = oracleorcl)
    : : (args = '(DESCRIPTION =
    : : (LOCAL=YES)(ADDRESS=(PROTOCOL=BEQ)))')
    : : (envs =
    : : 'ORACLE_HOME=/usr/oracle,ORACLE_SID=orcl')
    : : initorcl.ora
    : : mts_dispatchers="tcp,1"
    : : mts_max_dispatchers=3
    : : mts_servers=1
    : : mts_max_servers=5
    : : mts_service=orcl
    mts_listener_address="(ADDRESS=(PROTOCOL=tcp)(Host=pcstar)(Por
    : : t=1521))"
    : : If anybody started server in Multi-Thread mode, mail me
    : : [email protected]
    : : Best Regards!
    : : Gennady Saldiga
    : Hi!
    : Same problem occured on my environment (Debian GNU/Linux 2.0).
    : But I succeeded to start Multi-thread server on ipc protocol.
    : My current configuration file (mts_* in init.ora) as follows:
    : mts_dispatchers="ipc,1"
    : mts_max_dispatchers=10
    : mts_servers=1
    : mts_max_servers=10
    : mts_service=orcl
    : # I confirmed mts_listener_address syntax by manual and
    : # v$parameter.
    : # Net8 Admn man says: If you have multiple MTS_LISTENER_ADDRESS
    : # parameters, they must be adjacent to each other in your
    : # initialization file.
    mts_listener_address="(ADDRESS=(PROTOCOL=TCP)(host=j-00872)(port=
    : 1521))"
    : mts_listener_address="(ADDRESS=(PROTOCOL=IPC)(KEY=orcl))"
    : So I tested MTS_DISPATCHERS parameter's other syntax.
    : The test results are:
    : # mts_dispatchers="ipc,1"
    : # OK
    : # mts_dispatchers="tcp,1"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="TCP,1"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="ipc,1","tcp,1"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="(ADDRESS=(PARTIAL=YES)(PROTOCOL=tcp))"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="(ADDRESS=(PARTIAL=NO)(PROTOCOL=tcp))"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="(ADDRESS=(PARTIAL=YES)(PROTOCOL=ipc))"
    : # OK
    : # mts_dispatchers="(PROTOCOL=IPC) (DISPATCHERS=3)"
    : # OK
    : # mts_dispatchers="(PROTOCOL=TCP) (DISPATCHERS=3)"
    : # ORA-00101,ORA-00102 occured
    : # mts_dispatchers="(ADDRESS=(PROTOCOL=IPC)(KEY=orcl))
    : (dispatchers=3)"
    : # OK
    mts_dispatchers="(ADDRESS=(PROTOCOL=TCP)(host=j-00872)(port=1521)
    : ) (dispatcher
    : s=3)"
    : # ORA-00101,ORA-00102 occured
    mts_dispatchers="(description=(ADDRESS=(PROTOCOL=IPC)(KEY=orcl))(
    : connect_data=
    : (sid=orcl))) (dispatchers=3)"
    : # OK
    mts_dispatchers="(description=(ADDRESS=(PROTOCOL=TCP)(host=j-0087
    : 2)(port=1521)
    : )(connect_data=(sid=orcl))) (dispatchers=3)"
    : # ORA-00101,ORA-00102 occured
    : ### While the test, sometimes ORA-00472 (ORA-00472: PMON
    process
    : ### terminated with error) occured when instance shutdown.
    : ### I think the error reported in another message
    : ### on the same thread.
    : It seems dispatcher is not binded to tcp protocol adapter.
    : Does anybody have more information about Multi-thread server
    : using TCP protocol.
    : ### Please forgive my bad english.
    : Thank you.
    : Satoshi Hirai
    null

  • The problem about multi-thread in java application

    i have problem with the multi-thread in java application, i don't know how to stop and restart a thread safely, because the function thread.stop(),thread.suspend() are both deprecated.
    now what i can only do is making the thread check a flag(true or false) to determine whether to start or to stop, but i think this thread will always be in the memory and maybe it will lower the performance of the system, as the program i am developping is working under realtime enviorement.
    please help me about it. thanks !

    hi,
    you can stop a thread by exiting it's run()-method which in terms can be done by checking the interrupted-flag:
    public void run(){
    while(interrupted()){ //if the thread consists of a loop
    or
    public void run(){
    if(interrupted())return;
    if(interrupted())return;
    or by the use of the return-statement anywhere withing the run-method. Afterwards, that is when the thread is no longer needed, you clear all the references to the specific thread object by setting them to null:
    Thread t;
    ... //working
    t.interrupt(); //interrupting
    while(t.isAlive()){
    Thread.yield(); //wait till thread t has stopped
    t=null;
    best regards, Michael

  • Best Practises for Email Addresses?

    Hi Guys,
    Are there any best practise guides / documents / etc. for configuring user's E-mail addresses? We have a large turnaround of users and obviously sometimes they have the same name as previous/current employees (we
    do not delete any old accounts / mailboxes.) My question is whether or not it is OK to use numbers in an email address (i.e. [email protected])?
    Thanks
    Stephen

    Hi,
    It's OK to use numbers in an email address.
    The format of email addresses is local-part@domain where the local-part may be up to 64 characters long and the domain name may have a maximum of 253 characters.
    The local-part of the email address may use any of these ASCII characters RFC 5322
    Uppercase and lowercase English letters (a–z, A–Z) (ASCII: 65-90, 97-122)
    Digits 0 to 9 (ASCII: 48-57)
    Characters !#$%&'*+-/=?^_`{|}~ (ASCII: 33, 35-39, 42, 43, 45, 47, 61, 63, 94-96, 123-126)
    Character . (dot, period, full stop) (ASCII: 46) provided that it is not the first or last character, and provided also that it does not appear two or more times consecutively (e.g. John..[email protected] is not allowed.).
    Special characters are allowed with restrictions. They are:
           Space and "(),:;<>@[\] (ASCII: 32, 34, 40, 41, 44, 58, 59, 60, 62, 64, 91-93)
           The restrictions for special characters are that they must only be used when contained between quotation marks, and that 3 of them (The space, backslash \ and quotation mark " (ASCII: 32, 92, 34)) must also
    be preceded by a backslash \ (e.g. "\ \\\"").
    For more information, please refer to this similar thread.
    https://social.technet.microsoft.com/Forums/exchange/en-US/69f393aa-d555-4f8f-bb16-c636a129fc25/what-are-valid-and-invalid-email-address-characters
    Best Regards.

  • What is the best way or best practise to access the session scoped component in servelt pipeline?

    Hi Experts,
    What is the best way or best practise to access the session scoped component in servelt pipeline?
    Please share your thoughts.
    Thanks,
    ankV

    To resolve components in the session scope you should be using DynamoHttpServletRequest.resolveName(). And of course the DynamoHttpServletRequest can also be used to resolve global and request scoped components so it is pretty handy to use. You can get the DynamoHttpServletRequest request associated with the current thread from ServletUtil.getCurrentRequest().
    You can also reference a session scoped component from another session (or request) scoped component's property file. E.g. to access profile component (which is session scoped) from your custom session scoped component you would typically do this:
    $class=com.company.MyCustomComponent
    $scope=session
    profile=/atg/userprofiling/Profile

  • I18N - Translation Best Practises?

    Hi.
    I always wanted to ask this, now my level of desperation is high enough again. Are there any translation best practises?
    Background: I've developed countless multi-language applications on NW2004s (7.0).
    I always tried to do the translation job at the end of the development phase, because I have the following pain points:
    1) Initial translation is easy (but really a joke): copy xlf file, rename it, translate contents, etc. That's fine. But if I add further elements, e.g. adding some UI elements to a view's layout, it's pain to add the deltas to the other xlf files. There is no automated way of adding the missing keys, at least I do not know a tool for eclipse. Is there one? Does SAP plan to provide such a tool? What's your best practise when it comes to translation of deltas?
    2) What I do is the following: I check out all xlf files and their corresponding property bundles (for what are they checked in anyways?), add the missing keys to all xlf files and generate the property bundles with right mouse click -> I18N tools -> Create properties file
    When I rebuild the web dynpro and test it, I often get a wild mixture of e.g. english and german texts on the same view. Even if all files are correct. Does anybody know this problem and can explain it?
    Thanks, Karsten

    Karsten,
    That is the standard approach for the Translations.
    1) - With my best of knowledge, there are no tools to copy the keys for .xlf files for other languages than english. You can write a simple java application, where it compares source and target files and inserts the missing keys in the .xlf file.
    2) May be the keys are not mapped properly to the new elements. That is the reason, you are seeing some in english and some in other languages. We will have the same problem quite often.
    From your NWDS - go to package Explorer - go your project - src folder.
    Open your .xlf file in Text Editor(Not in S2X editor)- copy the new element from english to german(.xlf ) file , change the text and rebuild the application.
    Now you will see correct results. Usual reason for this, missing keys or misplaced keys.
    these days, i am working new approach for translation, let me know how is this approach.
    Need your opinion on Web Dynpro Translations Approach
    Regards,
    Sridhar

  • Multi-threads will run better on multi-Processores environment?

    Are there any proof to say that Multi-threads will run better on multi-Processores environment?
    Will Java run better on multi-Processores environment? Are there any proof?
    Thank in advance

    Are there any proof?The proof is in the pudding, so to speak. The best thing to do is to benchmark your application on single and multi-processor machines.
    It should be noted that there are reports of threading problems with Java on multi-processor machines. I haven't seen the problems myself, nor do I remember the exact problems people were seeing (and on what OS/Hardware) but if you search these forums you should be able to find out the details.

  • How to use Multi Thread to make a animation

    Hello
    Currently i am writing a router simulator using Java SE 1.4.2. I am facing a problem that is I cannot use multithread to update my Jframe animation.
    Here i give my approach.
    My idea is I used a JPanel in JFrame and I used Graphics g draw all background in Jpanel and add it into Jframe. It works since there is no animation invovled. I want to do some animation based on this background which i draw. But all animation should be controled by other threads due to i want other threads can control all animation. But i hit a error which is nullpointexception. The reason looks like which i used another to do animation, it cannot find the reference which is point to the Jpanel and Jframe. May u teach me a correct way to do multi threads animation in Jframe? thanks.
    all the best and regards!

    A simple annimation moving a circle round a screen. This uses a model that defines the dynamics of the annimation, a view to display a visual representation of the model and an event system (observer/observable) to notify the view that the model has changed.
    I hope this helps.
    import java.awt.*;
    import javax.swing.*;
    import java.util.*;
    public class Test20041023 extends JFrame
        public Test20041023()
            super("Simple Annimation Demo");
            AnnimationModel annimationModel = new AnnimationModel();
            AnimationView animationView = new AnimationView(annimationModel);
            setContentPane(animationView);
            setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            pack();
        private static class AnimationView extends JPanel
            private static final int PREFERRED_WIDTH = 512;
            private static final int PREFERRED_HEIGHT = 256;
            AnimationView(AnnimationModel annimationModel)
                // Save a reference to the model for use
                // when the view is updated
                annimationModel_ = annimationModel;
                // Listen for the events indicating that the model has changed
                annimationModel_.addObserver(new Observer()
                    public void update(Observable o, Object arg)
                        // All we need to do is to get the view to repaint
                        AnimationView.this.repaint();
            public void paintComponent(Graphics g)
                super.paintComponent(g);
                // Update the view based on the information in the model.
                g.setColor(Color.red);
                // Convert the model positions to view positions
                // in this case by scaling to the actual width and height.          
                int xScreenPosition = scaleValue(annimationModel_.getX(), getWidth() - 20 ) + 5;
                int yScreenPosition = scaleValue(annimationModel_.getY(), getHeight() - 20 ) + 5;
                // Display the position of the point
                g.fillOval(xScreenPosition, yScreenPosition, 10, 10);
            private int scaleValue(double v, double size)
                return (int)((v+1.0)*0.5 * size + 0.5);
            public Dimension getPreferredSize()
                return new Dimension(PREFERRED_WIDTH, PREFERRED_HEIGHT);
            // The saved reference to the model
            private AnnimationModel annimationModel_;
        private static class AnnimationModel extends Observable
            AnnimationModel()
                Thread annimationThread = new Thread()
                    public void run()
                        // Loop forever updating the model
                        // and notifying the observers.
                        while(true)
                            // Wait 0.05 seconds until the next frame update point
                            try
                                sleep(50L);
                            catch (InterruptedException e)
                                // Nothing to do
                            // Update the model - in this case it is very simple
                            theta_ += 0.1;
                            // Notify the observers
                            setChanged();
                            notifyObservers();
                annimationThread.start();
            // Model access methods
            public double getX()
                return Math.cos(theta_);
            public double getY()
                return Math.sin(theta_);
            // The angular position of the point
            private double theta_;
        // Simple test main
        static public void main(String[] args)
            new Test20041023().setVisible(true);
    }

  • SSRS - Is there a multi thread safe way of displaying information from a DataSet in a Report Header?

     In order to dynamically display data in the Report Header based in the current record of the Dataset, we started using Shared Variables, we initially used ReportItems!SomeTextbox.Value, but we noticed that when SomeTextbox was not rendered in the body
    (usually because a comment section grow to occupy most of the page if not more than one page), then the ReportItem printed a blank/null value.
    So, a method was defined in the Code section of the report that would set the value to the shared variable:
    public shared Params as String
    public shared Function SetValues(Param as String ) as String
    Params = Param
    Return Params 
    End Function
    Which would be called in the detail section of the tablix, then in the header a textbox would hold the following expression:
    =Code.Params
    This worked beautifully since, it now didn't mattered that the body section didn't had the SetValues call, the variable persited and the Header displayed the correct value. Our problem now is that when the report is being called in different threads with
    different data, the variable being shared/static gets modified by all the reports being run at the same time. 
    So far I've tried several things:
    - The variables need to be shared, otherwise the value set in the Body can't be seen by the header.
    - Using Hashtables behaves exactly like the ReportItem option.
    - Using a C# DLL with non static variables to take care of this, didn't work because apparently when the DLL is being called by the Body generates a different instance of the DLL than when it's called from the header.
    So is there a way to deal with this issue in a multi thread safe way?
    Thanks in advance!
     

    Hi Angel,
    Per my understanding that you want to dynamic display the group data in the report header, you have set page break based on the group, so when click to the next page, the report hearder will change according to the value in the group, when you are using
    the shared variables you got the multiple thread safe problem, right?
    I have tested on my local environment and can reproduce the issue, according to the multiple safe problem the better way is to use the harshtable behaves in the custom code,  you have mentioned that you have tryied touse the harshtable but finally got
    the same result as using the ReportItem!TextBox.Value, the problem can be cuased by the logic of the code that not works fine.
    Please reference to the custom code below which works fine and can get all the expect value display on every page:
    Shared ht As System.Collections.Hashtable = New System.Collections.Hashtable
    Public Function SetGroupHeader( ByVal group As Object _
    ,ByRef groupName As String _
    ,ByRef userID As String) As String
    Dim key As String = groupName & userID
    If Not group Is Nothing Then
    Dim g As String = CType(group, String)
    If Not (ht.ContainsKey(key)) Then
    ' must be the first pass so set the current group to group
    ht.Add(key, g)
    Else
    If Not (ht(key).Equals(g)) Then
    ht(key) = g
    End If
    End If
    End If
    Return ht(key)
    End Function
    Using this exprssion in the textbox of the reportheader:
    =Code.SetGroupHeader(ReportItems!Language.Value,"GroupName", User!UserID)
    Links belowe about the hashtable and the mutiple threads safe problem for your reference:
    http://stackoverflow.com/questions/2067537/ssrs-code-shared-variables-and-simultaneous-report-execution
    http://sqlserverbiblog.wordpress.com/2011/10/10/using-custom-code-functions-in-reporting-services-reports/
    If you still have any problem, please feel free to ask.
    Regards
    Vicky Liu

  • Memory leaks and multi threading issues in managed client.

    In our company we use a lot of Oracle, and after the release of the managed provider we migrated all applications to it. First the  things were very impressive : the new client was faster, but after some days applications that uses 100MB with old client goes to 1GB and up. The memory is not the only issue, we use a lot of multi threading, and we experience connection drops and not disposal, after 1 days working one of the application had over 100 sessions on the server. I think there is something wrong with connection pool and multi threading.
    Is someone experience same problems.
    Yesterday we went back with unmanaged provider. Now things are back to normal.

    connection drops: did you try to use "Validate Connection=true" parameter in your connection string?
    the new client was faster: are you sure with this statement? Even in 64bit environment? I got quite serious performance problems when running application under 64bit process: https://forums.oracle.com/thread/2595323

  • How to write a multi threaded Cache Event Listener

    I have a distributed data cache called tokenCache for my application. I have also added a mapListener to this cache to listen to a particular kind of events.
    tokenCache.addMapListener((MapListener) new TokenCacheListenerBean(), new MapEventFilter(tokenFilter), false);
    So bascially everytime a token (The domain object of this cache) is updated the entryUpdated() method in my EJB TokenCacheListenerBean is invoked.
    The issue I have though is that, from what I observe on running my code is that the Cache Listener is single threaded. So if two Token Objects on my tokenCache are updated,
    lets say Token Object A and Token Object B one after the other,  the entryUpdated() method in my EJB is invoked for Token Object A and  once the invocation is complete
    then the entryUpdated() method is invoked again for Token Object B(). At a given point of time there is only one instance of TokenCacheListenerBean EJB.  Is there a way to
    make this happen in multi-threaded manner ?
    Is there a configuration setting somewhere which allows multiple CacheListeners to be instantiated at a given point of time ?
    TokenCacheListenerBean  EJB_
    package oracle.communications.activation.asap.ace;
    import java.util.Iterator;
    import java.util.Set;
    import java.util.logging.Logger;
    import javax.ejb.Stateless;
    import com.tangosol.net.NamedCache;
    import com.tangosol.util.MapEvent;
    import com.tangosol.util.MapListener;
    import com.tangosol.util.ValueUpdater;
    import com.tangosol.util.extractor.PofExtractor;
    import com.tangosol.util.extractor.PofUpdater;
    import com.tangosol.util.filter.EqualsFilter;
    import com.tangosol.util.filter.LikeFilter;
    import com.tangosol.util.filter.LimitFilter;
    import com.tangosol.util.processor.UpdaterProcessor;
    * Session Bean implementation class TokenCacheListenerBean
    @Stateless
    public class TokenCacheListenerBean implements TokenCacheListenerBeanRemote, TokenCacheListenerBeanLocal, MapListener {
    NamedCache asdlCache;
    NamedCache tokenCache;
    private final int PAGE_SIZE = 1;
    private static Logger logger = Logger.getLogger(ConnectionManager.class.getName());;
    * An instance of the JCAModeler EJB, represents the JCA-JNEP
    JCAModeler jcaBean;
    * Default constructor.
    public TokenCacheListenerBean() {
    // TODO Auto-generated constructor stub
    public void entryDeleted(MapEvent Event) {
    public void entryInserted(MapEvent Event) {
    public void entryUpdated(MapEvent Event) {
    Token newToken = (Token) Event.getNewValue();
    Token oldToken = (Token) Event.getOldValue();
    if ((oldToken.getState() == Token.TOKEN_RESERVED)
    && (newToken.getState()== Token.TOKEN_AVAILABLE)) {
    String networkID = newToken.getNeID();
    asdlCache = AceCacheFactory.getCache("asdlCache");
    tokenCache = AceCacheFactory.getCache("tokenCache");
    EqualsFilter filterNE = new EqualsFilter(new PofExtractor(String.class,Asdl.NETWORKID), networkID);
    LimitFilter limitFilter = new LimitFilter(filterNE, PAGE_SIZE);
    Set removeASDL = asdlCache.keySet(limitFilter);
    Iterator asdlIterator = removeASDL.iterator();
    if (asdlIterator.hasNext()) {
    logger.info(printASDLCache());
    ValueUpdater updater = new PofUpdater(Token.STATE);
    System.out.println("Token ID:" + newToken.getTokenID());
    UpdaterProcessor updaterProcessor = new UpdaterProcessor(updater, Integer.toString(Token.TOKEN_RESERVED));
    tokenCache.invoke(newToken.getTokenID(), updaterProcessor);
    jcaBean = new JCAModeler(tokenCache);
    Object asdlID = asdlIterator.next();
    Asdl provisionAsdl = (Asdl) asdlCache.get(asdlID);
    asdlCache.remove(asdlID);
    jcaBean.provision(provisionAsdl, newToken.getTokenID());
    logger.info(ConnectionManager.printTokenCache());
    logger.info(printASDLCache());
    }

    Here is what I am asking!
    I have added 2 listeners (Listener A and Listener B) which each listen on for changes made to 2 different token Cache Objects (Token A and Token B).
    for (i = 0; i < 2 ; i++) {
    Token tokenAdded = new Token(UUID.randomUUID().toString(),TOKEN_AVAILABLE, networkID);
    tokenCache.put(tokenAdded.getTokenID(), tokenAdded);
         tokenCache.addMapListener((MapListener) new TokenCacheListener(), tokenAdded.getTokenID(), false);
    Now assume that updates are made to Token A and Token B simuntaneosly.
    Why do i observe in my diagnostic messages that only one Listener is invoked at a given point of time.
    Which means I see Listener A getting invoked and then once invocation of Listener A is complete I see Listener B bieng invoked.
    Ideally I would want both listeners to be invoked simultaneously rather than in a one off fashion.
    Here is the code for my token cache Listener
    package oracle.communications.activation.asap.ace;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Set;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    import com.tangosol.net.CacheFactory;
    import com.tangosol.net.NamedCache;
    import com.tangosol.util.AbstractMapListener;
    import com.tangosol.util.Filter;
    import com.tangosol.util.MapEvent;
    import com.tangosol.util.MapListener;
    import com.tangosol.util.ObservableMap;
    import com.tangosol.util.ValueUpdater;
    import com.tangosol.util.extractor.PofExtractor;
    import com.tangosol.util.extractor.PofUpdater;
    import com.tangosol.util.filter.AndFilter;
    import com.tangosol.util.filter.EqualsFilter;
    import com.tangosol.util.filter.LikeFilter;
    import com.tangosol.util.filter.LimitFilter;
    import com.tangosol.util.processor.UpdaterProcessor;
    public class TokenCacheListener extends AbstractMapListener {
         NamedCache asdlCache;
         NamedCache tokenCache;
         AceCacheFactory cacheFactoryBean = new AceCacheFactory();
         private final int PAGE_SIZE = 1;
         private static Logger logger = Logger.getLogger(ConnectionManager.class
                   .getName());;
         * An instance of the JCAModeler EJB, represents the JCA-JNEP
         JCAModeler jcaBean;
         * This is a utility method and prints the tokens cache.
         public String printTokenCache() {
              NamedCache tokenCache = cacheFactoryBean.getCache("tokenCache");
              LikeFilter tokenList = new LikeFilter(new PofExtractor(String.class,
                        Token.STATE), "%", (char) 0, false);
              Set keySet = tokenCache.keySet(tokenList);
              StringBuffer cachedTokenList = new StringBuffer("\n################################## Token(s) Cache ##################################");
              int counter = 1;
              for (Object tokenInCache: keySet) {
                   Token tokenObject = (Token) tokenCache.get(tokenInCache.toString());
                   cachedTokenList.append("\nS.NO:" + (counter++)
                             + "\t ID:" + tokenInCache.toString()
                             + "\t State:" + Token.tokenToString(tokenObject.getState()));
              cachedTokenList.append("\n####################################################################################");
              return cachedTokenList.toString();     
         * This method is a utility method and it prints all the ASDL(s) currently present on the
         * asdlCache.
         private String printASDLCache() {
              NamedCache asdlCache = cacheFactoryBean.getCache("asdlCache");
              LikeFilter asdlList = new LikeFilter(new PofExtractor(String.class,
                                  Asdl.NETWORKID), "%", (char) 0, false);
              Set keySet = asdlCache.keySet(asdlList);
              StringBuffer cachedASDLList = new StringBuffer("\n################ ASDL Cache ######## ########");
              int counter = 1;
              for (Object asdlInCache: keySet) {
                   cachedASDLList.append("\nS.NO:" + (counter++) + "\t ID:" + asdlInCache.toString());
              cachedASDLList.append("\n################ ASDL Cache ######## ########\n");
              return cachedASDLList.toString();     
         public TokenCacheListener() {
         public void checkASDLCache(MapEvent Event) {
         // Not currently used
         public void entryUpdated(MapEvent Event) {
              Token newToken = (Token) Event.getNewValue();
              Token oldToken = (Token) Event.getOldValue();
              logger.info("\n=============================================================================================="
                        + "\nTOKEN CACHE LISTENER"
                        + "\n=============================================================================================="
                        + printTokenCache()
                        + "\n==============================================================================================");
              if ((oldToken.getState() == Token.TOKEN_RESERVED)
                        && (newToken.getState()== Token.TOKEN_AVAILABLE)) {
              String networkID = newToken.getNeID();
              asdlCache = cacheFactoryBean.getCache("asdlCache");
              tokenCache = cacheFactoryBean.getCache("tokenCache");
              EqualsFilter filterNE = new EqualsFilter(new PofExtractor(String.class,Asdl.NETWORKID), networkID);
              LimitFilter limitFilter = new LimitFilter(filterNE, PAGE_SIZE);
              Set removeASDL = asdlCache.keySet(limitFilter);
              Iterator asdlIterator = removeASDL.iterator();
              if (asdlIterator.hasNext()) {
              logger.info(printASDLCache());
              ValueUpdater updater = new PofUpdater(Token.STATE);
              System.out.println("Token ID:" + newToken.getTokenID());
              UpdaterProcessor updaterProcessor = new UpdaterProcessor(updater, Integer.toString(Token.TOKEN_RESERVED));
              tokenCache.invoke(newToken.getTokenID(), updaterProcessor);
              jcaBean = new JCAModeler(tokenCache);
              Object asdlID = asdlIterator.next();
              Asdl provisionAsdl = (Asdl) asdlCache.get(asdlID);
              asdlCache.remove(asdlID);
              jcaBean.provision(provisionAsdl, newToken.getTokenID());
              logger.info(printTokenCache());
              logger.info(printASDLCache());
    I only see one instance of this listener alive at any given point of time.
    Edited by: 807103 on Nov 3, 2011 1:00 PM
    Edited by: 807103 on Nov 3, 2011 1:12 PM

  • Any best practise to archive PO's which does not have corresponding invoice

    Hello,
             As part of initial implementation and conversion, We have a lot of PO's / LTA created but their corresponding invoices were never converted into SAP from legacy system.  SAP archiving program tags those as not business complete as the invoice qty does not match with po qty (there are no invoices to start with).  Just flagging 'delivery complete and final confirmation' of PO does not help.  Anybody ran into similar situation and how did they resolve it?  I am reluctant to enhance standard SAP archiving program to bypass those checks and that is my only last option. Any SAP recommended Note / best practise etc would help.
    Satyajit Deb

    Where is the invoice posted?
    was the invoice posted in the legacy system?
    Clearance of GR/IR account with MR11 will usually close such POs.

  • Multi-Threaded FTP

    Multi-Threaded FTP was a huge attraction for me, and one of the features that sold me on upgrading to Dreamweaver CS6.  However, I haven't seen any sign of it in the product or any documentation to help me use it.  My files keep transferring in the traditional one-at-a-time way.
    Is there something I need to do to enable this feature? Has anybody used this feature yet?

    Might not help but I saw this in the comments on David Powers' blog
    http://foundationphp.com/blog/2012/04/23/my-verdict-on-dreamweaver-cs6/
    "Multi-thread FTP is the default in Dreamweaver CS6. You can neither turn it on nor off. It handles a maximum of three transfers simultaneously in either direction (so you can download at the same time as uploading). However, it doesn’t work with Check In/Check Out."
    He also has the following comments in the body of the blog entry:
    Multichannel FTP
    Let’s be honest. In the past, Dreamweaver’s FTP client was a dog. Not any more. It now supports multichannel transfers, and can even download at the same time as uploading. Orange arrows indicate items queued for transfer. When the transfer begins, the arrow turns green. And if you’re transferring a large item, hovering over the filename displays a tooltip of how much of the file has been transferred. With Dreamweaver CS5.5, it took more than 90 minutes to  upload a WordPress site on my internet connection. Now, it’s more than ten times faster.
    The FTP error messages are also more meaningful. No one is likely to buy Dreamweaver CS6 for its FTP client alone, but this is a major improvement to the program.

Maybe you are looking for

  • Calling URL when click on buttons using web dynpro - ABAP

    Hi All, I am new to web dynpro application development and i am facing issue when i try to test my application. simple require when i click on button i should direct the to one of url say 'http://www.google.co.in/' my application is activate with no

  • Any suggestion for tuning following code of fetching prompts from report.

    Hi Experts, In my application I want to fetch all prompts details from SAP BO.  I am using following code and its working fine but taking to much time in fetching data. public static ReportEngine reportEngineWebi = null;   public static ReportEngine

  • Dvd burned onto rev drive??????  HELP!

    I clicked on burn in dvd studio pro and it formatted the dvd to my rev drive that was attached via firewire. Now I can't erase the files off my rev and it is useless. Has this ever happened to anyone and how do I make my rev drive a normal hard drive

  • Lightroom Interface Slowdown

    Anyone know why I am experiencing extreme slowdowns, lockups and sometimes crashes whenever I try to hide or show a lightroom panel. I sometimes see multiple lightroom windows open in the taskbar while this is happening, if I hover over them in the t

  • Drop down menu in dreamweaver

    My drop down menu, when I hover to it show underneath the slide show image. how to bring it up