Implementing FSM's with Threads, soliciting design opinions

I'm currently designing a system that has some unusual requirements and was hoping to solicit the esteemed opinions available at this forum regarding a potential design that may be interpreted as an abuse of Threads.
This system consists of a large collection of Finite State Machines that transition from state to state based on events originating from both within and without the system.
Each event coming into the system is targeted to a particular FSM. It is critical to the system that the events be serviced by the FSM instantaneously. The system should consume and process events as fast as they come in and not get backlogged.
I would like to optimize the number of FSM's that can be hosted by a single instance of the system before backlogging occurs. Ideally the system should be adaptive and detect when it is not servicing events as quickly as possible and begin to shutdown FSM's until it detects that it is operating at peak efficiency.
The design I'm considering entails using an instance of a Thread and a Queue for each FSM instance in the system. There may be as many as 3000 or so FSM's altogether. Additionally I would have a Thread servicing each event source, of which there are only a handful, and it would be this Thread's job to receive and dispatch an event to the appropriate Queue for the particular FSM for which the event is targeted.
I envision the FSM's Thread wait()ing on the monitor on the Queue and having the event dispatcher Thread performing the notify() after enqueing the event. Using this design allows me to have yet another Thread that will periodically peek at the size of the Queues to ensure that they are consistently near empty. If the Queue's begin to get backlogged, then the Monitoring Thread can begin shutting down FSM Threads until the optimum number of active FSM's Threads is achieved.
What I don't like about this design is the potentially large number of Threads being instantiated. I would appreciate and welcome suggestions for a better way of doing this.
Thanks,
-S

Bob, Matfud,
First I'd like to thank both of you for taking the time to reply. I must admit that I originally wanted to approach the problem in a manner similar to your respective suggestions and indeed solicited opinions here because I also was uncomfortable with the waste in having so many threads. However there are some issues which still steer me in that direction.
If I were to use a single Queue up front as suggested then the disparate event sources would be forced to synchronize on every event thus limiting to some extent concurrency. By having separate Queues, the only time synchronization comes into play is when two or more event sources have events targeted to the same FSM at the same time. On a multiprocessor box this allows me to have disparate events dispatched simultaneously rather than sequentially in most cases. I feel that this would add a considerable degree of liveness and concurrency to the system.
With regard to employing a Thread pool, I like the idea as it would give me better control over the number of simultaneously executing Threads as is indeed the case with Session beans. However, I'm not sure that it provides optimal utilization of resources, but rather consistent utilization of resources. Finding the Thread pool dry may not indicate that I'm already using maximum resources but may instead just be a sign that I did not allocate a sufficient number of Threads to the pool.
Nevertheless, my main reason for considering independent Threads per Finite State Machine is also one of concurrency. Consider the following scenario: Two event sources receive two separate events, both targeted for the same FSM. If the event dispatcher were to pluck two Threads from the Thread pool and allow each to attempt to inflict their respective events on the FSM, then I'll need to provide a good deal of synchronization within the FSM as a single FSM cannot service multiple events concurrently, but by definition must service them in sequence thus triggering state transitions. On the other hand, if each FSM is a Thread of its own, then it will wait() until notified that there is an event on the Queue and will pull and process one event at a time until the Queue is drained upon which time it will return to its idle state and wait() again until notified. In this scenario the FSM's processing need not be synchronized since it is pulling the event, and only the momentary access of its Queue requires synchronization.
Matfud, to your point the amount of work per transaction will involve a number of calculations and decision making. Overall considerably more processor effort will reside in the FSM logic as opposed to the event queueing and dispatching mechanism. With regard to interaction between FSM's, there is none.
Again I want to thank you both for your suggestions. I look forward to your responses as I eagerly want someone to convince me to abandon the design I have so far in favor of something more elegant and performant.
bob_boothby, matfud, mattbunch, dubwai, YATArchivist, DrClap, warnerja, sylviae, jschell, kdgregory, somebody, anybody, please talk me out of doing this.
-S

