References question

I wanted to create references that did some cleaning up by themselves when they were discarded because of low memory, so I tried to extend the clear method, but it seems that it is never called.
I thought, reading API and docs I found, that the GC calls the clear() method of a SoftReference when it moves the reference to the queue. But it appears that the GC does not use this method, but in stead clears the referent in some other way. Can someone confirm this, and maybe explain why?
I suppose I will need to use a referencequeue and poll every now and then ...

I thought, reading API and docs I found, that the GC
calls the clear() method of a SoftReference when it
moves the reference to the queue. But it appears that
the GC does not use this method, but in stead clears
the referent in some other way. Can someone confirm
this, and maybe explain why?That makes sense, although I cannot confirm for sure. My reasoning follows...
It is my understanding that the GC is guaranteed to clear and collect all SoftReference referents before throwing an OutOfMemoryError. If the GC clears the referents by calling an extensible method - in this case, clear() - it can no longer make this guarantee... simply because it cannot guarantee that your custom clear method will not require the allocation of memory that isn't available.
I am not overly knowledgeable about References, but I believe that PhantomReference is the only kind that prevents the object from being collected before the reference is cleared... this should allow you to perform your cleanup. If anyone has an example of this, I would be obliged to see it, because I have been unable to think up an example that would work...
Since you cannot get a reference to your object through a phantom reference, you can tell when an object is eligible for collection, but not which object or what resources it holds that might need to be released. It may be possible to create the reference as an inner class of the object requiring cleanup, but this technique would require a dedicated thread for every object requiring cleanup, doing nothing but waiting for the reference to be enqueued. This is as unscalable as any other thread-per-object model.
It may be apparent that I have talked myself in circles in this matter a few times now... if anyone holds the Ariadne's thread to this issue, I would love to see a phantom reference in a useful context.
Apologies if I confused the issue more than I clarified it.

