You are viewing a plain text version of this content. The canonical link for it is here.
Posted to c-dev@axis.apache.org by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org> on 2005/07/01 06:05:57 UTC

[jira] Created: (AXISCPP-722) Overloaded processException in AxisEngineException class

Overloaded processException in AxisEngineException class
--------------------------------------------------------

         Key: AXISCPP-722
         URL: http://issues.apache.org/jira/browse/AXISCPP-722
     Project: Axis-C++
        Type: Bug
  Components: Server - Engine  
    Versions: current (nightly)    
 Environment: All
    Reporter: Dushshantha Chandradasa


Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> 11:04:29:
> 
> > Hi All,
> >     We have several overloaded forms of processException in 
> > AxisEngineException class.
> > 
> >     I am sure that we are not using all of those. It is quite hard
> to
> > undestand and locate the problem locations when maintaining the 
> > implementation. Shall we drop those that are not used from the list 
> > below?
> > 
> >     void processException(const exception* e);
> >     void processException(const exception* e, const int
> iExceptionCode);
> >     void processException (const exception* e, char* pcMessage);
> >     void processException(const int iExceptionCode);
> >     void processException(const int iExceptionCode, char*
> pcMessage);
> > 
> >     BTW, some can be replaced with the copy constructor. I think we 
> > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > KISS ;-)
> > 
> > Thanks,
> > Samisa...


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-722?page=comments#action_12314847 ] 

Dushshantha Chandradasa commented on AXISCPP-722:
-------------------------------------------------

On Thu, 2005-06-30 at 10:16, John Hawkins wrote:
> I've always questioned why we have processException in the first place 
> ! I've never understood why you would want it. If the same fault is 
> thrown by different processes then you would have to know which 
> process call you were in to do anything useful. I have no idea why we 
> don't just remove it. I think you should always handle exceptions in 
> the calling program using try catch as usual.

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa

>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-722?page=all ]

Dushshantha Chandradasa updated AXISCPP-722:
--------------------------------------------

    Attachment: ExceptionModel_before.JPG

Samisa wrote:

PFA the class diagram of current exception model we have.

            

            Looking into the several issues we have against the exception model, it is worth considering a re-arrangement here.

http://issues.apache.org/jira/browse/AXISCPP-707

http://issues.apache.org/jira/browse/AXISCPP-721

http://issues.apache.org/jira/browse/AXISCPP-722

 

            The idea is *very* simple here.  (basic OO stuff)

1.       We have m_sMessage and m_iExceptionCode as data members in all the derived classes – move them to base class. Move the access methods to the base class as well.

2.       Drop all processException() methods and move the logic to constructor

3.       getMessage() methods in the derived classes do not get the message rather return the message corresponding to the exception code. Hence rename getMessage() getMessageForExceptionCode()

4.       We have “what()” in the base class to get the error message. This is a virtual method inherited from the ‘exception’ class hence we cannot change the naming. However, better to have a more sensible name like getMessage to wrap this

5.       There are too many constructors in the derived classes, I would like only two constructors for each class

a.       Copy constructor

b.       Constructor with 2 parameters, exception code and message, with message defaulting to null. ExceptionClass(int code, char* msg = null)



> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-722?page=comments#action_12318445 ] 

Dushshantha Chandradasa commented on AXISCPP-722:
-------------------------------------------------

Hi henrik,

i think you are using an old virsion of wsdl2ws tool. we fixed this before we clase the issue. 

New virsion generates the class as following

private:
	STORAGE_CLASS_INFO string getMessageForExceptionCode(int iExceptionCode);
	 ISoapFault* m_pISoapFault;
	 string m_sMessageForExceptionCode;

Regards,
Dushshantha

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-722?page=all ]
     
Dushshantha Chandradasa resolved AXISCPP-722:
---------------------------------------------

    Resolution: Fixed