Similar Messages

  • Design issue with threads ...

    Hello,
    I need your thoughts in how to proper use java threads in solving this issue:
    * I have an application that query a database for a list of users, and for each row retrieved from the database as a result the application should process that user and send him an email.
    Now the procdural approach for looping each user and send him an email at a time is not convinient as the number of users is big (20,000 users or more) so I thought of why not to use threads to send say every 300 user at a time (i.e, creating 300 threads), but the problem is that I cannot really figure how to manage those threads, to make sure that there are 300 threads are running all the time, and what if a thread was taking more time that the others ... etc.
    So, is this approach is the right one, and can you guide more more for how to control the threads this way, if not what do you suggest?
    Your guidance is highly appreciated,
    tamer

    I'm not sure that threads will help your cause. But they could. Let me explain:
    Threads have several purposes. Two instantly spring to mind:
    1. to make things faster.
    2. to (make it seem like you) do two (or more things) at once.
    First #2. This is often a usability issue. For example, a web server has to server multiple clients at the "same time". This is often done with threads - it gives the illusion that many concurrent users are supported. In reality the CPU/JVM is swapping beween the different requests. More CPUs allow for "realer" concurrency. Speed is only a by-product here.
    Now #1: Make things faster. Threading works well for speed when the tasks being done differ.
    For example, consider human multithreading: ask me to whistle for 5 seconds, and 5 seconds later I'll be done. Then ask me to scratch my head with both hands for 5 seconds, and 5 seconds later I'll be done. Total: 10 seconds. Ask me to do both at the same time. Result: 5 seconds later I'll have scratched my head and whistled for 5 seconds. 50% time saving.
    However, ask me to touch type for 5 seconds, and scratch my head for 5 seconds, it'll take 10 seconds or more. If you ask me to do one, then the other, I can spend 5 seconds at one then the other - total 10 seconds. Ask me to do both concurrently, and I'll take more than 10 seconds, as I'll be moving my hands back and forth from the keyboard to my head, and vice-versa.
    I have a feeling that running multiple threads in your case would be like asking you to scratch your head and scratch your head all at the same time. But this may not strictly hold true for several reasons:
    1. your DB should scale, i.e. handle two simultaneous requests faster than two concurrent requests. However, this will probably not be true of 300 simultaneous requests being faster than 300 concurrent (or 50 * 6-concurrent requests).
    2. if you are in a multi-CPU environment then some concurrentcy improvements would be expected (more hands for head scratching).
    3. your application does two things: reads a DB and sends a mail. While sending one mail, you should be albe to concurrently read the next record. i.e. concurrency is supported here, as you don't have resource contention here.
    So, you will probably get some benefit from threads. Adding too many will only slow you down, as there'll be too much time spend task switching, as you'll suffer resource contenion on the DB/mail server.
    I suggest that you run your program with several configurations, i.e. number of threads, and see what one gives the best results. For fast results, I'd suggests trying the following number of threads:
    1, 2, 4, 8, 16, 32, 64, 128, 256, ...
    when things start to slow down, you know where to search for your optimum thread number. You could also do with profiling your application if speed is a very pressing issue.
    Finally, one clarification: this is not OO. You could do multi-threading in a procedural environment.
    Good luck.
    if you are running on a multi-CPU environment, then the DB

  • Webinar: How to implement secure scenarios with SAP NW PI 7.1

    SAP Intelligence Platform & NetWeaver RIG APJ Expert Call
    Dear valued SAP Experts,
    Next SAP Intelligence Platform & NetWeaver RIG Expert Call Session will take place on Tuesday, August 18.
    The SAP Intelligence Platform & NetWeaver RIG Expert Call Sessions are designed to support consultants, partners and customers  during their implementation projects. The sessions cover all different aspects of SAP NetWeaver and are aimed at
    thus provide knowledge which is not available via standard training courses. The session duration is typically 60min and includes questions and answers.
    Tuesday, August 18, 2009:
    How to implement secure scenarios with SAP NetWeaver Process Integration 7.1
    Time: 2.00 - 3.00 p.m. Singapore Time (UTC +8)
    This event will feature Makoto Sugishita with the SAP Intelligence Platform & NetWeaver Regional Implementation Group.
    Makoto provides the following abstract:
    In this session you will learn more about the core security concepts that are provided with the service-oriented architecture (SOA)
    management capabilities in SAP NetWeaver Process Integration (SAP NetWeaver PI). This session will cover main use cases and
    supported scenarios of secure SAP NetWeaver PI deployments. 
    SAP Connect Link: https://sap.emea.pgiconnect.com/I016095
    (no passcode needed)
    Dial in:
    For dial in details please register here http://www.surveymonkey.com/s.aspx?sm=EFeuZl9PxrwKOW5i5W556g_3d_3d
    Kind regards,
    Sarma Sishta
    SAP Intelligence Platform & NetWeaver RIG APJ

    hi,
    I'm making this a sticky thread till August 18 so it will have better visibility
    Regards,
    Michal Krawczyk

  • Thread Pool design

    I have one service that processes messages, now I want it to run it in multi threads so it can execute faster. Now my question is how can I make thread pool- what is best design. Since I dont want to create n number of thereads to process n number of messages, I should create thread pool with predefined number of threads.
    So my main program will do something like this
    1)Check thread pool - if available
    2)If available create tak and execute
    3)If not wait (how to wait???)
    4)Once thread has done it should be available for next processing if requred.
    Thanks in advance.

    I am not using put, I am not directly using array queue, what I understand is like its for its internal use. Here is what I am trying with,
    Thread pool  class
    import java.util.concurrent.BlockingQueue;
    import java.util.concurrent.ThreadPoolExecutor;
    import java.util.concurrent.TimeUnit;
    public class MyThreadPool extends ThreadPoolExecutor {
         public MyThreadPool(int corePoolSize, int maximumPoolSize, long keepAliveTime,
                   TimeUnit unit, BlockingQueue<Runnable> queue) {
              super(corePoolSize, maximumPoolSize, keepAliveTime, unit, queue);
    Thread- Runnable object
    public class MyThread implements Runnable{
         public void run() {
              System.out.println("This is MyThread running...");
              try {
                   Thread.currentThread().sleep(1*5*1000);
                   System.out.println("Complted...");
              } catch (InterruptedException e) {
                   e.printStackTrace();
    Main program
    public class MyClient {
         public static void main(String[] args) {
              ArrayBlockingQueue queue = new ArrayBlockingQueue(5, false);
              MyThreadPool myThreadPool = new MyThreadPool(5, 5, 1, TimeUnit.SECONDS, queue);
              for (int i = 0; i < 6; i++) {
                   MyThread t = new MyThread();
                   if(myThreadPool.getTaskCount() != 1)
                        myThreadPool.submit(t);
    }now see my queue size is 5 and I am submitting 6 jobs to execute. When I run main class, it runs all jobs and program never terminates.
    Output:
    This is MyThread running...
    This is MyThread running...
    This is MyThread running...
    This is MyThread running...
    This is MyThread running...
    Complted...
    This is MyThread running...
    Complted...
    Complted...
    Complted...
    Complted...
    Complted...
    Edited by: Miral on Apr 8, 2009 2:16 PM
    Edited by: Miral on Apr 8, 2009 2:17 PM
    Edited by: Miral on Apr 8, 2009 2:17 PM

  • Problem with Thread and InputStream

    Hi,
    I am having a problem with threads and InputStreams. I have a class which
    extends Thread. I have created and started four instances of this class. But
    only one instance finishes its' work. When I check the state of other three
    threads their state remains Runnable.
    What I want to do is to open four InputStreams which are running in four
    threads, which reads from the same url.
    This is what I have written in my thread class's run method,
    public void run()
         URL url = new URL("http://localhost/test/myFile.exe");
    URLConnection conn = url.openConnection();
    InputStream istream = conn.getInputStream();
    System.out.println("input stream taken");
    If I close the input stream at the end of the run method, then other threads
    also works fine. But I do not want to close it becuase I have to read data
    from it later.
    The file(myFile.exe) I am trying to read is about 35 MB in size.
    When I try to read a file which is about 10 KB all the threads work well.
    Plz teach me how to solve this problem.
    I am using JDK 1.5 and Win XP home edition.
    Thanks in advance,
    Chamal.

    I dunno if we should be doing such things as this code does, but it works fine for me. All threads get completed.
    public class ThreadURL implements Runnable
        /* (non-Javadoc)
         * @see java.lang.Runnable#run()
        public void run()
            try
                URL url = new URL("http://localhost:7777/java/install/");
                URLConnection conn = url.openConnection();
                InputStream istream = conn.getInputStream();
                System.out.println("input stream taken by "+Thread.currentThread().getName());
                istream.close();
                System.out.println("input stream closed by "+Thread.currentThread().getName());
            catch (MalformedURLException e)
                System.out.println(e);
                //TODO Handle exception.
            catch (IOException e)
                System.out.println(e);
                //TODO Handle exception.
        public static void main(String[] args)
            ThreadURL u = new ThreadURL();
            Thread t = new Thread(u,"1");
            Thread t1 = new Thread(u,"2");
            Thread t2 = new Thread(u,"3");
            Thread t3 = new Thread(u,"4");
            t.start();
            t1.start();
            t2.start();
            t3.start();
    }And this is the o/p i got
    input stream taken by 2
    input stream closed by 2
    input stream taken by 4
    input stream closed by 4
    input stream taken by 3
    input stream closed by 3
    input stream taken by 1
    input stream closed by 1
    can u paste your whole code ?
    ram.

  • How to use Object types with inheritance in design editor

    Does anyone know how to implement Oracle object sub types in Design editor.
    Is there a way of using the Database design transformer to convert entities to Object types rather than tables?
    Thanks in anticipation
    David

    What database and connection type are you using? Are you connecting the report directly to the database, or trying to assign the datasource to object data?
    It sounds like you might be trying to use a linked list, collection or other C# construct to pass your data in. This currently isn't supported by the Crystal Reports SDK. You can use a DataSet or a DataTable, and possibly also an IDataReader depending on which version of Crystal Reports you're referencing in your project. Of course you can also connect directly to the database, even if the database isn't on the same machine as the application.
    The way to show master records with detail information is through the use of subreports and linked subreport parameters. Linked subreports take their parameter value from a record in the main report, so that only the data appropriate to that master record is displayed. The guys over in the [report design|SAP Crystal Reports; forum can help you out with this if you have questions on the specifics.

  • Implementing a Webservice with AXIS, which calls CORBA objects

    Hi @all!
    First my aim is it to invoke a Webservice by a Client. As toolkit for developing this Webservice I use AXIS 1.0. This Webservice in turn should establish a CORBA connection to a third application.
    A direct access to the CORBA objects without the AXIS Webservice works fine. The Webservice without the Corba access is also running errorfree.
    When trying to implement a Webservice with AXIS, which calls CORBA objects following fault was generated:
    "internal Server Error(500)".
    Are there known problems with AXIS in conjunction with CORBA?

    Okay here's the error log file:
    1000 of lines, which aren't very helpful for me.
    As ORB I use JacORB.
    AxisFault
    faultCode: {http://xml.apache.org/axis/}HTTP
    faultString: (500)Internal Server Error
    faultActor: null
    faultDetail:
         null: return code: 500
    <html><head><title>Apache Tomcat/4.1.18 - Error report</title><STYLE><!--H1{font-family : sans-serif,Arial,Tahoma;color : white;background-color : #0086b2;} H3{font-family : sans-serif,Arial,Tahoma;color : white;background-color : #0086b2;} BODY{font-family : sans-serif,Arial,Tahoma;color : black;background-color : white;} B{color : white;background-color : #0086b2;} HR{color : #0086b2;} --></STYLE> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade><p><b>type</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>javax.servlet.ServletException: Servlet execution threw an exception
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
         at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
         at java.lang.Thread.run(Thread.java:484)
    </pre></p><p><b>root cause</b> <pre>java.lang.NoClassDefFoundError: org/omg/PortableServer/POAOperations
         at java.lang.Class.forName0(Native Method)
         at java.lang.Class.forName(Class.java:195)
         at org.apache.axis.utils.ClassUtils$2.run(ClassUtils.java:187)
         at java.security.AccessController.doPrivileged(Native Method)
         at org.apache.axis.utils.ClassUtils.loadClass(ClassUtils.java:171)
         at org.apache.axis.utils.ClassUtils.forName(ClassUtils.java:154)
         at org.apache.axis.utils.cache.ClassCache.lookup(ClassCache.java:122)
         at org.apache.axis.providers.java.JavaProvider.getServiceClass(JavaProvider.java:502)
         at org.apache.axis.providers.java.JavaProvider.initServiceDesc(JavaProvider.java:535)
         at org.apache.axis.handlers.soap.SOAPService.getInitializedServiceDesc(SOAPService.java:322)
         at org.apache.axis.deployment.wsdd.WSDDService.makeNewInstance(WSDDService.java:477)
         at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getNewInstance(WSDDDeployableItem.java:312)
         at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:298)
         at org.apache.axis.deployment.wsdd.WSDDDeployment.getServiceByNamespaceURI(WSDDDeployment.java:503)
         at org.apache.axis.configuration.FileProvider.getServiceByNamespaceURI(FileProvider.java:273)
         at org.apache.axis.MessageContext.getPossibleOperationsByQName(MessageContext.java:226)
         at org.apache.axis.message.BodyBuilder.onStartChild(BodyBuilder.java:150)
         at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:893)
         at org.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:459)
         at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:221)
         at org.apache.xerces.impl.XMLNamespaceBinder.handleStartElement(XMLNamespaceBinder.java:874)
         at org.apache.xerces.impl.XMLNamespaceBinder.emptyElement(XMLNamespaceBinder.java:591)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:747)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1477)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:329)
         at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:525)
         at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:581)
         at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
         at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1175)
         at javax.xml.parsers.SAXParser.parse(SAXParser.java:394)
         at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:232)
         at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:546)
         at org.apache.axis.Message.getSOAPEnvelope(Message.java:377)
         at org.apache.axis.server.AxisServer.invoke(AxisServer.java:304)
         at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:701)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
         at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:335)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
         at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
         at java.lang.Thread.run(Thread.java:484)
    </pre></p><HR size="1" noshade><h3>Apache Tomcat/4.1.18</h3></body></html>
    (500)Internal Server Error
         at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:630)
         at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:131)
         at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
         at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156)
         at org.apache.axis.SimpleChain.invoke(SimpleChain.java:126)
         at org.apache.axis.client.AxisClient.invoke(AxisClient.java:182)
         at org.apache.axis.client.Call.invokeEngine(Call.java:2113)
         at org.apache.axis.client.Call.invoke(Call.java:2102)
         at org.apache.axis.client.Call.invoke(Call.java:1851)
         at org.apache.axis.client.Call.invoke(Call.java:1777)
         at org.apache.axis.client.Call.invoke(Call.java:1315)
         at CsbClient.main(CsbClient.java:82)
    [INFO] enterprise - -Mapping Exception to AxisFault <(500)Internal Server Error>
    (WSDDDeployableItem.java:312)
         at org.apache.axis.deployment.wsdd.WSDDDeployableItem.getInstance(WSDDDeployableItem.java:298)
         at org.apache.axis.deployment.wsdd.WSDDDeployment.getServiceByNamespaceURI(WSDDDeployment.java:503)
         at org.apache.axis.configuration.FileProvider.getServiceByNamespaceURI(FileProvider.java:273)
         at org.apache.axis.MessageContext.getPossibleOperationsByQName(MessageContext.java:226)
         at org.apache.axis.message.BodyBuilder.onStartChild(BodyBuilder.java:150)
         at org.apache.axis.encoding.DeserializationContextImpl.startElement(DeserializationContextImpl.java:893)
         at org.apache.xerces.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:459)
         at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:221)
         at org.apache.xerces.impl.XMLNamespaceBinder.handleStartElement(XMLNamespaceBinder.java:874)
         at org.apache.xerces.impl.XMLNamespaceBinder.emptyElement(XMLNamespaceBinder.java:591)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:747)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1477)
         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:329)
         at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:525)
         at org.apache.xerces.parsers.DTDConfiguration.parse(DTDConfiguration.java:581)
         at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:152)
         at org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1175)
         at javax.xml.parsers.SAXParser.parse(SAXParser.java:394)
         at org.apache.axis.encoding.DeserializationContextImpl.parse(DeserializationContextImpl.java:232)
         at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:546)
         at org.apache.axis.Message.getSOAPEnvelope(Message.java:377)
         at org.apache.axis.server.AxisServer.invoke(AxisServer.java:304)
         at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:701)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
         at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:335)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
         at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:260)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415)
         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
         at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
         at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
         at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223)
         at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:432)
         at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:386)
         at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:534)
         at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:530)
         at java.lang.Thread.run(Thread.java:484)
    </pre></p><HR size="1" noshade><h3>Apache Tomcat/4.1.18</h3></body></html>
    (500)Internal Server Error
         at org.apache.axis.transport.http.HTTPSender.readFromSocket(HTTPSender.java:630)
         at org.apache.axis.transport.http.HTTPSender.invoke(HTTPSender.java:131)
         at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:71)
         at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:156)
         at org.apache.axis.SimpleChain.invoke(SimpleChain.java:126)
         at org.apache.axis.client.AxisClient.invoke(AxisClient.java:182)
         at org.apache.axis.client.Call.invokeEngine(Call.java:2113)
         at org.apache.axis.client.Call.invoke(Call.java:2102)
         at org.apache.axis.client.Call.invoke(Call.java:1851)
         at org.apache.axis.client.Call.invoke(Call.java:1777)
         at org.apache.axis.client.Call.invoke(Call.java:1315)
         at CsbClient.main(CsbClient.java:82)
    Exception in thread "main"

  • Populate a PDF done with Adobe Livecycle Designer

    I have a pdf from an institution and I have been asked to populate it directly with data saved in an excel file. I have found that the pdf was done with adobe livecycle designer and with that program I can see the name of the fields in the form.
    The pdf can be found in:
    https://sedeelectronica.bde.es/f/websede/content/SPA/Form_TRA_clientes.pdf
    I have thought to use a VB macro in the excel file to populate the pdf. I have been searching on Internet but by now, I am only able to read the values of the fields, but I can't change them. I know that the code below doesn't work with XFA Forms, but I have read a lot of documentation and I can't find anything else.
    Here is the code:
    Set gApp = CreateObject("AcroExch.app")
    Set avDoc = CreateObject("AcroExch.AVDoc")
    If avDoc.Open(FileNm, "") Then
       Set pdDoc = avDoc.GetPDDoc()
       Set jso = pdDoc.GetJSObject()
    jso.Getfield("FrmSolicitudTransferenciaEuros[0].FormContent[0].ordena nte[0].datosOrdenanteExterno[0].ordenante[0]").Value  = "new value"
        pdDoc.Save 1, FileNm
        pdDoc.Close
    End If
    avDoc.Close (True)
    Can anybody write an example explaining how to do that with XFA?
    Thank you in advance.

    You might want to instead use an XML schema to map cells in your Excel spreadsheet to fields in your form. Then you would just export the XML data from your spreadsheet and import it into your form to populate the fields.
    That should get you started. Refer to Excel and LiveCycle Designer documentation for further details.
    Kyle

  • Need help with threads?.. please check my approach!!

    Hello frnds,
    I am trying to write a program.. who monitors my external tool.. please check my way of doing it.. as whenever i write programs having thread.. i end up goosy.. :(
    first let me tell.. what I want from program.. I have to start an external tool.. on separate thread.. (as it takes some time).. then it takes some arguments(3 arguments).. from file.. so i read the file.. and have to run tool.. continously.. until there are arguments left.. in file.. or.. user has stopped it by pressing STOP button..
    I have to put a marker in file too.. so that.. if program started again.. file is read from marker postion.. !!
    Hope I make clear.. what am trying to do!!
    My approach is like..
    1. Have two buttons.. START and STOP on Frame..
    START--> pressed
    2. check marker("$" sign.. placed in beginning of file during start).. on file..
         read File from marker.. got 3 arg.. pass it to tool.. and run it.. (on separate thread).. put marker.. (for next reading)
         Step 2.. continously..
    3. STOP--> pressed
         until last thread.. stops.. keep running the tool.. and when last thread stops.. stop reading any more arguments..
    Question is:
    1. Should i read file again and again.. ?.. or read it once after "$" sign.. store data in array.. and once stopped pressed.. read file again.. and put marker ("$" sign) at last read line..
    2. how should i know when my thread has stopped.. so I start tool again??.. am totally confused.. !!
    please modify my approach.. if u find anything odd..
    Thanks a lot in advance
    gervini

    Hello,
    I have no experience with threads or with having more than run "program" in a single java file. All my java files have the same structure. This master.java looks something like this:
    ---master.java---------------------------------------------------
    import java.sql.*;
    import...
    public class Master {
    public static void main(String args []) throws SQLException, IOException {
    //create connection pool here
    while (true) { // start loop here (each loop takes about five minutes)
    // set values of variables
    // select a slave process to run (from a list of slave programs)
    execute selected slave program
    // check for loop exit value
    } // end while loop
    System.out.println("Program Complete");
    } catch (Exception e) {
    System.out.println("Error: " + e);
    } finally {
    if (rSet1 != null)
    try { rSet1.close(); } catch( SQLException ignore ) { /* ignored */ }
    connection.close();
    -------end master.java--------------------------------------------------------
    This master.java program will run continuously for days or weeks, each time through the loop starting another slave process which runs for five minutes to up to an hour, which means there may be ten to twenty of these slave processes running simultaneously.
    I believe threads is the best way to do this, but I don't know where to locate these slave programs: either inside the master.java program or separate slave.java files? I will need help with either method.
    Your help is greatly appreciated. Thank you.
    Logan

  • Question  about dynamic class loading with thread built in

    Hi ,
    I am trying to load a class with a thread built in from the network.
    I write my network classloader, convert the class to a byte array and transmit over the network using socket. This step seems fine but when I tried to load the class at the receiver, some exception happens,"
    the reported exception is that :
    Exception in thread "Thread-2" java.lang.NoClassDefFoundError: SampleProject/Application$1
    my class name is "SampleProject . Application", the $1 I think it may refers to the thread built in the "Application".
    Could any one give me some hint for how to dynamic load such class file with thread built in over the network?
    Thank you!
    Best Regards,
    Song Guo

    Exception in thread "Thread-2"
    java.lang.NoClassDefFoundError:
    SampleProject/Application$1That means that the receiving end can't find an anonymous inner class which you have in the Application class. (The anonymous clas is given the synthetic name 1). Check your bin/classes folder you will have a class there with the name Application$1.class
    Kaj

  • Need to implement auto suggest with multiple select in a input text field

    Hi,
    Jdev Ver: 11.1.1.4
    My requirement is to create an input field where i can provide auto suggest and user can enter multiple email ids. It is similar to current "To" field while composing a mail in Gmail.
    Problem:
    I have implemented input box with auto suggest. For the first entry it works fine. when i enter 2nd value(i have used ',' (comma) as separator and handled it in 'suggestItems' bean method to take sub-string after comma for providing the suggestion) , after selection.... the first value get lost. So at a time only one value is selected in the input text.
    Input text:
    <af:inputText label="Names" id="it21" rows="2"
    columns="50" simple="true"
    valueChangeListener="#{VisitBackingBean.visitMembersInputBoxCL}"
    binding="#{VisitBackingBean.visitMembersInputBox}">
    <af:autoSuggestBehavior suggestItems="#{VisitBackingBean.onSuggest}"/>
    </af:inputText>
    Bean Method:
    public List onSuggest(FacesContext facesContext,
    AutoSuggestUIHints autoSuggestUIHints) {
    BindingContext bctx = BindingContext.getCurrent();
    BindingContainer bindings = bctx.getCurrentBindingsEntry();
    String inputNamevalue = autoSuggestUIHints.getSubmittedValue().trim();
    if(inputNamevalue.contains(",")) {
    inputNamevalue = inputNamevalue.substring(inputNamevalue.lastIndexOf(",")+1).trim();
    //create suggestion list
    List<SelectItem> items = new ArrayList<SelectItem>();
    // if (autoSuggestUIHints.getSubmittedValue().length() > 3) {
    OperationBinding setVariable =
    (OperationBinding)bindings.get("setnameSearch");
    setVariable.getParamsMap().put("value",
    inputNamevalue);
    setVariable.execute();
    //the data in the suggest list is queried by a tree binding.
    JUCtrlHierBinding hierBinding =
    (JUCtrlHierBinding)bindings.get("AutoSuggestName_TUserROView1");
    //re-query the list based on the new bind variable values
    hierBinding.executeQuery();
    //The rangeSet, the list of queries entries, is of type //JUCtrlValueBndingRef.
    List<JUCtrlValueBindingRef> displayDataList =
    hierBinding.getRangeSet();
    for (JUCtrlValueBindingRef displayData : displayDataList) {
    Row rw = displayData.getRow();
    //populate the SelectItem list
    items.add(new SelectItem(rw.getAttribute("UsrUserName").toString().trim() +
    "<" +
    rw.getAttribute("UsrMailId").toString().trim() +
    ">",
    rw.getAttribute("UsrUserName").toString().trim() +
    "<" +
    rw.getAttribute("UsrMailId").toString().trim() +
    ">"));
    return items;
    Please suggest how can i achieve the mentioned functionality.

    Hi,
    doesn't work this way as the suggest list returns a single value. You can actually use the existing values as a prefix to the new value in which case the suggest list would look a bit odd. Beside of this all you can do is to create a user lookup field with auto suggest and once a name is selected, update another field with the value returned from this action
    Frank

  • GD causing program to die with threading

    I've been working on a fractal generator for the past few days and decided to add multithreading support tonight—just one problem, this code works perfectly without threads, and not all with threads:
    Works:
    thread_options_t *toptions = (thread_options_t*)malloc(sizeof(thread_options_t));
    toptions->ioptions = ioptions;
    toptions->foptions = foptions;
    init_gd(&toptions->ioptions);
    fractal_main_loop(toptions->foptions, toptions->ioptions);
    save_set(toptions->ioptions);
    Doesn't work:
    thread_options_t *toptions = (thread_options_t*)malloc(sizeof(thread_options_t));
    toptions->ioptions = ioptions;
    toptions->foptions = foptions;
    pthread_t threadid;
    pthread_create(&threadid, NULL, spawn_fractal_generator, (thread_options_t*)toptions);
    Where spawn_fractal_generator is this function:
    void *spawn_fractal_generator(void* arg)
    thread_options_t *toptions = (thread_options_t*)arg;
    init_gd(&toptions->ioptions);
    fractal_main_loop(toptions->foptions, toptions->ioptions);
    save_set(toptions->ioptions);
    pthread_exit(0);
    I've found that it's the init_gd() call which is failing, init_gd() is this:
    void init_gd(image_options_t *ioptions)
    ioptions->gd.im = gdImageCreateTrueColor(ioptions->image.width, ioptions->image.height);
    Putting printfs before and after the call to gdImageCreateTrueColor() shows that the program just dies somewhere in that call: but with no error message and with a return code of 0.
    Last edited by Barrucadu (2010-02-10 21:10:36)

    I noticed something similar after some update or other on one machine using threads in python. Could it be a glibc problem?

  • Collaborating with a Graphic Designer

    Hello,
    I am going to be working on a new website for my employer and
    I was
    hoping some of the web professionals could give me some
    advice.
    I did our previous website by myself using Dreamweaver 4 and
    Fireworks
    4. When creating the visual look of the old site, I used
    Fireworks to
    create a mock-up of the way I wanted the page to look. I then
    used
    Dreamweaver to create a web page that duplicated the mockup.
    Any fancy
    graphic images (such as the masthead) were sliced up using
    Fireworks and
    imported as an HTML table into Dreamweaver. This worked
    pretty well for
    me while working solo.
    However, for this new website I will be working with a
    graphic designer.
    What is the best way to take the graphic design that she
    produces and
    translate it into HTML+CSS in Dreamweaver? Can I use a
    process similar
    to what I used while solo? (i.e. let the designer create a
    mockup in a
    graphic program and then try to duplicate it in Dreamweaver
    as best I
    can with HTML and importing graphics as needed.) Or is there
    a better way?
    Keep in mind that the designer we are using is not
    knowledgable about
    creating websites or using tools like Dreamweaver/Fireworks.
    I believe
    she uses with Photoshop/Illustrator/Quark Xpress. (I will be
    talking
    with her tomorrow.)
    Also, what software should I plan on ordering? I am planning
    on
    upgrading our software to Adobe CS3 Web Standard. But if she
    is using
    Photoshop, should I get plan on getting the Premium version?
    Can
    Fireworks import Photoshop files well, or do I need
    Photoshop?
    Thanks for you help.

    Deaf Web Designer
    Perhaps I should correct my sentence, that in my opinion
    (once I was a
    graphic designer) photoshop and illustrator was a great tool
    for me both
    to create web images for the web and for print design. The
    save for web
    dialog box has helped me a lot for optimizing the web images.
    I also used firework for creating websites. But It seems for
    me that
    photoshop and illustrator is very perfect for me to create
    artwork both
    for the web and print design. No matter how complicated the
    job, the two
    programs were indeed very helpful for me.
    I'm not saying that fireworks is bad for creating web images.
    Since this
    program is only for the web design (I really think so).
    Remember that
    Will's designer is only familiar with both program. I think
    it would be
    wise for his designer to stick with his tool rather than
    learning a new
    tool.
    But. for years, even though I had fireworks, Photoshop and
    Illustrator I
    choose to stick with both program to works. So user friendly,
    and both
    program share the same interface.
    I don't think that Illustrator is mainly for vector-based
    application,
    mobile developer also use its capability for creating svg
    images, and
    also for animation. And photoshop is not only for creating
    bitmap, it
    also often use for beautifying video and 3D animation.
    Whatever it is, choose what you like. As long as you are
    comfortable
    with it.
    Cheers
    Deaf Web Designer wrote:
    > Dreamworms,
    >
    > I am afraid that you provide inaccurate information
    about primary purpose of
    > Photoshop and Illustrator.
    >
    > Illustrator is mainly a vector-based application, while
    Photoshop is a
    > high-end image editing application (which is a
    bitmap-based image editing app).
    > While Fireworks is ideally a web image *and* web graphic
    (including
    > fundamentals of vector-based and bitmap-based app),
    where Fireworks does a nice
    > job in opitmize the file size that is specifically
    designed for faster-loading
    > web images or web graphics. To make it work, you need to
    have a better
    > understanding on how Fireworks works.
    >
    > As for workflow between Photoshop, Illustrator,
    Fireworks and Dreamweaver, it
    > can be accomplished. But again, you need to know and
    understand the primary
    > functionality and the primary difference between these
    applications per se.
    >
    > But when you say "Photoshop and Illustrator are the
    image editing tools that
    > are perfect..." that is very inaccurate statement.
    >
    > Cheers, Brian
    >
    >
    quote:
    Originally posted by:
    Newsgroup User
    > Photoshop and Illustrator are the image editing tools
    that are perfect
    > for the web.
    >
    > Will G. wrote:
    > > Hello,
    > >
    > > I am going to be working on a new website for my
    employer and I was
    > > hoping some of the web professionals could give me
    some advice.
    > >
    > > I did our previous website by myself using
    Dreamweaver 4 and Fireworks
    > > 4. When creating the visual look of the old site, I
    used Fireworks to
    > > create a mock-up of the way I wanted the page to
    look. I then used
    > > Dreamweaver to create a web page that duplicated
    the mockup. Any fancy
    > > graphic images (such as the masthead) were sliced
    up using Fireworks and
    > > imported as an HTML table into Dreamweaver. This
    worked pretty well for
    > > me while working solo.
    > >
    > > However, for this new website I will be working
    with a graphic designer.
    > > What is the best way to take the graphic design
    that she produces and
    > > translate it into HTML+CSS in Dreamweaver? Can I
    use a process similar
    > > to what I used while solo? (i.e. let the designer
    create a mockup in a
    > > graphic program and then try to duplicate it in
    Dreamweaver as best I
    > > can with HTML and importing graphics as needed.) Or
    is there a better way?
    > >
    > > Keep in mind that the designer we are using is not
    knowledgable about
    > > creating websites or using tools like
    Dreamweaver/Fireworks. I believe
    > > she uses with Photoshop/Illustrator/Quark Xpress.
    (I will be talking
    > > with her tomorrow.)
    > >
    > > Also, what software should I plan on ordering? I am
    planning on
    > > upgrading our software to Adobe CS3 Web Standard.
    But if she is using
    > > Photoshop, should I get plan on getting the Premium
    version? Can
    > > Fireworks import Photoshop files well, or do I need
    Photoshop?
    > >
    > > Thanks for you help.
    >
    >
    >
    >

  • Where can I buy an ipad2 case with the same design as the case for the original ipad?

    I thought the case for the original ipad was great, but it doesn't quite fit the ipad2.  Is there somewhere I can find a case with that same design, but fitted for the ipad2?

    www.amazon.com
    Search for "iPad 2 Case"

  • Some employees designations are not matching  with their actual designation

    Hi All,
    While downloading to excel sheet some employees designations are not matching  with their actual designations maintained in infotye 0001.
    Designations should match with infotype 0001.
    How to rectifty this issue.
    Let me know...
    Regards,
    Sita

    Hi
    Looks like you are dowloading the value from a field which does not contain the value you see in the infotype screen
    In infotypr 0001 place your cursor in the designation field.
    Press F1
    See the name of the field & the table.
    Have a look at the table using se16 and confirm what you see in the field is what you see in the infotype screen.
    If it is same see in your code if you are using correct field.
    If it is not the same trace in which table and field the value is stored and code your program to download from there.
    Check in Tables HRP1000 and PA0001 and you should get your values
    regards
    Pravin

Maybe you are looking for