Similar Messages

  • Frame Maker 9 Cross References Question

    Howdy,
    I got two documents the original and a translated version of it. The original has a bunch of working cross references and it's all fine and dandy. The translated one on the other has a bunch of broken cross-references, chapter headers, headers in general and what not. Almost all of the "code" broke when the translator did it.
    Either way, that's easy enough to fix it, I can just copy the working code from the original and paste into the translated document and it will generaelly fix the error.
    Now for the question - Since my translated document is a couple of pages longer than the original due to the translation can I still copy of the cross references from the first document over, and it will be all fine and dandy?
    Basically I didn't write either docuements I'm just fixing formatting and other errors, and I'm not entirely 100% how Frame Maker does it cross references are they based on a page number/paragraph parameters, or something like under X subheading go here and that's how it links.
    TL;DR How do Cross refernces work in FM9? And if I have a translated doc longer than my original, can those same Cross references work in both docs?
    Thanks much for any help/insight.
    Dean,

    Almost all of the "code" broke when the translator did it.
    They probably deleted the Cross-Ref Markers when over-typing the text. If Text Symbols were off during edit, that's pretty easy to do.
    ... and I'm not entirely 100% how Frame Maker does it cross references are  they based on a page number/paragraph parameters, or something like  under X subheading go here and that's how it links.
    Unless you are Xref'ing a hand-created Marker, Frame auto-creates a Marker, of type "Cross-Ref" at the start of the target paragraph. It also auto creates an Mtext tag, which contains what appears to be a unique number string, the Paragraph Format name and the paragraph text (including any auto number). There is also a <Unique> tag with another unique number string.
    When resolving references, my impression is that Frame first searches for the <Unique> number, and if not found, then for the Mtext string, and then possibly for the Mtext string without the leading number string.
    If the translators do two things, I would expect the Xrefs to port:
    Don't disturb Xref Markers. This can be tough, because it's sometimes hard to select text and not nab leading Markers, and because all Marker symbols look alike, and the Index markers do need to be messed with.
    Don't translate text defined by Markers. That text will auto-translate from the source text at Update.

  • Technical Reference question: Relationship between WIP Tables & INV Tables

    Hi Community,
    Due to my profile is more closer to the Financials Area than the Manufacturing and Work In Process Area, I want to leave the following question in the community, in order to see if anybody can give me an answer.
    We want to modify a view created for its use in Discoverer. This view, retrieves the total number of units or kilograms that we have of all our items in all of our subinventory organizations, till submitted date. For all this itms, we want to know how many of them, and in which quantity should we depreciate them (is that to say, we categorized those items based on its antiquity in stock, to 6 months, 12 months, 18 months and more then 18 months). How we know the time range?, making a comparison between its last purchase date and its last sales date; and the result of that, with the submitted date.
    This logic, works fine for all items added to our stock as a result of a Purchase Order and a Sales Order, cause in both operations, we can get the purchase date and the sales date; but for all of our items that we manufacture in our manufacturing process, all those items appears in the Discoverer Report, totally depreciated; is that to say, with an antiquity grater than 18 months. And in some cases that is correct, cause there are materials and items in stock since beginning implementation and migration from the old system, but for a huge number of them that is not correct, cause its stock is "constantly" up and down based on the manufacturing process or because its components are all of them purchased by a Purchase Order, but the final item get as a result of the manufacturing process, does not have this purchase date (does not inherit the first or last purchase date from any of its components), cause the only date that we can retrieve is the production date (transaction date) when the item was created.
    So we want to include this production date in the logic of the query used to creation of the view which feed the discoverer report or to know the relationship between the WIP tables and INV tables (those where the items are reflected), in order to match the item, created in the manufacturing process, and the stock of that item in our subinventory organization.
    Thanks in advance for your help and assistance.
    Luis

    Hello Experts, One of the Interview I faced a scenario,I have two tables T1,T2 and i have access to oracle and informatica .How can i know the relationship between two tables?  Thankssirii

  • Object or Reference questions

    class A
             A()
                      System.out.println("Inside A");
    class OR
              public static void main(String args[])
                               A obj_a=new A();//This create an Object of class A
                               A ref_a;//This create a Reference of class AWhat are the differences between an Object and a Reference of a class?

    new A() - creates the actual object.
    Both obj_a and ref_a are references.
    obj_a is referencing the object you created, and ref_a is not assigned yet.

  • Question offsets - need to determine how to reference in formulas

    I am using Crystal XI with a sequel database and have been unable to determine how to reference question offsets in a formula.
    Example:  Question 100 in the table is Appraisal Fee.  However, question 100 has several offsets.  Offset .01 is Appraisal Cost, Offset .02 is seller paid amount, Offset .03 is lender paid costs, etc.
    The sequel database table contains question 100, but not entries for any off the offsets.
    I need to reference the offsets in a Crystal Formula.  Should I be able to do that without having the table updated to include entries for each offset?  If so, helping me understand how would be greatly appreciated.

    Hi Diann,
    Sounds like you need a big, ugly Case statement. If I'm understanding correctly, essentially you are trying to create a column with the offset label in it. The only way I can think of to do this is something like:
    Create  formula field called Offset, then define the formula simlar to below:
    select
    Case "Appraisal Cost" : "01"
    Case "Seller Paid Amount"  :  "02"
    Case "Lender Paid Costs"  : "03"
    Default  :  "99";
    You could then use the Offset formul field as either a group in your report, or at least as a sort order for the records. You could also use it in other formulae.
    Hope that helps!
    Regards,
    Jim Payton

  • Cross References in ID CC

    I've seen cross reference questions, but none dealing with ID CC, which, I believe is 64-bit.
    We've greatly expanded our use of cross-references with this new more power version with overall good success. However, ID still seems to insist on updating every cross-reference with every keystroke. What a pain.
    I work with all book documents open to minimize this, but since it's across a network, it can still be pretty painful. In addition, some documents are used in multiple books so I use layers to control which cross-references are active any any given time.
    It's getting very trying. Does anyone have experience with using 3rd party xref management software with ID CC?

    Hi Van,
    I fear, I expressed myself not very clear. I try again.
    We have DITA structured documents. However, lastest status often was saved in the FM document. The xml documents often are not representing the final status.
    When I open the FM8 document in FM9 everything looks pretty good.
    But: When I want to save the document as xml with FM9, I'm getting errors regarding the cross references.
    The cross references which were created in FM8 - doesn't matter, if a valid xml document or a FM document - always look the same.
    (BTW: I don't think that in structured documents cross references always refer to elemts with a unique ID.)
    example from xml which was created with FM8:
    <xref href = "#id08B4A0R30E9" type = "fm:Chapter">"..."</xref>
    the only difference in the FM document is that the element is called fm-xref there, as it's not an external url.
    in FM9 those cross references are totally different.
    example from xml which was created in FM9:
    <xref href = "#id08B4A0R30E9" class = "- topic/xref">"..."</xref>
    When saving the FM documents with the cross references from the first example as xml in FM9 (we don't have FM8 anymore), I get an error that the attribute type is not defined.
    When having a xml document that was last changed with FM8 and opening/ saving this with FM9, there is no error.
    At the moment I do not know how to solve this issue.
    And also I'm not sure weather the same problem might accour again with change from FM9 to FM10 or else.
    It is a great effort to make new cross references just because we upgraded from FM8 to FM9. (And of course always at most inconvienent time.)
    As we are thinking of upgrading to FM10, it would be good to know before, if there are any similar issues to expect.
    Or if there is an fix for FM9 or FM10 to avoid this at all.
    Regards,
    Anna

  • QuickTime does not work

    I have QuickTime 7.4.1 running on my G3 OS Panther and on my iMac OS Tiger.
    Whenever it plays a movie on the Ge all I get is the sound and no picture.
    On my iMac OS Tiger it runs ok.
    I once installed Flip for Mac but deleted it. I searched for Flip for mac on my G3 and could not find any references to it except for some:
    flip.jpg, flipbtn.gif, Flippers.tif.
    Thanks for any advice.

    Hi Frank,
    Try going to your HD/Library Folder/Internet Plugins and see if you have a QuickTime Plugin.webplugin folder there. If so, move this folder to the desktop. Try playing a QuickTime movie again and see if the video plays now. If not you can move this folder back to the Internet Plugins folder.
    For future reference, questions concerning QuickTime can be placed in the QuickTime for Mac OS where there are many knowledgable users of the application there.
    post back with any results,
    littleshoulders
    Message was edited by: littleshoulders

  • 19000  emails in Mail

    I currently have 19000 emails and growing in my Mail application. I know this may seem stupid to have so many, but I run a small business and often have to quickly 'search' Mail to reference questions about previous communication with customers. I have 20-25 various email accounts for my business (i.e. Orders@, Shipping@, Sales@, Support@, Billing@, etc..., etc...) that come into Mail including a few gmail accounts.
    I don't know of another way to quickly search my previous emails other than using the "search" feature in the Mail (top right of Mail) to find what I'm looking for. I've heard you can Archive mail but I'm not sure how I would quickly search to find something in a previous email that I need.
    Will this many emails slow down my computer?
    What else can I do with these emails to be able to reference them quickly when needed?
    Thanks in advance. 

    Ok so I had previously set up a few Smart Mailboxes but I really didn't know what I was doing. The messages from those specific emails are populating in the Smart Mailbox but it appears to just be a duplicate of the same INBOX email folder originally set up. I'm sure that's not the case, but I don't see any difference since my main Inboxes are specific to Shipping, Orders, Billing, etc... I can see how separating Orders by customer into Smart Mailboxes might benefit.
    One thing to NOTE; I use my MacBook Pro and my iMac (soon to be new Mac Pro) switching from one to the other depending on whether I'm in office or out of office, so I want the emails readily available on both computers. I have them set up now so when I read an email on one computer it marks as read on the other. I'm processing lots of orders all the time so I need the luxury of both working as one, so to speak.
    I also see where I can create a Mailbox "ON MY MAC". I don't know if this is what I need and will work for both computers or just the Smart Mailbox.
    In order to avoid the "constant write/rewrite" of all my emails which do I need to do? (i'm assuming this adds to the memory and processing of the computer to constantly be doing this, which is what I'm wanting to cut down on).
    And, if I could kindly ask, would you step me through what to do specifically?
    AND... if I delete messages from my Inbox once I set up the folder you describe, do the emails still remain in the the place you are telling me to set up?
    Many thanks.

  • Session enabled RFC Web Service Fails & WSDL has enablesession=false

    Please help  Thanks in Advance
    A stateful Webservice with 2 RFCs, consumed by a .NET application fails and the cause seems to be because of statelessness.
    The call to 1st RFC succeeds and the call to the 2nd RFC fails with the below error message:
    An exception with the type CX_SY_REF_IS_INITIAL occurred, but was neither handled locally,
    nor declared in a RAISING clause.Dereferencing of the NULL reference"
    Question:
    1- Even though the "Session-Oriented Communication" is checked, the WSDL has EnableSession as false. Is there any special step to make it true?
    2- Even though the SOA Manager says that the Session is enabled and SessionMode is Http Cookie, the HTTPFiddler doesn't show any cookie in the .NET side.
    3- Are Web Service enabled HRXSS RFCs capable of performing Session Oriented Communication?
    Eg. Can the RFCs HrxssPerInitPernr and HrxssPerReadP0002Us be called in a sequence?
    service ws = new service();
                ws.Credentials = new System.Net.NetworkCredential("abcd", "abcd");
                System.Net.CookieContainer cookie1 = new System.Net.CookieContainer();
                ws.CookieContainer = cookie1;
                //BELOW CALL SUCCEEDS
               HrxssPerInitPernrResponse response = ws.HrxssPerInitPernr(new HrxssPerInitPernr()
    { Infty = "0002", Pernr = "52222068", Userdate="2009-01-01" });
                HrxssPerReadP0002Us read = new HrxssPerReadP0002Us() { Infty = "0002"  };
              // BELOW CALL FAILS
                HrxssPerReadP0002UsResponse readResponse = ws. HrxssPerReadP0002Us (read);
                HcmtBspPaUsR0002 [] records = readResponse.Records;
    EXCEPTION
    System.Web.Services.Protocols.SoapException was unhandled
      Message="CX_SY_REF_IS_INITIAL:Exception CX_SOAP_ROOT occurred (program: CL_SOAP_RUNTIME_ROOTCP,
    include:CL_SOAP_RUNTIME_ROOT CM004, line: 110)
    An exception with the type CX_SY_REF_IS_INITIAL occurred,
    but was neither handled locally, nor declared in a RAISING clause.Dereferencing of the NULL reference"
      Source="System.Web.Services"
      Actor=""  Lang="en"  Node=""  Role=""   StackTrace:
           at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke  at HrxssPerReadP0002Us
    Edited by: Tony TB on Jul 2, 2009 9:56 AM

    to get this working you need to enable some services in transaction SICF
    to know a complete list of all services to be enabled check oss note number 517484
    particularly these nodes should be active
    /default_host/sap/bc/soap/wsdl and
    /default_host/sap/bc/soap/wsdl11
    (to get the error thrown by the server instead of page cannot be found, in your browser go to tools->internet options->advanced and uncheck the check box "show friendly error messages" and run the wsdl button again)
    Regards
    Raja

  • Exporting list to excel..order changes?

    hello. thanks for the time and effort.
    i'm a SharePoint 2013 noob. so forgive the simple question.  we moved a team site from SharePoint 2010 to SharePoint 2013 and now a user is complaining that when they export to excel the list they see in IE the order gets changed around when it is exported
    to Excel. They said it worked in SP 2010 where the list they saw on the team site was exported in the same order to Excel.  It's an odd question that I wouldn't know where to start to look.  Thanks again.
    Also i did see that it cannot be exported when you open the site in Chrome due to ActiveX controls. 

    Hi,
    According to your post, my understanding is that you wanted to  exporting list to excel. However, the orders were changed.
    I recommend to create a page and add a Data View Web part using SPD on the page and then use SharePoint list as a Data source and add all items into the web part.
    Then from Data view web part exported data to excel.
    In addition, I recommend to modify view to remove the content type column.
    Here are two similar blogs for your reference:
    Question sequence is disordered when we export a survey list to excel
    SharePoint 2010 Export to Excel 2010 Fails to Export All Fields in Some Views
    The list cannot be exported when you open the site in Chrome due to ActiveX controls.
    An ActiveX control is used in SharePoint 2013 to validate if you have Excel installed or not.  You can try it out with Chrome on Windows -- it will fail.  
    Take a look at these ActiveX controls in use with SharePoint 2013:
    Plan browser support in SharePoint 2013
    More information:
    Chrome - Limitations with SharePoint 2013
    Thanks,
    Linda Li                
    Forum Support
    Please remember to mark the replies as answers if they help and unmark them if they provide no help. If you have feedback for TechNet Subscriber Support, contact
    [email protected]
    Linda Li
    TechNet Community Support

  • Execute Shell Script through Demantra Workflow

    Hi All ,
    Can we execute shell script from Demantra Workflow ?
    If yes where should we place the shell script file and wat should be the commandline command in the step .
    We have the Demantra installed on a windows server and the workflow manager is on a linux server .
    the batch file on the windows server can be executed through the secure shell from the linux server .
    I am trying to achieve the same through thr demantra workflow
    Appreciate any input on the same .
    Thanks and regards
    Suzy

    Hi,
    Shell script is not supported till Demantra 7.2.0.2 WF.
    I have checked with Oracle team also and reply I got below for your reference:
    QUESTION
    *=========*
    As per your details, shall we conclude like this:
    *"only *.bat and *.exe files can be used in workflow. Demantra standard functionality doe*
    *s not support shell script in workflow"*
    ANSWER
    *=======*
    Hi ,
    The Demantra standard functionality 7.2.0.2 does support shell script in workflow.
    Thanks,
    Asya
    Please review the note#468071.1-Unable to Run EBS Workflows that Call EngineManager.exe in
    You will find this note is referring to the Enhancement Request Bug 6644455-- ANALYTICAL ENGINE
    NOT AVAILABLE ON UNIX/LINUX
    But the enhancement bug exist and I hope it is fixed in Demantra 7.3.
    Tks
    MJ

  • Equivalence Operator - Oracle Text Search

    Hi,
    I am trying to use Equivalence Operator(=) as following,
    SELECT SCORE (1), CLOB_COL
    FROM TEST_CLOB
    +WHERE CONTAINS (CLOB_COL, '({AIR}={WA@TER})', 1) > 0+
    This seems to work fine for normal words, but when the word has any special characters(WA@TER) the equivalence operator throws the following error.
    ORA-29902: error in executing ODCIIndexStart() routine
    ORA-20000: Oracle Text error:
    DRG-50921: EQUIV operand not a word or another EQUIV expression
    DRG-50921: EQUIV operand not a word or another EQUIV expression
    Please let me know if there is a way to escape the special characters.
    The same query seem to work if i use "OR" operator instead of "Equivalence" but need to know whether it is possible to do it with "Equivalence" operator.
    Thanks.

    865045 wrote:
    Hi,
    I am trying to use Equivalence Operator(=) as following,
    SELECT SCORE (1), CLOB_COL
    FROM TEST_CLOB
    +WHERE CONTAINS (CLOB_COL, '({AIR}={WA@TER})', 1) > 0+
    This seems to work fine for normal words, but when the word has any special characters(WA@TER) the equivalence operator throws the following error.
    ORA-29902: error in executing ODCIIndexStart() routine
    ORA-20000: Oracle Text error:
    DRG-50921: EQUIV operand not a word or another EQUIV expression
    DRG-50921: EQUIV operand not a word or another EQUIV expression
    Please let me know if there is a way to escape the special characters.
    The same query seem to work if i use "OR" operator instead of "Equivalence" but need to know whether it is possible to do it with "Equivalence" operator.
    Thanks.The second result in a simple google query for "oracle text escape special characters" returned this.
    http://download.oracle.com/docs/cd/B28359_01/text.111/b28304/cqspcl.htm
    Please keep google (and the Oracle documentation itself) in mind in the future, it's faster for you and less pollution to the forums for simple document reference questions like this.

  • Error opening environment more than once

    Hi,
    I have two java classes which both need to access a container in an environment (in parallel). When the first class is instantiated the environment is opened successfully. However, when the second class subsequently attempts to open the same environment I get an error. (I do not want to close the env from the first class, while the second class does its thing)
    The classes are Stylesheet extensions for an xmleditor which allows the stylesheet to look up item ID codes and display their names to the user by looking up the values in an xml file stored in a bdbxml container. There is a situation where two different objects need to have access to the environment at the same time - but its giving me an error when I instantiate the env for the second time - without having closed the first one)
    Any help would by gratefully received
    Kind Regards
    Swami Kevala
    I thought I could create multiple handles to the same environment?

    First is a class to encapsulate the environment (lifted mostly from the example code)
    package org.isha.archives.bdbxml;
    import java.io.*;
    import java.util.*;
    import com.sleepycat.db.*;
    import com.sleepycat.dbxml.*;
    //Class used to open and close a Berkeley DB environment
    public class DbEnv
    private Environment dbEnv_ = null;
    private XmlManager mgr_ = null;
    private boolean dbEnvIsOpen_ = false;
    private File path2DbEnv_ = null;
    public DbEnv(File path2DbEnv)
         throws Throwable {
              if (! path2DbEnv.isDirectory()) {
                   throw new Exception(path2DbEnv.getPath() +
                             " does not exist or is not a directory.");
              EnvironmentConfig config = new EnvironmentConfig();
              config.setCacheSize(50 * 1024 * 1024);
              config.setAllowCreate(true);
              config.setInitializeCache(true);
              config.setTransactional(true);
              config.setInitializeLocking(true);
              config.setInitializeLogging(true);
              config.setErrorStream(System.err);
              config.setThreaded(true);
              config.setRunRecovery(true);
              config.setLogAutoRemove(true);
              dbEnv_ = new Environment(path2DbEnv, config);
              //Boolean used to know whether to close the environment
              // when the cleanup() method is called.
              dbEnvIsOpen_ = true;
              path2DbEnv_ = path2DbEnv;
              mgr_ = new XmlManager(dbEnv_, null);
    //Returns the path to the database environment
    public File getDbEnvPath() { return path2DbEnv_; }
    //Returns the database environment encapsulated by this class.
    public Environment getEnvironment() { return dbEnv_; }
    //Returns the XmlManager encapsulated by this class.
    public XmlManager getManager() { return mgr_; }
    //Used to close the environment
    public void cleanup() throws DatabaseException
    if (dbEnvIsOpen_) {
    dbEnv_.close();
    dbEnvIsOpen_ = false;
    Second is a class which encapsulates a container with a method for querying itself
    package org.isha.archives.bdbxml;
    import java.io.*;
    import java.util.*;
    import com.sleepycat.db.*;
    import com.sleepycat.dbxml.*;
    //Class used to open, query and close a Berkeley DB container
    public class DbContainer
         private XmlContainer dbCont_ = null;
    private XmlManager mgr_ = null;
    private boolean dbContainerIsOpen_ = false;
    private File path2DbContainer_ = null;
    private XmlContainerConfig cfg_= null;
    private String cntr_ = "";
    public DbContainer(XmlManager myManager, String containerFileName, XmlContainerConfig containerConfig)
              throws Throwable {
              String containerFilepath = myManager.getHome() + "\\" + containerFileName;
              path2DbContainer_ = new File(containerFilepath);
              mgr_ = myManager;
              cfg_ = containerConfig;
              cntr_ = containerFileName;
              if (! path2DbContainer_.isFile()) {
                   throw new Exception(path2DbContainer_.getPath() +
                             " does not exist or is not a directory.");
              dbCont_ = new XmlContainer();
    //Return the XmlContainer itself
    public XmlContainer getContainer() { return dbCont_; }
    //Returns the filename of the container
         public String getFilename() { return cntr_; }
    //Returns the XmlManager encapsulated by this class.
    public XmlManager getManager() { return mgr_; }
    //Used to close the container
    public void close() throws DatabaseException
    if (dbContainerIsOpen_) {
    dbCont_.close();
    dbContainerIsOpen_ = false;
    //Used to open the container
    public void open() {
              try {
                   dbCont_ = mgr_.openContainer(cntr_, cfg_);
                   dbContainerIsOpen_ = true;
              catch (Exception e) {
    //Used to query the container
    public String[] runQuery(String myQuery){
              String [] queryOutput = null;
              int counter = 0;
              try {
                   XmlQueryContext context = mgr_.createQueryContext();
                   //Default namespace declaration does not work yet - this will work in the next release of BDB XML
                   //Until then we have to remove the namespace declaration from the reference.xml root element
                   //When this becomes available we can add the namespace declaration and uncomment the following line
                   //context.setNamespace("", defaultNS);
                   XmlResults results = mgr_.query(myQuery, context);
                   //Get the result set
                   queryOutput = new String[results.size()];
                   XmlValue value = results.next();
                   while (value != null)
                        queryOutput[counter] = value.asString().replaceAll("\\n", "").replaceAll(" "," ");
                        System.out.println(queryOutput[counter]);
                        counter ++;
                        value = results.next();
              catch (Exception e) {
                   //Exception Handling code here
              return queryOutput;
    Now to explain what is happening:
    When I open an xml document in xmlmind, it displays the document according to a prespecified CSS sheet. Sometimes the CSS rules alone are not sufficient to achieve the necessary effect/functionality, so the API allows you to write your own class, which contains methods to do what you want. As soon as the xml document is displayed, the CSS extension class gets instantiated.
    Here is my extension class (called StyleSheetExtension). It contains a method called getKeywords. This method can then be invoked from within the CSS sheet, and is used to replace the keyword ID codes in the xml document with their corresponding keyword names - stored in an xml reference look-up document...
    package org.isha.archives.xmlmind;
    import com.xmlmind.xmledit.xmlutil.*;
    import com.xmlmind.xmledit.doc.*;
    import com.xmlmind.xmledit.view.DocumentView;
    import com.xmlmind.xmledit.stylesheet.StyleValue;
    import com.xmlmind.xmledit.stylesheet.StyleSpec;
    import com.xmlmind.xmledit.stylesheet.StyleSpecsBase;
    import com.xmlmind.xmledit.styledview.StyledViewFactory;
    import com.xmlmind.xmledit.styledview.CustomViewManager;
    import com.sleepycat.dbxml.*;
    import com.sleepycat.db.*;
    import java.io.File;
    import java.util.logging.*;
    import java.util.*;
    import org.isha.archives.bdbxml.DbContainer;
    import org.isha.archives.bdbxml.DbEnv;
    public class StyleSheetExtension {
         //Logging variables
         private Logger logger = Logger.getLogger("StyleSheetExtension");
         private Handler fh = null;
         private java.util.logging.Formatter sf = null;
         //XMLMind variables
         private static final Namespace NS = Namespace.get("http://www.ishafoundation.org/archives/schema/transcript");
         //BDB variables
         private DbEnv myDbEnv = null;
         private File envDir = new File("C:\\BerkeleyDB");
         private DbContainer myDbContainer = null;
         private String containerFileName = "reference.dbxml";
         private XmlContainerConfig containerCfg = null;
         //Define Constructor
         public StyleSheetExtension(String[] args, StyledViewFactory viewFactory) {
    //Set up simple logging system
    try {
    fh = new FileHandler("%t/_styleSheetExtn.log");
    sf = new SimpleFormatter();
    fh.setFormatter(sf);
    logger.addHandler(fh);
    logger.setLevel(Level.ALL);
    logger.info("Starting StyleSheetExtension Class constructor");
    } catch (Exception e)
    {System.out.println("CustomErr: " + e.getMessage());
                    //Exception Handling code
    //Create custom BDB Environment and Container Objects
    try {
                        myDbEnv = new DbEnv(envDir);
                        containerCfg = new XmlContainerConfig();
                        myDbContainer = new DbContainer(myDbEnv.getManager(), containerFileName, containerCfg);
                        myDbContainer.open();
                   } catch (Throwable t) {
                        logger.severe("Problem with Env or Container new thing");
    viewFactory.addDependency( NS, "topic", NS, "keywordIDs");
         public StyleValue getKeywords (StyleValue[] args, Node contextNode,
                             StyledViewFactory viewFactory) {
    //Get keyword IDs as a String array
    String[] keywordID = null;
    String[] keywordValue = null;
    String keywordIDStr = "";
    String keywordValueStr ="";
    Name keywordIDs = Name.get("keywordIDs");
    keywordIDStr = contextNode.attributeValue(keywordIDs).trim();
    keywordID = keywordIDStr.split("\\s+");
    keywordValue = new String[keywordID.length];
    //for each keyword ID element retrieve the corresponding keyword value
    logger.info("getting values");
                   keywordValue = getKeywordValuesFromDB(keywordID);
                   Arrays.sort(keywordValue);
                   logger.info(keywordValue[0] + " " + keywordValue[1]);
                   int i = 0;
                   for(i=0; i < keywordID.length; i++) {
                        keywordValueStr += keywordValue[i] + " ";
                   keywordValueStr = keywordValueStr.trim();
              return StyleValue.createString(keywordValueStr);
    private String[] getKeywordValuesFromDB(String[] IDs){
                   String[] values = new String[IDs.length];
                   String id = "";
                   String value = "";
                   String flwor = "";
                   int i = 0;
                   for(i=0; i < IDs.length; i++) {
                        id = IDs.trim();
                        flwor = "for $i in collection('" + myDbContainer.getFilename() + "') /reference/keywords/keyword \n";
                        flwor += "let $id := $i/@id/text() \n";
                        flwor += "let $val := $i/@value/text() \n";
                        flwor += "where $id = '" + id + "'\n";
                        flwor += "return $val";
                        String[] temp = new String[1];
                        temp = myDbContainer.runQuery(flwor);
                        values[i] = temp[0];
                        logger.info("value is: " + values[i]);
                   return values;
    package org.isha.archives.xmlmind;
    import com.xmlmind.xmledit.xmlutil.*;
    import com.xmlmind.xmledit.doc.*;
    import com.xmlmind.xmledit.view.DocumentView;
    import com.xmlmind.xmledit.stylesheet.StyleValue;
    import com.xmlmind.xmledit.stylesheet.StyleSpec;
    import com.xmlmind.xmledit.stylesheet.StyleSpecsBase;
    import com.xmlmind.xmledit.styledview.StyledViewFactory;
    import com.xmlmind.xmledit.styledview.CustomViewManager;
    import com.sleepycat.dbxml.*;
    import com.sleepycat.db.*;
    import java.io.File;
    import java.util.logging.*;
    import java.util.*;
    import org.isha.archives.bdbxml.DbContainer;
    import org.isha.archives.bdbxml.DbEnv;
    public class StyleSheetExtension {
         //Logging variables
         private Logger logger = Logger.getLogger("StyleSheetExtension");
         private Handler fh = null;
         private java.util.logging.Formatter sf = null;
         //XMLMind variables
         private static final Namespace NS = Namespace.get("http://www.ishafoundation.org/archives/schema/transcript");
         //BDB variables
         private DbEnv myDbEnv = null;
         private File envDir = new File("C:\\BerkeleyDB");
         private DbContainer myDbContainer = null;
         private String containerFileName = "reference.dbxml";
         private XmlContainerConfig containerCfg = null;
         //Define Constructor
         public StyleSheetExtension(String[] args, StyledViewFactory viewFactory) {
    //Set up simple logging system
    try {
    fh = new FileHandler("%t/_styleSheetExtn.log");
    sf = new SimpleFormatter();
    fh.setFormatter(sf);
    logger.addHandler(fh);
    logger.setLevel(Level.ALL);
    logger.info("Starting StyleSheetExtension Class constructor");
    } catch (Exception e)
    {System.out.println("CustomErr: " + e.getMessage());
                    //Exception Handling code
    //Create custom BDB Environment and Container Objects
    try {
                        myDbEnv = new DbEnv(envDir);
                        containerCfg = new XmlContainerConfig();
                        myDbContainer = new DbContainer(myDbEnv.getManager(), containerFileName, containerCfg);
                        myDbContainer.open();
                   } catch (Throwable t) {
                        logger.severe("Problem with Env or Container new thing");
    viewFactory.addDependency( NS, "topic", NS, "keywordIDs");
         public StyleValue getKeywords (StyleValue[] args, Node contextNode,
                             StyledViewFactory viewFactory) {
    //Get keyword IDs as a String array
    String[] keywordID = null;
    String[] keywordValue = null;
    String keywordIDStr = "";
    String keywordValueStr ="";
    Name keywordIDs = Name.get("keywordIDs");
    keywordIDStr = contextNode.attributeValue(keywordIDs).trim();
    keywordID = keywordIDStr.split("\\s+");
    keywordValue = new String[keywordID.length];
    //for each keyword ID element retrieve the corresponding keyword value
    logger.info("getting values");
                   keywordValue = getKeywordValuesFromDB(keywordID);
                   Arrays.sort(keywordValue);
                   logger.info(keywordValue[0] + " " + keywordValue[1]);
                   int i = 0;
                   for(i=0; i < keywordID.length; i++) {
                        keywordValueStr += keywordValue[i] + " ";
                   keywordValueStr = keywordValueStr.trim();
              return StyleValue.createString(keywordValueStr);
    private String[] getKeywordValuesFromDB(String[] IDs){
                   String[] values = new String[IDs.length];
                   String id = "";
                   String value = "";
                   String flwor = "";
                   int i = 0;
                   for(i=0; i < IDs.length; i++) {
                        id = IDs[i].trim();
                        flwor = "for $i in collection('" + myDbContainer.getFilename() + "') /reference/keywords/keyword \n";
                        flwor += "let $id := $i/@id/text() \n";
                        flwor += "let $val := $i/@value/text() \n";
                        flwor += "where $id = '" + id + "'\n";
                        flwor += "return $val";
                        String[] temp = new String[1];
                        temp = myDbContainer.runQuery(flwor);
                        values[i] = temp[0];
                        logger.info("value is: " + values[i]);
                   return values;
    This instance (and consequently the newly created env and container objects) stay alive until the document is closed.
    The xmlmind API also allows you to specify custom classes that will return a component that can be embedded in the stylesheet. (My class returns a JButton which - when clicked - brings up a dialog box which allows the user to specify /modify/addnew keywords to the selected text). As soon as the button is pressed I create a new env and container instance, for the duration of the pop-up window (since I have no way to pass the reference to the existing environment created by the StyleSheetExtension class.
    Here's the class defn: (Here goes!) The env and container stuff is at the start of the nested-nested class called KpForm.
    package org.isha.archives.xmlmind;
    import com.sleepycat.dbxml.*;
    import com.sleepycat.db.*;
    import java.awt.*;
    import java.io.*;
    import javax.swing.*;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.AbstractDocument;
    import javax.swing.text.DocumentFilter;
    import javax.swing.text.BadLocationException;
    import javax.swing.event.*;
    import javax.swing.text.DocumentFilter.FilterBypass;
    import java.util.*;
    import java.util.regex.*;
    import java.lang.*;
    import com.xmlmind.xmledit.xmlutil.*;
    import com.xmlmind.xmledit.doc.Element;
    import com.xmlmind.xmledit.edit.*;
    import com.xmlmind.xmledit.stylesheet.*;
    import com.xmlmind.xmledit.styledgadget.*;
    import com.xmlmind.xmledit.styledview.*;
    import com.xmlmind.xmledit.doc.*;
    import java.util.logging.*;
    import org.isha.archives.bdbxml.DbEnv;
    import org.isha.archives.bdbxml.DbContainer;
    public class OpenKeywordPicker implements ComponentFactory {
    public Component createComponent(Element element,
    Style style, StyleValue[] parameters,
    StyledViewFactory viewFactory,
    boolean[] stretch){
    KeywordEdit topic = new KeywordEdit();
    return topic;
         private class KeywordEdit extends JButton {
              //private Element element;
              public KeywordEdit()
                   super.setText("Edit");
                   super.addMouseListener(new java.awt.event.MouseAdapter() {
                                  public void mouseClicked(java.awt.event.MouseEvent evt) {
                                       myJButtonMouseClicked(evt);
              private void myJButtonMouseClicked(java.awt.event.MouseEvent evt) {
                        KpForm myForm = new KpForm();
                        myForm.setVisible(true);
    private class KpForm extends javax.swing.JFrame {
         // Variables declaration - do not modify
         private javax.swing.JButton jButton1;
         private javax.swing.JButton jButton2;
         private javax.swing.JButton jButton3;
         private javax.swing.JButton jButton4;
         private javax.swing.JButton jButton5;
         private javax.swing.JButton jButton6;
         private javax.swing.JLabel jLabel1;
         private javax.swing.JLabel jLabel2;
         private javax.swing.JLabel jLabel3;
         private javax.swing.JLabel jLabel4;
         private javax.swing.JLabel jLabel5;
         private javax.swing.JList jList1;
         private javax.swing.JList jList2;
         private javax.swing.JList jList3;
         private javax.swing.JScrollPane jScrollPane1;
         private javax.swing.JScrollPane jScrollPane2;
         private javax.swing.JScrollPane jScrollPane3;
         private javax.swing.JScrollPane jScrollPane4;
         private javax.swing.JTextArea jTextArea1;
         private javax.swing.JTextField jTextField1;
         private DefaultListModel model_1 = new DefaultListModel();
              private DefaultListModel model_2 = new DefaultListModel();
              private DefaultListModel model_3 = new DefaultListModel();
              private javax.swing.JOptionPane jOptionPane1;
              //private KeywordFilter filter_1 = new KeywordFilter();
              //BDB variables
              private DbEnv myDbEnv = null;
              private File envDir = new File("C:\\BerkeleyDB");
              private DbContainer myDbContainer = null;
              private String containerFileName = "reference.dbxml";
              private XmlContainerConfig containerCfg = null;
              private Logger logger = Logger.getLogger("OpenKeywordPicker.KeywordEdit.KpForm");
              private Handler fh = null;
              private java.util.logging.Formatter sf = null;
    // End of variables declaration
         /** Creates new form kpForm */
         public KpForm() {
                   super();
         initComponents();
         customInit();
              private void customInit(){
                        //Set up simple logging system
                   try {
                        fh = new FileHandler("%t/_keywordPicker.log");
                        sf = new SimpleFormatter();
                        fh.setFormatter(sf);
                        logger.addHandler(fh);
                        logger.setLevel(Level.ALL);
                        logger.info("Starting Custom initialization");
                   } catch (Exception e) {System.out.println("CustomErr: " + e.getMessage());
                              //Exception Handling code
                        //Create custom BDB Environment and Container Objects
                        try {
                             logger.info("0");
                             myDbEnv = new DbEnv(envDir);
                             logger.info("1");
                             containerCfg = new XmlContainerConfig();
                             logger.info("2");
                             myDbContainer = new DbContainer(myDbEnv.getManager(), containerFileName, containerCfg);
                             logger.info("3");
                             myDbContainer.open();
                        } catch (Throwable t) {
                             logger.severe("Problem with Env or Container new thing - Component: "+ t.getMessage());
              String[] dbIDKeywords;
              jList1.setModel(model_1);
              jList2.setModel(model_2);
              jList3.setModel(model_3);
              dbIDKeywords = getKeywordsFromDB();
              int i=0;
              for(i=0; i < dbIDKeywords.length; i+=2){
              model_1.addElement(new keywordOb(dbIDKeywords[i], dbIDKeywords[i+1]));
              jList1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
              jList2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
              jList3.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
              //Setup Document Filter for TextField component
              AbstractDocument doc;
              doc = (AbstractDocument)(jTextField1.getDocument());
              doc.setDocumentFilter(filter_1);
              //Setup Document Listener for TextField component
              jTextField1.getDocument().addDocumentListener(new DocumentListener(){
              public void insertUpdate(DocumentEvent e) {
              String val = jTextField1.getText();
              if(val != null & val.trim() != ""){
              jButton1.setEnabled(true);
              else {
              jButton1.setEnabled(false);
              public void removeUpdate(DocumentEvent e) {
              String val = jTextField1.getText();
              if(val != null & !val.trim().equals("")){
              jButton1.setEnabled(true);
              else {
              jButton1.setEnabled(false);
              public void changedUpdate(DocumentEvent e) {
              //Plain text components do not fire these events
              private String[] getKeywordsFromDB(){
              String[] k = null;
              String flwor = "";
              flwor = "for $i in collection('" + containerFileName + "') /reference/keywords/keyword \n";
              flwor += "let $id := $i/@id/text() \n";
              flwor += "let $val := $i/@value/text() \n";
              flwor += "order by $val ascending \n";
              flwor += "return ($id, $val)";
              return k = myDbContainer.runQuery(flwor);
              private class keywordOb implements Comparable{
              private String id;
              private String value;
              public keywordOb(String id, String value){
              this.id = id;
              this.value = value;
              public String getId(){
              return id;
              public String getValue(){
              return value;
              public String toString(){
              return value;
              public int compareTo(Object o){
                                  int result = (((keywordOb)this).toString()).compareTo(((keywordOb)o).toString());
                                  return result;
              private class questionOb implements Comparable{
              private String id;
              private String value;
              private String[] keywordRefs;
              public questionOb(String id, String value, String[] keywordRefs){
              this.id = id;
              this.value = value;
              this.keywordRefs = keywordRefs;
              public questionOb(){
              this.id = "";
              this.value = "";
              this.keywordRefs = null;
              public String getId(){
              return id;
              public String getValue(){
              return value;
              public String toString(){
              return value;
              public String[] getKeywordRefs(){
              return keywordRefs;
              public void setId(String id){
              this.id = id;
              public void setValue(String value){
              this.value = value;
              public void setKeywordRefs(String[] keywords){
              this.keywordRefs = keywordRefs;
              public int compareTo(Object o){
                             int result = (((questionOb)this).toString()).compareTo(((questionOb)o).toString());
                             return result;
              //Add New Keyword to xml reference File
              private void addNewKeyword(String k){
              String keyword = k;
              int len = jTextField1.getDocument().getLength();
              //Tidy up string
              keyword = keyword.trim();
              keyword = keyword.replaceAll("\\s+"," ");
              keyword = capitalizeWords(keyword);
              String flwor = "";
              //Check that the keyword value doesn't already exist
              flwor = "let $i := collection('" + containerFileName + "')/reference/keywords/keyword[@value = '" + keyword + "'] \n";
              flwor += "return \n";
              flwor += "if(count($i)) then fn:true() \n";
              flwor += "else fn:false() \n";
              boolean keywordExists = bDbConnection.runBooleanQuery(flwor);
              if (keywordExists){
              jOptionPane1.showMessageDialog(new Frame(),
              "The keyword '" + keyword + "' already exists", "Message", jOptionPane1.INFORMATION_MESSAGE);
              try {
              jTextField1.getDocument().remove(0,len);
              } catch (Exception ex) {
              ex.printStackTrace();
              //Terminate method execution
              return;
              //Need to get ID of last keyword
              flwor = "for $i in collection('" + containerFileName + "')/reference/keywords/keyword/@id/text() \n";
              flwor += "order by $i descending \n";
              flwor += "return $i[fn:last()]";
              String[] lastIDArray = new String[1];
              lastIDArray = bDbConnection.runQuery(flwor);
              String lastIDStr = lastIDArray[0];
              //create incremented ID value
              //Note: XML ID attributes must start with a letter - that's why we need to do all this nonsense!
              int lastIDNum = new Integer(lastIDStr.substring(1));
              int nextIDNum = ++lastIDNum;
              String nextIDStr = String.format("%04d", nextIDNum);
              nextIDStr = "K" + nextIDStr;
              //OK Finally - actually add the keyword to the xml reference file
              //use BDB API for updating - since XQuery does not allow
              try
              XmlQueryContext qc = myManager.createQueryContext();
              XmlUpdateContext uc = myManager.createUpdateContext();
              XmlModify mod = myManager.createModify();
              XmlQueryExpression select = myManager.prepare("/reference/keywords", qc);
              mod.addAppendStep(select, XmlModify.Element, "keyword", "");
              select = myManager.prepare("/reference/keywords/keyword[fn:last()]", qc);
              mod.addAppendStep(select, XmlModify.Attribute, "id", nextIDStr);
              mod.addAppendStep(select, XmlModify.Attribute, "value", keyword);
              XmlDocument updateDoc = myContainer.getDocument(docName);
              XmlValue docValue = new XmlValue(updateDoc);
              mod.execute(docValue, qc, uc);
              catch(Exception e){
              System.out.println("Error adding keyword: " + e.getMessage());
              //Add the new keyword to the list of selected keywords
              model_2.addElement(keyword);
              sortModelElements(model_2);
              try {
              jTextField1.getDocument().remove(0,len);
              } catch (Exception ex) {
              ex.printStackTrace();
              private questionOb[] getQuestionsFromDB(keywordOb[] keywordIDs){
              questionOb[] qobs = null;
              String seq = "";
              String flwor = "";
              int num = 0;
              seq = keywordObsToSeq(keywordIDs);
              flwor = "for $i in " + seq + "\n";
              flwor += "let $q := collection('" + containerFileName + "') /reference/questions/question[./keywordRef/@idref/text() = $i] \n";
              flwor += "return $q";
              try
              XmlQueryContext context = myManager.createQueryContext();
              context.setEvaluationType(XmlQueryContext.Eager);
              context.setReturnType(XmlQueryContext.DeadValues);
              XmlResults results = myManager.query(flwor, context);
              // Report Query Info
              String message = "Found ";
              message += results.size() + " entries for query: '";
              message += flwor + "'\n";
              System.out.println(message);
              int numQuestions;
              numQuestions = results.size();
              qobs = new questionOb[numQuestions];
              String[] keyRefs = new String[1];
              String[] keyRefs2 = new String[1];
              XmlResults atts, atts2 = null;
              XmlValue keyRefElem, keyRefAtt = null;
              int i;
              for(i=0; i < numQuestions; i++){
              XmlValue val = results.next();
              atts = val.getAttributes();
              String id = atts.next().getNodeValue();
              String value = atts.next().getNodeValue();
              keyRefElem = val.getFirstChild();
              int j=0;
              while (!keyRefElem.isType(XmlValue.NONE)){
              if(keyRefElem.getType() == XmlValue.TEXT_NODE){
              keyRefElem = keyRefElem.getNextSibling();
              if(keyRefElem.isType(XmlValue.NONE)){
              break;
              System.out.println("1");
              atts2 = keyRefElem.getAttributes();
              System.out.println("2");
              keyRefs[j] = atts2.next().getNodeValue();
              System.out.println("3" + keyRefs[j]);
              System.arraycopy(keyRefs,0,keyRefs2,0,j+1);
              System.out.println("4");
              keyRefs = new String[j+2];
              System.out.println("5");
              System.arraycopy(keyRefs2,0,keyRefs,0,j+1);
              System.out.println("6");
              keyRefs2 = new String[j+2];
              System.out.println("7");
              keyRefElem = keyRefElem.getNextSibling();
              System.out.println("8");
              j++;
              System.out.println(keyRefs[0]+keyRefs[1]);
              //Create new Question Object with retrieved values
              System.out.println("bef");
              questionOb qo = new questionOb(id, value, keyRefs);
              System.out.println("aft");
              qobs[i] = qo;
                        catch(Exception e)
              System.out.println("XML Exception is "+ e.getMessage());
              return qobs;
              private void sortModelElements(DefaultListModel model){
              //Getting the size of the model
              int size = model.getSize();
              //Creating the keyword object based on the size of the model
              keywordOb[] word = new keywordOb[size];
              int i=0;
              //keywordOb j;
              for(i=0; i < size; i++){
              word[i] = (keywordOb) model.getElementAt(i);
              Arrays.sort(word);
              for(i=0; i < size; i++){
              //model.setElementAt(word[i], i);
              model.set(i,word[i]);
              public void messageBox(String message)
              jOptionPane1.showMessageDialog(new Frame(), message , "Message", jOptionPane1.INFORMATION_MESSAGE);
              class KeywordFilter extends DocumentFilter {
              public void insertString(FilterBypass fb, int offset, String string, AttributeSet attr)
              throws BadLocationException {
              int len = fb.getDocument().getLength();
              if(len==0 & noFunnyChars(string) & !string.trim().equals("")){
              fb.insertString(offset, string, attr);
              if(len > 0 & noFunnyChars(string) & len < 30){
              fb.insertString(offset, string, attr);
              public void replace(FilterBypass fb, int offset, int length, String string, AttributeSet attr)
              throws BadLocationException {
              int len = fb.getDocument().getLength();
              if(len==0 & noFunnyChars(string) & !string.trim().equals("")){
              fb.replace(offset, length, string, attr);
              if(len > 0 & noFunnyChars(string) & len < 30){
              fb.insertString(offset, string, attr);
              private boolean noFunnyChars(String s){
              String regex = "[A-Za-z\\s]+";
              boolean b = Pattern.matches(regex, s);
              return b;
              private String capitalizeWords(String s){
              String s2;
              char[] c = s.toCharArray();
              int i = 0;
              c[0] = Character.toUpperCase(c[0]);
              for(i=0; i < c.length; i++){
              if (!Character.isLetter(c[i])){
              c[i+1] = Character.toUpperCase(c[i+1]);
              s2 = String.valueOf(c);
              return s2;
              private String keywordObsToSeq(keywordOb[] a) {
              StringBuffer result = new StringBuffer();
              String resultStr = "";
              result.append("('" + a[0].getId() + "', ");
              for (int i=1; i < a.length; i++) {
              result.append("'" + a[i].getId() + "', ");
              resultStr = result.toString();
              resultStr = resultStr.trim();
              resultStr = resultStr.substring(0,resultStr.length()-1) + ")";
              return resultStr;
         // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
              private void initComponents() {
              jScrollPane1 = new javax.swing.JScrollPane();
              jList1 = new javax.swing.JList();
              jScrollPane2 = new javax.swing.JScrollPane();
              jList2 = new javax.swing.JList();
              jLabel1 = new javax.swing.JLabel();
              jLabel2 = new javax.swing.JLabel();
              jLabel3 = new javax.swing.JLabel();
              jTextField1 = new javax.swing.JTextField();
              jButton1 = new javax.swing.JButton();
              jButton2 = new javax.swing.JButton();
              jButton3 = new javax.swing.JButton();
              jScrollPane3 = new javax.swing.JScrollPane();
              jList3 = new javax.swing.JList();
              jLabel4 = new javax.swing.JLabel();
              jButton4 = new javax.swing.JButton();
              jButton5 = new javax.swing.JButton();
              jLabel5 = new javax.swing.JLabel();
              jScrollPane4 = new javax.swing.JScrollPane();
              jTextArea1 = new javax.swing.JTextArea();
              jButton6 = new javax.swing.JButton();
              setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
              jList1.addMouseListener(new java.awt.event.MouseAdapter() {
              public void mouseClicked(java.awt.event.MouseEvent evt) {
              jList1MouseClicked(evt);
              jScrollPane1.setViewportView(jList1);
              jList2.addMouseListener(new java.awt.event.MouseAdapter() {
              public void mouseClicked(java.awt.event.MouseEvent evt) {
              jList2MouseClicked(evt);
              jScrollPane2.setViewportView(jList2);
              jLabel1.setText("Available Keywords");
              jLabel2.setText("Selected Keywords");
              jLabel3.setText("Add New Keyword");
              jTextField1.setFont(new java.awt.Font("Tahoma", 0, 12));
              jTextField1.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
              jTextField1ActionPerformed(evt);
              jButton1.setText("Add Keyword");
              jButton1.setEnabled(false);
              jButton1.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton1ActionPerformed(evt);
              jButton2.setText("Modify Keyword");
              jButton3.setText("Remove Keyword");
              jList3.setModel(new javax.swing.AbstractListModel() {
              String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" };
              public int getSize() { return strings.length; }
              public Object getElementAt(int i) { return strings[i]; }
              jScrollPane3.setViewportView(jList3);
              jLabel4.setText("Questions");
              jButton4.setText("OK");
              jButton4.addActionListener(new java.awt.event.ActionListener() {
              public void actionPerformed(java.awt.event.ActionEvent evt) {
              jButton4ActionPerformed(evt);
              jButton5.setText("Cancel");
              jLabel5.setText("Add New Question");
              jTextArea1.setColumns(20);
              jTextArea1.setRows(2);
              jScrollPane4.setViewportView(jTextArea1);
              jButton6.setText("Add Question");
              javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
              getContentPane().setLayout(layout);
              layout.setHorizontalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
              .addContainerGap(488, Short.MAX_VALUE)
              .addComponent(jButton5)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jButton4, javax.swing.GroupLayout.PREFERRED_SIZE, 65, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addGap(29, 29, 29))
              .addGroup(layout.createSequentialGroup()
              .addGap(38, 38, 38)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
              .addComponent(jButton6)
              .addContainerGap())
              .addGroup(layout.createSequentialGroup()
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
              .addComponent(jScrollPane4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 559, Short.MAX_VALUE)
              .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
              .addComponent(jLabel5)
              .addComponent(jLabel4)
              .addGroup(layout.createSequentialGroup()
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addComponent(jLabel1)
              .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 148, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGap(31, 31, 31)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addComponent(jLabel2)
              .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGap(32, 32, 32)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, 155, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addComponent(jLabel3)
              .addComponent(jButton1)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
              .addComponent(jButton2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
              .addComponent(jButton3, javax.swing.GroupLayout.Alignment.LEADING))))
              .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 559, Short.MAX_VALUE)))
              .addContainerGap(58, Short.MAX_VALUE))))
              layout.setVerticalGroup(
              layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
              .addGroup(layout.createSequentialGroup()
              .addGap(24, 24, 24)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
              .addGroup(layout.createSequentialGroup()
              .addComponent(jLabel1)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
              .addGroup(layout.createSequentialGroup()
              .addComponent(jLabel2)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 146, javax.swing.GroupLayout.PREFERRED_SIZE))
              .addGroup(layout.createSequentialGroup()
              .addComponent(jLabel3)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jButton1)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
              .addComponent(jButton2)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jButton3))))
              .addGap(29, 29, 29)
              .addComponent(jLabel4)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addGap(20, 20, 20)
              .addComponent(jLabel5)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jScrollPane4, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
              .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
              .addComponent(jButton6)
              .addGap(31, 31, 31)
              .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
              .addComponent(jButton4)
              .addComponent(jButton5))
              .addGap(21, 21, 21))
              pack();
    }// </editor-fold>
              //Event handlers
              private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
              // TODO add your handling code here:
                        try {
                             myDbContainer.close();
                             myDbEnv.cleanup();
                        } catch (Exception e) {
                             logger.info("Could not close container/or env - Component");
                        super.setVisible(false);
                        super.dispose();
                   private void jTextField1ActionPerformed(java.awt.event.ActionEvent evt) {
              // TODO add your handling code here:
                        String val;
                        val = jTextField1.getText();
                        if(val != null & val.trim() != "" & noFunnyChars(val) ){
                             jButton1.setEnabled(true);
                        else {
                             jButton1.setEnabled(false);
                   private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
              // TODO add your handling code here:
                   // Add new keyword to the xml reference file
                        //addNewKeyword(jTextField1.getText());
                   private void jList2MouseClicked(java.awt.event.MouseEvent evt) {
              // TODO add your handling code here:
                        if(evt.getClickCount() == 2) {
                             keywordOb k = (keywordOb)jList2.getSelectedValue();
                             model_2.removeElement(k);
                             model_1.addElement(k);
                             sortModelElements(model_1);
                             questionOb q = null;
                             //Remove associated questions from listbox
                             int i,j;
                             for(i=0; i < model_3.size(); i++){
                                  q = (questionOb)model_3.getElementAt(i);
                                  for(j=0; j < model_3.size(); j++){
                                       if (q.getKeywordRefs()[j].equals(k.getId())){
                                            model_3.removeElement(q);
                                            i--;
                                            break;
                   private void jList1MouseClicked(java.awt.event.MouseEvent evt) {
              // TODO add your handling code here:
                   if(evt.getClickCount() == 2) {
                             //Getting properties of the selecteditem item in jList1.
                        keywordOb k = (keywordOb)jList1.getSelectedValue();
                        //Removing the element from jList1
                        model_1.removeElement(k);
                        //Adding the element to jList2
                        model_2.addElement(k);
                        sortModelElements(model_2);
                        //Load the questions for the selected keywords
                        int len;
                        len = model_2.getSize();
                        keywordOb[] dbQuestionsOb = new keywordOb[5];
                        keywordOb[] selectedKeywordsOb = new keywordOb[len];
                        String[] selectedKeywordIDs = new String[len];
                        int i;
                        for(i=0; i < len; i++) {
                             selectedKeywordsOb[i] = (keywordOb)model_2.getElementAt(i);
                             selectedKeywordIDs[i] = selectedKeywordsOb[i].getId();
                        questionOb[] questionsOb = getQuestionsFromDB(selectedKeywordsOb);
                        model_3.removeAllElements();
                        for(i=0; i < questionsOb.length; i++){
                             model_3.addElement(questionsOb[i]);
                        // sortModelElements(model_3);
    I think thats too much code for one post!

  • Used and allocated Shadow Copy Storage space is showing values in GB .

    Hi All ,
    This is an production issue and i need an urgent help on this case.
    In my environment i am having exchange server 2013 in DAG extended with three sites.On that i am having two mailbox servers in the production site and one mailbox server in remaining two sites.
    we have mounted all the mailbox databases in one production mailbox server.Those databases are present in LUN mapped to the production mailbox servers from SAN storage.
    Issue : 
    Few of the mailbox databases are occupying too much of size on the LUN than it's original size.
    Say for instance i have kept the mailbox database called "test" which is present on the LUN with the size of 190 GB.On that whole space the mailbox database is occupying only 100GB but on the diskmgmt and also on the explorer it is showing
    only the free space as 17 GB.
    Finally we have run the below mentioned command and found that the used and allocated shadow storage is occupying the size around 34 GB.
    Attached snap for your reference : 
    Question : How to reclaim the space occupied by the shadow copy storage to the LUN ? If possible someone tell me why this issue is happening ?
    Thanks & Regards S.Nithyanandham

    Hi,
    According to my research and technology, it’s caused by Volume Shadow Copy Service which is used to backup infrastructure for the Microsoft operation systems, as well as a mechanism for creating consistent point-in-time copies of data known as shadow copies.
    We can use VssAdmin to create, delete, and list information about shadow copies. More details about Volume Shadow Copy Service, for your reference:
    https://technet.microsoft.com/en-us/library/ee923636(v=ws.10).aspx
    Besides, this issue may be related to Windows server. I recommend you to contact to Windows Server Team so that you can get more professional suggestions, please refer to:
    https://social.technet.microsoft.com/Forums/windowsserver/en-US/home?category=windowsserver
    Thanks
    Please remember to mark the replies as answers if they help, and unmark the answers if they provide no help. If you have feedback for TechNet Support, contact [email protected]
    Allen Wang
    TechNet Community Support

  • Virtual Bulletin Board

    This is sort or a general reference question, but is there some sort of app that can work as an online bulletin board where people the status of projects over a server?

    This is sort or a general reference question, but is there some sort of app that can work as an online bulletin board where people the status of projects over a server?

Maybe you are looking for

  • J2EE mysql connection pool

    Hello, I am trying to create a mysql connection pool using the admin console. The mysql JDBC driver is located in <install_dir>/domains/domain1/lib/ext. For Datasource Classname I use com.mysql.jdbc.jdbc2.optional.MysqlDataSource A ping results in: O

  • Sharing problem in iTunes 11.1.2.32 ?

    Hey guys I need some help here I Moved my Library to a new Windows 8.1 machine, I was on Win 8 and Sharing  worked great. I copied my Library over to the new machine, did all the required Signed in, Authorized the machine, but nothing on the iPad or

  • Native AVCHD support

    We need native AVCHD support with no transcode option. if you have a quad or 8 core mac pro it will edit fine.. AVCHD is what the majority of prosumer cameras are and are going to be.. we want tapeless to save us the time and money, we shouldn't have

  • Slow Queries After Upgrade from 9i to 11g

    We are in the process of upgrading several of our databases from 9i to 11g. I am doing some performance testing using SQL developer and I have found that some queries are executed much faster on 9i than 11g. For example, the following query ran in 0.

  • VL10B err

    Hello all, In STO PO is created. But when del. is being created by VL10B, aftr entering PO no. & pressing F8, no line item is coming on the scr: u201CActivities Due for Shipping u201CPurchase orders, fast displayu201D. Why- can any body tell? Rgds.