allied the modifications to the Exception model.

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Henrik Nordberg (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-722?page=comments#action_12318385 ] 

Henrik Nordberg commented on AXISCPP-722:
-----------------------------------------

The generated class AxisServiceException should be changed to fit in with the rest of the exception classes. Currently when you generate server stubs you get a AxisServiceException containing:

private:
	 void processException(exception* e);
	 void processException(ISoapFault* pFault);
	 void processException(exception* e, int iExceptionCode);
	 void processException(int iExceptionCode);
	 string m_sMessage;
	 int m_iExceptionCode;
	 ISoapFault* m_pISoapFault;

};

Here, at least,  m_iExceptionCode is hiding a member in the base class. This causes real trouble since this exception is caught as its base class and m_iExceptionCode is then 0, which leads to an empty response (only HTTP headers, and with content length = 0) being sent back to the client.

So, long story short: The generated class AxisServiceException should be changed to fit in with the rest of the exception classes. This minimally means removing duplicate members, but probably means changing the generated processException() members too.

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Updated: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-722?page=all ]

Dushshantha Chandradasa updated AXISCPP-722:
--------------------------------------------

    Comment: was deleted

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Assigned: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-722?page=all ]

Dushshantha Chandradasa reassigned AXISCPP-722:
-----------------------------------------------

    Assign To: Dushshantha Chandradasa

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa

>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Closed: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
     [ http://issues.apache.org/jira/browse/AXISCPP-722?page=all ]
     
Dushshantha Chandradasa closed AXISCPP-722:
-------------------------------------------


Applied the modifications to the Exception model. 

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Dushshantha Chandradasa (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-722?page=comments#action_12314848 ] 

Dushshantha Chandradasa commented on AXISCPP-722:
-------------------------------------------------

Samisa wrote:

Yes, you are correct. Looks like the "processException" is doing what the constructor should be doing. All these "processException" methods are private to the class and only used internally to set the class data members. 
We have 5 constructors and each has a corresponding "processException"
version which is called from within the constructor. What we should do is to identify the useful constructors, move the logic from 'processException" to constructor and remove all unwanted constructors and all "processException" methods.


> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa

>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Commented: (AXISCPP-722) Overloaded processException in AxisEngineException class

Posted by "Henrik Nordberg (JIRA)" <ax...@ws.apache.org>.
    [ http://issues.apache.org/jira/browse/AXISCPP-722?page=comments#action_12318541 ] 

Henrik Nordberg commented on AXISCPP-722:
-----------------------------------------

Dushshantha ,

You are right. It now works great.

Thank you
 - Henrik

> Overloaded processException in AxisEngineException class
> --------------------------------------------------------
>
>          Key: AXISCPP-722
>          URL: http://issues.apache.org/jira/browse/AXISCPP-722
>      Project: Axis-C++
>         Type: Bug
>   Components: Server - Engine
>     Versions: current (nightly)
>  Environment: All
>     Reporter: Dushshantha Chandradasa
>     Assignee: Dushshantha Chandradasa
>  Attachments: ExceptionModel_before.JPG
>
> Samisa Abeysinghe <sa...@gmail.com> wrote on 30/06/2005
> > 11:04:29:
> > 
> > > Hi All,
> > >     We have several overloaded forms of processException in 
> > > AxisEngineException class.
> > > 
> > >     I am sure that we are not using all of those. It is quite hard
> > to
> > > undestand and locate the problem locations when maintaining the 
> > > implementation. Shall we drop those that are not used from the list 
> > > below?
> > > 
> > >     void processException(const exception* e);
> > >     void processException(const exception* e, const int
> > iExceptionCode);
> > >     void processException (const exception* e, char* pcMessage);
> > >     void processException(const int iExceptionCode);
> > >     void processException(const int iExceptionCode, char*
> > pcMessage);
> > > 
> > >     BTW, some can be replaced with the copy constructor. I think we 
> > > can drop the top 3 and keep the bottom 2. Sometime it is better to 
> > > KISS ;-)
> > > 
> > > Thanks,
> > > Samisa...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira