Hacking CMVC Eclipse Plugin

Hacking CMVC Eclipse Plugin

    I know CMVC is somewhat relic of last century, and little people use it now, even little knows what CMVC(Configuration Management Version Control) is and what it means. IBM has terminated CMVC sales and support after IBM acquired Rational Software.

    Unfortunately our project uses it, and CMVC Eclipse Plugin can’t work.

    When use CMVC plugin, and open "Error Log" view, we may see the exception “Unhandled event loop exception”, and click it; we will see a dialog opened, reporting:

javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.SAXParserFactoryImpl not found

at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)

at com.ibm.sdwb.cmvc.util.XMLSAXParser.<init>(XMLSAXParser.java:57)

at com.ibm.sdwb.cmvc.client.api.CommandXMLHandler.setupRpcParser(CommandXMLHandler.java:147)

at com.ibm.sdwb.cmvc.client.api.CommandXMLHandler.<init>(CommandXMLHandler.java:122)

at com.ibm.sdwb.cmvc.client.api.CommandFactory.<init>(CommandFactory.java:59)

at com.ibm.sdwb.cmvc.client.api.CommandFactory.getInstance(CommandFactory.java:86)

at com.ibm.sdwb.cmvc.client.api.PasswordAuthentication.login(PasswordAuthentication.java:304)


    This is because of eclipse peculiar classloader mechanism. com.ibm.sdwb.cmvc.client.api plugin can't load classes in xerces.jar, and also many other CMVC plugins need access classes in xerces.jar, so we need add xerces.jar to CMVC’s common plugin

– ‘com.ibm.sdwb.cmvc.client.api’ and ‘com.ibm.sdwb.cmvc.core’, which many other CMVC plugins include them in ‘Require-Bundle’ section, and then export packages of xerces.jar, so other CMVC plugin can use classes in xerces.jar.

     We can use org.apache.xerces_*.jar included in eclipse directly, add it to Require-Bundle section, and export its all packages in Export-Package section.

    So we need edit MANIFEST.MF of ‘com.ibm.sdwb.cmvc.client.api’. Just add the following red text to MANIFEST.MF of ‘com.ibm.sdwb.cmvc.client.api’.

Manifest-Version: 1.0

……………..

Require-Bundle: org.apache.xerces

Export-Package: …

javax.xml.parsers,

org.apache.html.dom,

org.apache.wml,

org.apache.wml.dom,

org.apache.xerces.dom,

org.apache.xerces.dom.events,

org.apache.xerces.domx,

org.apache.xerces.framework,

org.apache.xerces.jaxp,

org.apache.xerces.msg,

org.apache.xerces.parsers,

org.apache.xerces.readers,

org.apache.xerces.utils,

org.apache.xerces.utils.regex,

org.apache.xerces.validators.common,

org.apache.xerces.validators.datatype,

org.apache.xerces.validators.dtd,

org.apache.xerces.validators.schema,

org.apache.xml.serialize,

org.w3c.dom,

org.w3c.dom.events,

org.w3c.dom.html,

org.w3c.dom.ranges,

org.w3c.dom.traversal,

org.xml.sax,

org.xml.sax.ext,

org.xml.sax.helpers

Eclipse-LazyStart: true


    Also please notice that eclipse plugin requires extra blank line in the end of MANIFEST.MF, don't delete it.

    Then run "eclipse -clean" in the command line to restart eclipse.

    When we open Help -> Software Updates -> Manage Configuration dialog in eclipse, we would see the following error dialogue:

    

    I am not sure whether this would affect CMVC functionality, but it is better to fix it.

    I found that this is due to the inconsistent plugin version declaration between CMVC Features and CMVC Plugins.

    In CMVC Plugins MANIFEST.MF declares plugin version as:"Bundle-Version: 5.3.3.qualifier", however In CMVC Features, feature.xml (under %Eclipse_Home%\CMVC_related_features\feature.xml) declares their included-plugins as :"< plugin version="5.3.3" id="com.ibm.sdwb.ui"/>",

Eclipse Plugin version is compared by all components-the major, minor, micro, and the qualifier, obviously it is inconsistent.

     The solution is to modify all the cmvc-related features' feature.xml file, change plugin version they include to "5.3.3.qualifier", and notice that some features-for example com.ibm.sdwb.cmvc.all_5.3.3 feature (<includes id="com.ibm.sdwb" version="5.3.3"/>)- includes other CMVC feature, don't change them.

     After this, the error dialogue should disappear.

     By the way when meet problems with eclipse, we can find logs in eclipse's Error Log view, or in %WorkSpace_Home%/.metadata/.log file.


Post a Comment

Labels

Java (159) Lucene-Solr (110) All (60) Interview (59) J2SE (53) Algorithm (37) Eclipse (35) Soft Skills (35) Code Example (31) Linux (26) JavaScript (23) Spring (22) Windows (22) Web Development (20) Tools (19) Nutch2 (18) Bugs (17) Debug (15) Defects (14) Text Mining (14) J2EE (13) Network (13) PowerShell (11) Chrome (9) Continuous Integration (9) How to (9) Learning code (9) Performance (9) UIMA (9) html (9) Design (8) Dynamic Languages (8) Http Client (8) Maven (8) Security (8) Trouble Shooting (8) bat (8) blogger (8) Big Data (7) Google (7) Guava (7) JSON (7) Problem Solving (7) ANT (6) Coding Skills (6) Database (6) Scala (6) Shell (6) css (6) Algorithm Series (5) Cache (5) IDE (5) Lesson Learned (5) Miscs (5) Programmer Skills (5) System Design (5) Tips (5) adsense (5) xml (5) AIX (4) Code Quality (4) GAE (4) Git (4) Good Programming Practices (4) Jackson (4) Memory Usage (4) OpenNLP (4) Project Managment (4) Python (4) Spark (4) Testing (4) ads (4) regular-expression (4) Android (3) Apache Spark (3) Become a Better You (3) Concurrency (3) Eclipse RCP (3) English (3) Firefox (3) Happy Hacking (3) IBM (3) J2SE Knowledge Series (3) JAX-RS (3) Jetty (3) Restful Web Service (3) Script (3) regex (3) seo (3) .Net (2) Android Studio (2) Apache (2) Apache Procrun (2) Architecture (2) Batch (2) Build (2) Building Scalable Web Sites (2) C# (2) C/C++ (2) CSV (2) Career (2) Cassandra (2) Distributed (2) Fiddler (2) Google Drive (2) Gson (2) Html Parser (2) Http (2) Image Tools (2) JQuery (2) Jersey (2) LDAP (2) Life (2) Logging (2) Software Issues (2) Storage (2) Text Search (2) xml parser (2) AOP (1) Application Design (1) AspectJ (1) Bit Operation (1) Chrome DevTools (1) Cloud (1) Codility (1) Data Mining (1) Data Structure (1) ExceptionUtils (1) Exif (1) Feature Request (1) FindBugs (1) Greasemonkey (1) HTML5 (1) Httpd (1) I18N (1) IBM Java Thread Dump Analyzer (1) JDK Source Code (1) JDK8 (1) JMX (1) Lazy Developer (1) Mac (1) Machine Learning (1) Mobile (1) My Plan for 2010 (1) Netbeans (1) Notes (1) Operating System (1) Perl (1) Problems (1) Product Architecture (1) Programming Life (1) Quality (1) Redhat (1) Redis (1) Review (1) RxJava (1) Solutions logs (1) Team Management (1) Thread Dump Analyzer (1) Troubleshooting (1) Visualization (1) boilerpipe (1) htm (1) ongoing (1) procrun (1) rss (1)

Popular Posts