True singleton implementation

Am I correct in believing that an implementation of the Singleton pattern cannot guarantee the existence of at most one instance of a class across an entire JVM if it uses only simple Java constructs? I understand that the ClassLoader framework allows a class to be loaded several times by different ClassLoaders.
By simple constructs I mean the ClassLoader hierarchy and class initialization and avoiding an "external" service (RMI or other).
I ask because I am trying to implement a file locking procedure. I can guarantee lock exclusivity between JVMs using java.nio.FileLock. However, I am worried that I cannot guarantee exclusivity between Threads within the same JVM (using a classic singleton pattern) - only between Threads with "similar" ClassLoaders.
- Andy

Thanks for your replies everyone.
You could test for the class loader and refuse to
load unless it is the system class loader.How would I do this?You need to test for it in a static initializer.
>
It there a simple way to guarantee that this class
will be loaded by the system class loader or does
each class that references it have to be adapted
apropriately?
You test it in a static initializer and throw a runtime exception if the system class loader is not being used.
This also means that the Singleton class needs to be
found in the system class path - this seems like
pretty ugly solution - especially if we're in a J2EE
container...If you are loading via the system then you are already outside the container.
>
Also, I cannot find anything that clearly states that
there is only one system class loader. Is this the
case?No idea. If this is of concern to you then perhaps you should actually look at why you really need this sort of thing in the first place.

Similar Messages

  • Migratable targets for singleton implementations

    Hi,
    I require some help regarding the use of migratable targets with singleton implementations
    We have a WebLogic 11g environment comprising several managed servers in a cluster. Migratable Targets are also been defined for JMS and JTA services.
    The deployment includes two EARs which may only be deployed to a single server at any one time. The first EAR contains JARs, a WAR and a RAR. The second contains JARs and EJBs. We wish to implement a fail-over solution for these "singleton" EARs on the cluster so that everything would get migrated to another server in the cluster if the initial pinned server fails.
    We had hoped to use the same mechanism as for JMS and JTA services whereby the EARs would simply assigned to a migratable target (with a defined user preferred server and constraint candidate servers). However from reading the documentation and trying out some deployments this scenario does not seem to be supported by WebLogic. For example, a migratable target may not be given as a target during EAR deployment.
    The only option for the singleton services seems to be inheriting from the SingletonService and deploying this to preferred- and candiates servers but this would mean changing quite a few services and we are not sure how to manage the "singleton" RAR.
    Does Weblogic 11g offer a way to deploy a complete EAR to a deployable target? If not, could you please suggest an alternative way of implementing a fail-over solution for our EARs.
    Thanks in advance for your help.
    Regards. Ian.

    I tried deleting and creating them anew but it then messes up the configuration of the migratable targets. What seems to work now is to delete them, create new ones with DIFFERENT names and then updateDomain(). In this case the old ones get really deleted. Really messy stuff.

  • Question: Justification of singleton implementation

    Hi there,
    I have a question here about using singleton design for process that serves lots of threads in a web application behind a servlet justifies? What sort of impact to the server will be even the implementation of singleton is not targeted on synchronization of I/O within the server?
    Thanks

    jwenting wrote:
    georgemc wrote:
    original wrote:
    yawmark wrote:
    but servlets are all singletons. No, they aren't. Having only one instance of a class -- as is often the case with servlets -- is not the same thing as a Singleton.
    is there a reason for this?No, because it isn't true. Stop trolling, daFei.
    ~i take it that you have no answers.Other than the ones he's given, of course. Silly boy
    Steve, best add "a singleton is a class for which you've only created one instance" to the listAnd do remember to pass it around by reference!Heh heh

  • Singleton implementation for Subject

    Can the singleton pattern be applied for
    javax.security.auth.Subject ?
    I am using the below code
    Subject authSubject = null;
    authSubject = Security.login(UserName, password);
    My question is if it is okay to create the Subject as a singleton and use the same object in subsequent calls? The call Security.login will try to do a login operation. I want to not perform this operation over and over again. Is it advisable to create this object as a Singleton?

    Hi,
        I'm not sure about this. But, the BADI/ES "CRM_MKTPL" does not have the "Multiple Use" set. It depends on filter values and only one implementation per filter value is used.
    Regards,
    Arun Prakash

  • LVOOP class Singleton implementa​tion

    Hello all,
    I am trying to implement a 'Singleton' class because I want multiple threads to be able to access the class data.  
    I do have a scalablity concern regarding the class data.  Currently,
    the class data control (cluster) has four array elements.  I plan to
    use one  private (write) method .vi for each data element since I don't
    want to have to update all four arrays.  If I want to added other
    controls (numeric, boolean, array, etc.) to the class data control, I
    will have to create additional write methods and (at least) modify the
    read method.
    Is there an easier way to scale this data?
    I'm using LabVIEW 8.20.
    Regards,
    Mark
    "There is a God shaped vacuum in the heart of every man which cannot be filled by any created thing, but only by God, the Creator, made known through Jesus." - Blaise Pascal

    One new feature of LV8.5 was the ability to automatically create accessors for private class data, saving you time for a normally tedious task.
    And if you implement a Singleton pattern along the lines of the Discussion Forum post I mentioned, adding data accessors is no more difficult for the by reference case than it is for the by value case.
    Are all the arrays in your cluster the same type? If so, you could make your data a little more dynamic to facilitate on flexible accessor VI instead of one for each array. For instance, instead of a cluster of four arrays, you could have one 2D array, where each row represents one of the arrays. Then your accessor takes in the array index to get, and retrieves that row from the 2D array.
    The downside there is that all of the rows have to be the same length, so the shorter arrays will get padded. To get around that, you could have an extra array in your private data that denotes length, with one element for each row. Then you take a subset of the array when passing it out. Or you could have a 1D array of clusters that contain one array in them. Then the arrays in the clusters don't have to be the same length as each other. This is a common way to handle this situation in LabVIEW in general.
    Jarrod S.
    National Instruments

  • SIngleton Implementation

    Hello, I am solving exercises Think in Java by Bruce Eckel said so and the problem ..
    Create a class called ConectionHandle which operates a Fixed Object Array Connection. The developer client should not be able to create objects Connection explicitly, but can only create objects through a static method of ConectionHandre. When ConectionHandre loses objects return a null reference. Try class main .. Tip .. Use the pattern Singleton
    package c05.patrones;
    class Connection{
        //private Constructor
        private Connection(){
            System.out.println("Created Instance");
        static Connection getInstance(){
            return new Connection();
    public class ConnectionHandre {
        static int instances=5;
        static Connection[] Cons = new Connection[5];
        static Connection getInstance(){
            if(instances<1){
                return null;
            }else{
                instances--;
                return Cons[instances].getInstance();
        public static void main(String[] args) {
            ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
              ConnectionHandle.getInstance();
        }The output of this is..
    Created Instance
    Created Instance
    Created Instance
    Created Instance
    Created InstanceIt�s ok my implementation or what happend, please help me, thnks a lot..

    Your implementation is write....Its in your code
    static Connection getInstance(){
            if(instances<1){
                return null;
            }else{
                instances--;
                return Cons[instances].getInstance();
        }which tells that as soon as the the index of the array reaches less than the lowest limit that is the first index you should not return any more new instance but in turn return a null reference therefore after calling the newInstance for five times the static counter reduces to zero and returns back to u null

  • Serializing object of class implementing Singleton Pattern

    hi ,
    if i've a object of a singleton pattern based class and i seriailize that and when i'm desrializing that, i 'll get the object back, but on calling getInstance() method for my singleton class, it will agian call constructor because for the class's static object reference is null, i need to avoid this, for this i've written a setInstance method, which sets the Singleton class's static refernce to the object i desialized, which is fine, but it defeats the singleton pattern
    can anybody suggest me some other way of achieving this...

    If you are trying to deserialize a Singleton implement the Object readResolve() method.
    http://java.sun.com/javase/6/docs/platform/serialization/spec/input.html#5903
    ~Ryan

  • Singleton Classes in Weblogic cluster

    Hi
    Our application is having singleton classes which we refresh programatically ;though very rarely. We need to move our application into a weblogic cluster. The sigleton class refresh also needs to reflect across the servers :
    I could see the SingletonService API here http://download.oracle.com/docs/cd/E12839_01/apirefs.1111/e13941/weblogic/cluster/singleton/SingletonService.html. This contain an activate() and deactivate() .Can we call this activate() method to refresh the singleton object whenever there is a refresh required ? Can we define multiple singleton service classes in the cluster ?
    Thanks
    Suneesh

    I've same issue with singleton service...
    1) I’ve created a cluster MyCluster with Man1 & Man2 managed instances.
    2) I’ve created singleton.jar out of TestCache.java, which is a singleton cache and have deployed it to the MyCluster.
    3) I’ve created man.jar out of StartupClassMan.java, which is a startup class and have deployed it to the MyCluster. And I’ve specified this as startup class for the whole MyCluster.
    4) For MyCluster, I’ve specified com.mytest.TestCache.class as singleton service with preferred server as Man1 with migratable to Man2.
    5) I run Man1, startup class StartupClassMan is invoked and it gets reference to TestCache, populates the cache & prints size as 1.
    6) Now when I run Man2, startup class StartupClassMan is invoked and it get references to TestCache & populates the cache & prints size as 1 only.
    For some reason, TestCache is not considered as true singleton. If it is true singleton, running Man2 should have printed size 2 as Man1 has already put one entry into the cache.
    And I also don't see activate & deactivate method being called when I run Man1 or Man2 servers. Any help on this is really appreciated.
    package com.mytest;
    import java.util.Map;
    import java.util.HashMap;
    public class TestCache implements weblogic.cluster.singleton.SingletonService
    private static TestCache testCache = new TestCache();
    private Map<String, String> mapCache = new HashMap<String, String>();
    private TestCache() {}
    public void activate() {
    System.out.println("TestCache activate called");
    public void deactivate() {
    System.out.println("TestCache deactivate called");
    public static TestCache getTestCache() {
    return testCache;
    public void put(String key, String value) {
    mapCache.put(key, value);
    public String get(String key) {
    return mapCache.get(key);
    public void remove(String key) {
    mapCache.remove(key);
    public int size() {
    return mapCache.size();
    package com.mytest;
    public class StartupClassMan
    public static void main(String args[]) {
    System.out.println("StartupClassMan loaded");
    TestCache testCache = TestCache.getTestCache();
    testCache.put("Man1","Man1");
    System.out.println("size: "+testCache.size());
    }

  • Singleton vs static - which is better?

    Of the two approaches -
    a class which can be used by accessing its ONLY instance(singleton) or a class which has a set of static methods which can be invoked on the class itself
    which is better and why? Or are these just two 'styles' of programming?
    I always get confused as to which way to go? I tend to prefer to have static methods on the class instead of a singleton.
    All insights/comments/ideas welcome.
    Thanks

    Well, there are a few questions you can ask - does the method cause any changes of state, or is it a pure function? If the latter, static is probably the way to go.
    The way you are talking, I gather that there is some state involved.
    Next question: does it make sense for there to be more than one of these per JVM? Not only in the way you currently envision it, but at all, anywhere. For example, consider the list of Strings that the String class keeps so it can consolidate memory and avoid duplication (see String.intern() ). That list makes sense to be static.
    On the other hand, the representation of the state of a board game should not be static, because someone could want to write a program which has multiple games within it - or you could within one game wish to have contingencies or undo-ability (essentially, it might not be as singleton as you think).
    Next, if you think the methods will ever need to be overridden, use a singleton, because static methods aren't, well, dynamic! (in case the singleton is a one-at-a-time singleton but it makes sense to have a change of identity over time).
    I have never written a true singleton - though often written classes which I did not PLAN on instantiating more than once.

  • Howto implement temporary changes / rollback in my model?

    First some background information: I'm building a project management tool. It's based on JEE, Struts 2 and uses AJAX. The model exists as a singleton within the application-server. The model is basically an object tree which consists of projects, releases, usecases, tasks, team members and employees. The model uses the observer pattern to update data when it's necessary. For instance if you change the amount of work required to solve a task, the total amount of work to finish the usecase and the total amount of work to finish the release are updated.
    I've got a dialog where a user can add and remove team members from a task and set multiple attributes on each team member. All these changes will affect the whole model (for instance, if you add an employee to the task-team this has an effect on the availability of this employee for other tasks). In the UI the user will see the result of his actions immediately, for that i need to update the model. But, what if the user hits the Cancel button? Or worse, leaves the dialog open and closes the browser? In that case I need to rollback my model. But since it's almost impossible to notice the closing of the browser reliably, rollback is not an option. So the best thing would be to work on a temporary model when the dialog opens. Then the user may change whatever he wants, and when he finally hits the OK button the temporary model needs to be merged with the "real" singleton-model (Since another user may have changed something in another task).
    Now to my question: How would you implement this? Is there a pattern one could use? Do I really have to clone the whole object tree or is there a better way to solve this?
    Thanks for your replies,
    André

    Thanks for your answers. They gave me some fresh ideas.
    Both approaches go into the same direction somehow. I like the idea of having a simple facade, that hides the complex stuff (like the copy-on-write implementation). Anyway, it really looks like my singleton implementation is too simple for what I'm doing here sigh.

  • Singleton across different WARs?....

    Hi,
    Would like to know if there's any way to allow a truly singleton class to exist among web applications deployed via different war files seperately on the same server instance in one box?
    regards,
    Gab

    Hello Gab,
    I think an issue similar to this one has been discussed earlier on this forum. Please refer this link
    http://forums.bea.com/bea/message.jspa?messageID=202244515#202244515
    It says...
    "According to Ed Roman's book, the only way to create a true singleton class in an app server environment is to bind a RMI-IIOP stub to JNDI and do a lookup in order to retrieve the same object instance".
    In case you are using WLS 7.0 , there are couple of bugs in 7.0 related to behavior of singleton in different war files.Try to get information on CR074842 from [email protected] and for CR056911, refer following link which gives the summary of the CR's issue.
    http://e-docs.bea.com/wls/docs70/notes/resolved.html#1044292
    I hope it helps,
    Regards,
    Kuldeep Singh.

  • Urgent help with quick translation questions

    Hello,
    I am somewhat new to Java. I have a translation to hand in in a few hours (French to English). Argh! I have questions on how I worded some parts of the translation (and also if I understood it right). Could you, great developers, please take a look and see if what I wrote makes sense? I've put *** around the words I wasn't sure about. If it sounds strange or is just plain wrong, please let know. I also separated two terms with a slash, when I was in doubt of which one was the best.
    Many thanks in advance.
    1) Tips- Always ***derive*** the exceptions java.lang.Exception and java.lang.RuntimeException.
    Since these exceptions have an excessively broad meaning, ***the calling layers will not know how to
    distinguish the message sent from the other exceptions that may also be passed to them.***
    2) The use of the finally block does not require a catch block. Therefore, exceptions may be passed back to the
    calling layers, while effectively freeing resources ***attributed*** locally
    3) TIPS- Declare the order for SQL ***statements/elements*** in the constant declaration section (private static final).
    Although this recommendation slightly hinders reading, it can have a significant impact on performance. In fact, since
    the layers of access to data are ***low level access***, their optimization may be readily felt from the user’s
    perspective.
    4) Use “inlining.”
    Inlining is a technique used by the Java compiler. Whenever possible, during compilation, the compiler
    copies the body of a method in place of its call, rather than executing a ***memory jump to the method***.
    In the example below, the "inline" code will run twice as fast as the ***method call***
    5)tips - ***Reset the references to large objects such as arrays to null.***
    Null in Java represents a reference which has not been ***set/established.*** After using a variable with a
    large size, it must be ***reassigned a null value.*** This allows the garbage collector to quickly ***recycle the
    memory allocated*** for the variable
    6) TIPS Limit the indexed access to arrays.
    Access to an array element is costly in terms of performance because it is necessary to invoke a verification
    that ***the index was not exceeded.***
    7) tips- Avoid the use of the “Double-Checked Locking” mechanism.
    This code does not always work in a multi-threaded environment. The run-time behavior ***even depends on
    compilers.*** Thus, use the following ***singleton implementation:***
    8) Presumably, this implementation is less efficient than the previous one, since it seems to perform ***a prior
    initialization (as opposed to an initialization on demand)***. In fact, at runtime, the initialization block of a
    (static) class is called when the keyword MonSingleton appears, whether there is a call to getInstance() or
    not. However, since ***this is a singleton***, any occurrence of the keyword will be immediately followed by a
    call to getInstance(). ***Prior or on demand initializations*** are therefore equivalent.
    If, however, a more complex initialization must take place during the actual call to getInstance, ***a standard
    synchronization mechanism may be implemented, subsequently:***
    9) Use the min and max values defined in the java.lang package classes that encapsulate the
    primitive numeric types.
    To compare an attribute or variable of primitive type integer or real (byte, short, int, long, float or double) to
    ***an extreme value of this type***, use the predefined constants and not the values themselves.
    Vera

    1) Tips- Always ***derive*** the exceptions java.lang.Exception and java.lang.RuntimeException.***inherit from***
    ***the calling layers will not know how to
    distinguish the message sent from the other exceptions that may also be passed to them.***That's OK.
    while effectively freeing resources ***attributed*** locally***allocated*** locally.
    3) TIPS- Declare the order for SQL ***statements/elements*** in the constant declaration section (private static final).***statements***, but go back to the author. There is no such thing as a 'constant declaration section' in Java.
    Although this recommendation slightly hinders reading, it can have a significant impact on performance. In fact, since
    the layers of access to data are ***low level access***, their optimization may be readily felt from the user’s
    perspective.Again refer to the author. This isn't true. It will make hardly any difference to the performance. It is more important from a style perspective.
    4) Use “inlining.”
    Inlining is a technique used by the Java compiler. Whenever possible, during compilation, the compiler
    copies the body of a method in place of its call, rather than executing a ***memory jump to the method***.
    In the example below, the "inline" code will run twice as fast as the ***method call***Refer to the author. This entire paragraph is completely untrue. There is no such thing as 'inlining' in Java, or rather there is no way to obey the instruction given to 'use it'. The compiler will or won't inline of its own accord, nothing you can do about it.
    5)tips - ***Reset the references to large objects such as arrays to null.***Correct, but refer to the author. This is generally considered bad practice, not good.
    Null in Java represents a reference which has not been ***set/established.******Initialized***
    After using a variable with a
    large size, it must be ***reassigned a null value.*** This allows the garbage collector to quickly ***recycle the
    memory allocated*** for the variableAgain refer author. Correct scoping of variables is a much better solution than this.
    ***the index was not exceeded.******the index was not out of range***
    The run-time behavior ***even depends on compilers.***Probably a correct translation but the statement is incorrect. Refer to the author. It does not depend on the compiler. It depends on the version of the JVM specification that is being adhered to by the implementation.
    Thus, use the following ***singleton implementation:***Correct.
    it seems to perform ***a prior initialization (as opposed to an initialization on demand)***.I would change 'prior' to 'automatic pre-'.
    ***this is a singleton***That's OK.
    ***Prior or on demand initializations***Change 'prior' to 'automatic'.
    ***a standard
    synchronization mechanism may be implemented, subsequently:***I think this is nonsense. I would need to see the entire paragraph.
    ***an extreme value of this type******this type's minimum or maximum values***
    I would say your author is more in need of a technical reviewer than a translator at this stage. There are far too serious technical errors in this short sample for comfort. The text isn't publishable as is.

  • Error #1009 at mx.controls::DataGrid/mx.controls:DataGrid::mouseUpHandler()

    Hello.
    At first sorry for my english.
    I have encountered problem with DataGrid control.
    There is DataGrid control, which have custom ItemRenderer
    (MulticolorDataGridItemRenderer).
    This DataGrid control has several properties:
    1) click on a row changes it background color
    2) click on "Filter ON" button, filter DataGrid by "status"
    field
    "TypeError: Error #1009: Cannot access a property or method
    of a null object reference.
    at
    mx.controls::DataGrid/mx.controls:DataGrid::mouseUpHandler()"
    This error occure when filter is ON, by click on a row. It
    occures occasionally. I note that it
    occur when DataGrid's vertical scrollbar is not in top
    position.
    If I remove recovering of scroll position, this bug
    disappear.
    Sample code:
    ~~~~~~~~~~~~
    1. Application mxml:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:Application xmlns:mx="
    http://www.adobe.com/2006/mxml"
    layout="absolute">
    <mx:Script>
    <![CDATA[
    import mx.collections.ArrayCollection;
    import mx.controls.List;
    private var objPrevSelectedItem:Object = null;
    private var arrList:Array = [{name: "Matt", lastname:
    "Chotin", status: "0", selected: "0"},
    {name: "Ely", lastname: "Greenfield", status: "1", selected:
    "0"},
    {name: "Christophe", lastname: "Coenraets", status: "2",
    selected: "0"},
    {name: "Sho", lastname: "Kuwamoto", status: "1", selected:
    "0"},
    {name: "Steven", lastname: "Webster", status: "4", selected:
    "0"},
    {name: "Alistair", lastname: "McLeod", status: "3",
    selected: "0"},
    {name: "Chafic", lastname: "Kazoun", status: "1", selected:
    "0"},
    {name: "Manish", lastname: "Jethani", status: "2", selected:
    "0"},
    {name: "Mike", lastname: "Chambers", status: "4", selected:
    "0"},
    {name: "Ted", lastname: "Patrick", status: "0", selected:
    "0"},
    {name: "Roger", lastname: "Gonzales", status: "1", selected:
    "0"},
    {name: "David", lastname: "Zuckerman", status: "3",
    selected: "0"},
    {name: "Alex", lastname: "Uhlmann", status: "3", selected:
    "0"},
    {name: "Peter", lastname: "Ent", status: "3", selected:
    "0"},
    {name: "Adobe", lastname: "Consulting", status: "2",
    selected: "0"},
    {name: "Marcel", lastname: "Boucher", status: "4", selected:
    "0"},
    {name: "Andrew", lastname: "Trice", status: "1", selected:
    "0"},
    {name: "Mike", lastname: "Morearty", status: "1", selected:
    "0"},
    {name: "Everything", lastname: "Flex", status: "0",
    selected: "0"},
    {name: "Jesse", lastname: "Warden", status: "3", selected:
    "0"},
    {name: "Richinternet", lastname: "Blog", status: "2",
    selected: "0"},
    {name: "Flex", lastname: "Daddy", status: "2", selected:
    "0"},
    {name: "Keun", lastname: "Lee", status: "0", selected: "0"},
    {name: "David", lastname: "Koletta", status: "4", selected:
    "0"},
    {name: "Brian", lastname: "Deitte", status: "1", selected:
    "0"},
    {name: "Darron", lastname: "Schal", status: "2", selected:
    "0"},
    {name: "Narciso", lastname: "Jaramillo", status: "3",
    selected: "0"},
    {name: "Kiwi", lastname: "Teamblog", status: "4", selected:
    "0"},
    {name: "Anthony", lastname: "Rumsey", status: "0", selected:
    "0"}];
    [Bindable]
    private var arrcollDP:ArrayCollection = new
    ArrayCollection(arrList);
    private function fnSelectRow(event:Event):void
    if (objPrevSelectedItem != null)
    objPrevSelectedItem["selected"] = new String("0");
    ArrayCollection(DataGrid(event.target).dataProvider).itemUpdated(objPrevSelectedItem);
    var numScrolPos:Number =
    DataGrid(event.target).verticalScrollPosition;
    Object(DataGrid(event.target).selectedItem)["selected"] =
    new String("1");
    ArrayCollection(DataGrid(event.target).dataProvider).itemUpdated(DataGrid(event.target).s electedItem);
    objPrevSelectedItem =
    Object(DataGrid(event.target).selectedItem);
    if (arrcollDP.filterFunction != null)
    arrcollDP.filterFunction = fnFilter;
    arrcollDP.refresh();
    DataGrid(event.target).verticalScrollPosition = numScrolPos;
    private function fnFilter(item:Object):Boolean
    var bResult:Boolean = new Boolean(false);
    if (String(item["status"]) == "0")
    bResult = true;
    return bResult;
    ]]>
    </mx:Script>
    <mx:DataGrid
    width="100%"
    height="100"
    dataProvider="{arrcollDP}"
    itemRenderer="MulticolorDataGridItemRenderer"
    draggableColumns="false"
    rowHeight="17"
    paddingTop="1"
    paddingBottom="1"
    horizontalGridLineColor="#a0a0a0"
    horizontalGridLines="true"
    change="fnSelectRow(event)">
    <mx:columns>
    <mx:DataGridColumn headerText="Name" dataField="name"
    width="250" textAlign="left" sortable="false"/>
    <mx:DataGridColumn headerText="Last Name"
    dataField="lastname" width="250" textAlign="left"
    sortable="false"/>
    <mx:DataGridColumn headerText="Status" dataField="status"
    width="80" textAlign="center" sortable="false"/>
    </mx:columns>
    </mx:DataGrid>
    <mx:Button label="Filter ON" y="110" x="5"
    click="arrcollDP.filterFunction = fnFilter;
    arrcollDP.refresh();"/>
    <mx:Button label="Filter OFF" y="110" x="105"
    click="arrcollDP.filterFunction = null; arrcollDP.refresh();"/>
    </mx:Application>
    2. MulticolorDataGridItemRenderer component mxml:
    <?xml version="1.0" encoding="utf-8"?>
    <mx:DataGridItemRenderer xmlns:mx="
    http://www.adobe.com/2006/mxml"
    background="true" dataChange="fnChangeColor(event);">
    <mx:Script>
    <![CDATA[
    import mx.controls.dataGridClasses.DataGridColumn;
    import mx.events.FlexEvent;
    import mx.controls.Alert;
    private function fnChangeColor(event:FlexEvent):void
    if (Object(this.data) != null)
    if (!(this.data is DataGridColumn))
    var strTmp:String = String(Object(this.data)["status"]);
    if (strTmp == "0")
    this.backgroundColor = 0xccffcc;
    else if (strTmp == "1")
    this.backgroundColor = 0xffff99;
    else if (strTmp == "2")
    this.backgroundColor = 0x99ccff;
    else if (strTmp == "3")
    this.backgroundColor = 0xffcc99;
    else if (strTmp == "4")
    this.backgroundColor = 0xcc66ff;
    if (String(Object(this.data)["selected"]) == "1")
    this.backgroundColor = 0xff9933;
    ]]>
    </mx:Script>
    </mx:DataGridItemRenderer>
    And one another question: why did disappear standard DataGrid
    control selection mechanism, when I used custom
    DataGridItemRenderer? Try to use the sample code above withou
    fnSelectRow function.
    TIA

    Hi, I will try to explain what i have undestood about this issue.
    I have an application that loads at runtime some modules, and in my project configuration (Flex Modules), i specified some modules to compile optimizing to main application. Besides that, my project uses RSL to the framework linkage, and i perceived that the compiler output reports some warning messages just like "The CSS type selector 'DataGrid' was not processed, because the type was not used in the application." or others similars "The CSS type selector 'TextArea' was not processed, because the type was not used in the application.".
    When i run the application, and click the first time in some grid column, the error "Type Coercion failed: cannot convert ......@abcda2 to ........." happens.
    It happens because, these controls or components has not been linked in the main application compilation, and so, when you use the first module that uses one of these components, only the module loads an instance of these components and maintain on its part of memory.
    Dispite of being loaded in the main application, each module and main application has its SystemManager instance to register and load components, and because of it, when the application try to cast instances of the same component, but at differents SystemManager's singleton implementations, the above error occurs.
    So my solution was to add some reference of the controls or components that appears at the warning messages that was not compiled, to force the main application compilation to add these components at its SystemManager singletons first than any module.
    Only add the name of the component and import its package. Do not have to add to the stage. See below.
    <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" ....>
    <mx:Script>
            <![CDATA[
                        DataGrid;
                        TextArea;
            ]]>
        </mx:Script>
    </mx:Application>

  • SCOM SP1 Groups, Classes and SNMP

    I've been working on a management pack using some of the examples on the net (Kristopher Bash from the operating-quadrantin has been a huge inspiration) to monitor an Isilon cluster.  This had lead me to a number of interesting challenges to over come since I have to design this within the confines of SP1 and I have a unique networking to device configuration. 
    Device Overview:
    The Isilon cluster itself is a number of FreeBSD systems (nodes) joined together via and infiniband backend to create a single NAS.  While normally this would not be an issue, network connectivity to the device and SNMP response from the cluster have been.  In my configuration I have a total of 8 nodes each node has 2 network interfaces.  Of these 16 network interfaces only 2 are accessible/on the same network as my RMS (em1 node2, em1 node4).
    Device SNMP Design:
    While the cluster is highly dynamic the SNMP sub-systems are not.  The MIB created by Isilon does not join the whole of the cluster into an index for SNMP polling.  I can only poll a single nodes OID's.  To over come this limitation Isilon implemented SNMP-Proxy or comtosec within the system.  This allowed me to poll node 3 by changing the community name for the OID I was polling from the discovered name to <discoveredname>_node_3.
    MP Design:
    Now I'm not the best at MP design since I rarely work within SCOM so don't laugh too hard...  I reused items from Kristopher's Cisco MP and created a number of classes for discovery and item hosting.  To address the limitation I found within SCOM for dynamic discovery and 1 IP address 1 Community Name, I created a class property within the root called ConfiguredNodes.  I can poll the Isilon an populate this value (8).  Then I created a sub-class property value called NodeCommStr to fill in all the custom community names I generate using a VB script with Base64 encode/decode, the discovery community name and the ConfiguredNodes value, in the data source for sub-class discovery. public_node_1 public_node_2 etc...
    All in all this is working well however I have run into a few design roadblocks and I have some questions.
    1.  When I discover a set of items within the Isilon cluster the health explorer is not sorting this information alphabetically.  Is there a value I can include in the dependency roll-up to correct this?
    2.  I have run into an issue with the Isilon MIB and I'm looking for the best way to overcome the MIB's design.  They included a fan table with fan information and speed of the fans however there is no status (success{0}, warning{1}, error{2}).  I created a monitor type to compensate for this and included overrides for the warning and critical event points.  This is where I found the curve ball, seems that the fans are not the same....  There are 2 sets of fans - Chassis and Power Supply - and they have different thresholds *rolls eyes*.  Some I'm asking for the best design advice, should I create 2 classes, discoveries, monitor types, etc.?  Or can I address this issue by creating 2 monitor types with a string filter?
    3.  I've been successful in creating this MP and displaying the information as a single device however I was wondering if there was a way to create dynamic groups with sub groups.  This would have to be 100% dynamic since I can add a 9th 10th 192nd (yes 192) node to the cluster.
    Cluster
    -ClusterNode1
    -ClusterNode1Power
    -ClusterNode1Fans
    -etc
    The information is there in the NodeCommStr, I'm just in brain lock on how to design it right now.
    Again, code is raw and a work in progress so please no giggling.  Oh this is a multi post...  Code is too long.
    <Manifest>
    <Identity>
    <ID>IsilonSNMP</ID>
    <Version>1.0.1.2</Version>
    </Identity>
    <Name>IsilonSNMP</Name>
    <References>
    <Reference Alias="MicrosoftSystemCenterNetworkDeviceLibrary">
    <ID>Microsoft.SystemCenter.NetworkDevice.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="Snmp">
    <ID>System.Snmp.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="SystemHardwareLibrary">
    <ID>System.Hardware.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="Windows">
    <ID>Microsoft.Windows.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="SystemPerformanceLibrary">
    <ID>System.Performance.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="System">
    <ID>System.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="SC">
    <ID>Microsoft.SystemCenter.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    <Reference Alias="Health">
    <ID>System.Health.Library</ID>
    <Version>6.0.6278.0</Version>
    <PublicKeyToken>31bf3856ad364e35</PublicKeyToken>
    </Reference>
    </References>
    </Manifest>
    <TypeDefinitions>
    <EntityTypes>
    <ClassTypes>
    <ClassType ID="IsilonSNMP.Class.IsilonCluster" Accessibility="Public" Abstract="false" Base="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice" Hosted="false" Singleton="false">
    <Property ID="Hostname" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    <Property ID="ConfiguredNodes" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    <!-- <Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" /> -->
    </ClassType>
    <ClassType ID="IsilonSNMP.Class.IsilonCluster.Nodes" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.Chassis" Hosted="true" Singleton="false">
    <Property ID="Name" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    </ClassType>
    <ClassType ID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.PhysicalDisk" Hosted="true" Singleton="false">
    <Property ID="Index" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    <!-- <Property ID="ConfiguredNodes" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" /> -->
    <Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    <Property ID="BayIndex" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    </ClassType>
    <ClassType ID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" Accessibility="Public" Abstract="false" Base="SystemHardwareLibrary!System.Fan" Hosted="true" Singleton="false">
    <Property ID="Index" Type="string" Key="true" CaseSensitive="false" Length="256" MinLength="0" />
    <Property ID="NodeCommStr" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    <Property ID="FanNumber" Type="string" Key="false" CaseSensitive="false" Length="256" MinLength="0" />
    </ClassType>
    <ClassType ID="IsilonSNMP.Group.IsilonClusters" Accessibility="Public" Abstract="false" Base="System!System.Group" Hosted="false" Singleton="true" />
    </ClassTypes>
    <RelationshipTypes>
    <RelationshipType ID="IsilonSNMP.Relationship.ClusterHostsNodes" Accessibility="Internal" Abstract="false" Base="System!System.Hosting">
    <Source>IsilonSNMP.Class.IsilonCluster</Source>
    <Target>IsilonSNMP.Class.IsilonCluster.Nodes</Target>
    </RelationshipType>
    <RelationshipType ID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters" Accessibility="Public" Abstract="false" Base="System!System.Containment">
    <Source>IsilonSNMP.Group.IsilonClusters</Source>
    <Target>IsilonSNMP.Class.IsilonCluster</Target>
    </RelationshipType>
    <RelationshipType ID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" Accessibility="Public" Abstract="false" Base="System!System.Hosting">
    <Source>IsilonSNMP.Class.IsilonCluster.Nodes</Source>
    <Target>IsilonSNMP.Class.IsilonCluster.PhysicalDisk</Target>
    </RelationshipType>
    <RelationshipType ID="IsilonSNMP.Relationship.NodesHostsPhysicalFan" Accessibility="Public" Abstract="false" Base="System!System.Hosting">
    <Source>IsilonSNMP.Class.IsilonCluster.Nodes</Source>
    <Target>IsilonSNMP.Class.IsilonCluster.PhysicalFan</Target>
    </RelationshipType>
    </RelationshipTypes>
    </EntityTypes>
    <ModuleTypes>
    <DataSourceModuleType ID="IsilonSNMP.DataSource.BasicSNMPProbe" Accessibility="Internal" Batching="false">
    <Configuration>
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    </Configuration>
    <OverrideableParameters>
    <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    </OverrideableParameters>
    <ModuleImplementation Isolation="Any">
    <Composite>
    <MemberModules>
    <DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    <Scheduler>
    <SimpleReccuringSchedule>
    <Interval>$Config/Interval$</Interval>
    <SyncTime />
    </SimpleReccuringSchedule>
    <ExcludeDates />
    </Scheduler>
    </DataSource>
    <ProbeAction ID="SNMPProbe" TypeID="Snmp!System.SnmpProbe">
    <IsWriteAction>false</IsWriteAction>
    <IP>$Config/IPAddress$</IP>
    <CommunityString>$Config/CommStr$</CommunityString>
    <SnmpVarBinds>
    <SnmpVarBind>
    <OID>$Config/OID$</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    </SnmpVarBinds>
    </ProbeAction>
    <ConditionDetection ID="ValueFilter" TypeID="System!System.ExpressionFilter">
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>NotEqual</Operator>
    <ValueExpression>
    <Value Type="String" />
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </ConditionDetection>
    </MemberModules>
    <Composition>
    <Node ID="ValueFilter">
    <Node ID="SNMPProbe">
    <Node ID="Scheduler" />
    </Node>
    </Node>
    </Composition>
    </Composite>
    </ModuleImplementation>
    <OutputType>Snmp!System.SnmpData</OutputType>
    </DataSourceModuleType>
    <DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverContainmentClasses" Accessibility="Internal" Batching="false">
    <Configuration>
    <IncludeSchemaTypes>
    <SchemaType>System!System.ParamListSchema</SchemaType>
    <SchemaType>System!System.Discovery.MapperSchema</SchemaType>
    </IncludeSchemaTypes>
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="ClassID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="InstanceSettings" type="SettingsType" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    </Configuration>
    <ModuleImplementation Isolation="Any">
    <Composite>
    <MemberModules>
    <DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    <Scheduler>
    <SimpleReccuringSchedule>
    <Interval>60</Interval>
    <SyncTime />
    </SimpleReccuringSchedule>
    <ExcludeDates />
    </Scheduler>
    </DataSource>
    <ConditionDetection ID="Mapper" TypeID="System!System.Discovery.ClassSnapshotDataMapper">
    <ClassId>$Config/ClassID$</ClassId>
    <InstanceSettings>$Config/InstanceSettings$</InstanceSettings>
    </ConditionDetection>
    </MemberModules>
    <Composition>
    <Node ID="Mapper">
    <Node ID="Scheduler" />
    </Node>
    </Composition>
    </Composite>
    </ModuleImplementation>
    <OutputType>System!System.Discovery.Data</OutputType>
    </DataSourceModuleType>
    <DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverCluster" Accessibility="Internal" Batching="false">
    <Configuration>
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="IP" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="CommunityString" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="SystemOID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    </Configuration>
    <OverrideableParameters>
    <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    </OverrideableParameters>
    <ModuleImplementation Isolation="Any">
    <Composite>
    <MemberModules>
    <DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    <Scheduler>
    <SimpleReccuringSchedule>
    <Interval Unit="Seconds">$Config/Interval$</Interval>
    </SimpleReccuringSchedule>
    <ExcludeDates />
    </Scheduler>
    </DataSource>
    <ProbeAction ID="Probe" TypeID="Snmp!System.SnmpProbe">
    <IsWriteAction>false</IsWriteAction>
    <IP>$Config/IP$</IP>
    <CommunityString>$Config/CommunityString$</CommunityString>
    <SnmpVarBinds>
    <SnmpVarBind>
    <OID>.1.3.6.1.4.1.12124.1.1.4.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.4.1.12124.1.1.1.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.2.1.1.5.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.2.1.1.1.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.2.1.1.4.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.2.1.1.6.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    <SnmpVarBind>
    <OID>.1.3.6.1.2.1.1.2.0</OID>
    <Syntax>0</Syntax>
    <Value VariantType="8" />
    </SnmpVarBind>
    </SnmpVarBinds>
    </ProbeAction>
    <ConditionDetection ID="Mapper" TypeID="System!System.Discovery.FilteredClassSnapshotDataMapper">
    <Expression>
    <RegExExpression>
    <ValueExpression>
    <XPathQuery>/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>ContainsSubstring</Operator>
    <Pattern>1.3.6.1.4.1.12124.</Pattern>
    </RegExExpression>
    </Expression>
    <ClassId>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]$</ClassId>
    <InstanceSettings>
    <Settings>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Name>
    <Value>$Data/Source$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Name$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[5]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemDescription$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[4]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemContact$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[3]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemLocation$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[2]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemOID$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[1]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[5]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]/Hostname$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[6]/Value$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</Name>
    <Value>$Data/SnmpVarBinds/SnmpVarBind[7]/Value$</Value>
    </Setting>
    </Settings>
    </InstanceSettings>
    </ConditionDetection>
    <ConditionDetection ID="SystemOIDFilter" TypeID="System!System.ExpressionFilter">
    <Expression>
    <RegExExpression>
    <ValueExpression>
    <Value>$Config/SystemOID$</Value>
    </ValueExpression>
    <Operator>ContainsSubstring</Operator>
    <Pattern>1.3.6.1.4.1.12124.</Pattern>
    </RegExExpression>
    </Expression>
    </ConditionDetection>
    </MemberModules>
    <Composition>
    <Node ID="Mapper">
    <Node ID="Probe">
    <Node ID="SystemOIDFilter">
    <Node ID="Scheduler" />
    </Node>
    </Node>
    </Node>
    </Composition>
    </Composite>
    </ModuleImplementation>
    <OutputType>System!System.Discovery.Data</OutputType>
    </DataSourceModuleType>
    <DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverPhysicalDisk" Accessibility="Internal" Batching="false">
    <Configuration>
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="ConfiguredNodes" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="BayIndex" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    </Configuration>
    <OverrideableParameters>
    <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    </OverrideableParameters>
    <ModuleImplementation Isolation="Any">
    <Composite>
    <MemberModules>
    <DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    <Scheduler>
    <SimpleReccuringSchedule>
    <Interval>$Config/Interval$</Interval>
    <SyncTime />
    </SimpleReccuringSchedule>
    <ExcludeDates />
    </Scheduler>
    </DataSource>
    <ProbeAction ID="ScriptDiscovery" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
    <ScriptName>DiscoverIsilonDisk.vbs</ScriptName>
    <Arguments>$Config/IPAddress$ $Config/CommStr$ $MPElement$ $Target/Id$ $Config/ConfiguredNodes$</Arguments>
    <ScriptBody>
    <![CDATA['Discover PhysicalDisk
    Dim oAPI, oDiscoveryData, oInst, objWMIServices, objWMILocator, oArgs
    set oArgs = Wscript.Arguments
    if oArgs.Count <5 Then
    Wscript.Quit -1
    End If
    DeviceIP = oArgs(0)
    CommStr = oArgs(1)
    SourceID = oArgs(2)
    ManagedEntityId = oArgs(3)
    StrConfiguredNodes = oArgs(4)
    CommStr = Decode(CommStr)
    ConfiguredNodesCommStr = cstr(CommStr)
    wscript.echo CommStr
    Set oAPI = CreateObject("MOM.ScriptAPI")
    set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
    Set objWMILocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIServices = objWMiLocator.ConnectServer("","root\snmp\localhost")
    'Name community name
    GetPhysicalDisks
    'Created community names
    For i = 1 to StrConfiguredNodes
    CommStr = ConfiguredNodesCommStr & "_node_" & i
    GetPhysicalDisks
    Next
    'Return all data to SCOM
    Call oAPI.Return(oDiscoveryData)
    Sub GetPhysicalDisks
    on error resume next
    Set objWmiNamedValueSet = CreateObject("WbemScripting.SWbemNamedValueSet")
    objWmiNamedValueSet.Add "AgentAddress", cstr(DeviceIP)
    objWmiNamedValueSet.Add "AgentReadCommunityName", cstr(CommStr)
    Set colPhysicalDisk = objWmiServices.InstancesOf("SNMP_ISILON_MIB_diskTable", , objWMINamedValueset)
    For each objItem in colPhysicalDisk
    nIndex = objItem.diskBay
    sDesc = objItem.diskSerialNumber
    if nIndex > 0 then
    set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']$")
    call oInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice']/IPAddress$", DeviceIP)
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/Index$", cstr(CommStr) & "-" & cdbl(nIndex))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/NodeCommStr$", Encode(CommStr))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalDisk']/BayIndex$", cdbl(nIndex))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.Nodes']/Name$", "Cluster")
    call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - Bay " & nIndex & " - Serial Number " & HexToString(sDesc))
    'call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", HexToString(sDesc))
    call oDiscoveryData.AddInstance(oInst)
    'Test Section
    'wscript.echo Base64Encode(CommStr)
    'wscript.echo Base64Encoder(CommStr)
    'wscript.Echo CommStr
    'wscript.Echo nIndex
    'Wscript.Echo HexToString(sDesc)
    'wscript.echo cdbl(nIndex) & cstr(CommStr)
    end if
    Next
    on error goto 0
    End Sub
    Function Decode(strB64)
    strXML = "<B64DECODE xmlns:dt=" & Chr(34) & _
    "urn:schemas-microsoft-com:datatypes" & Chr(34) & " " & _
    "dt:dt=" & Chr(34) & "bin.base64" & Chr(34) & ">" & _
    strB64 & "</B64DECODE>"
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument.3.0")
    oXMLDoc.LoadXML(strXML)
    decode = oXMLDoc.selectsinglenode("B64DECODE").nodeTypedValue
    set oXMLDoc = nothing
    End Function
    Function Encode(Str)
    'Use ADODB.Stream to write Ansi string to Unicode stream
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Type = 2
    objStream.Open
    objStream.Charset = "unicode"
    objStream.WriteText Str
    objstream.Flush
    'Read the stream back as a byte array
    objStream.Position = 0
    objStream.Type = 1
    temp = objstream.read(2) 'read two bytes of the stream to discard the byte order mark
    bArray = objStream.Read
    objStream.Close
    'Convert byte array to Base64
    set objXML = createobject("MSXML2.DOMDocument.3.0")
    Set objNode = objXML.createElement("b64")
    objNode.dataType = "bin.base64"
    objNode.nodeTypedValue = bArray
    Encode = objNode.Text
    Set Stream = Nothing
    set objNode = nothing
    set objXML = nothing
    End Function
    Function HexToString(str)
    on error resume next
    sOutput = ""
    For x = 1 To len(str) Step 2
    sChar = Chr(Clng("&h" & Mid(str,x,2)))
    sOutput = sOutput & sChar
    Next
    if err.number = 0 then
    HexToString = sOutput
    Else
    HexToString = str
    end if
    End Function
    set oInst = nothing
    set oDiscoveryData = nothing
    set oArgs = nothing
    set oAPI = nothing
    set objWMILocator = nothing
    set objWMIServices = nothing
    set objWMINamedValueSet = nothing
    ]]>
    </ScriptBody>
    <TimeoutSeconds>120</TimeoutSeconds>
    </ProbeAction>
    </MemberModules>
    <Composition>
    <Node ID="ScriptDiscovery">
    <Node ID="Scheduler" />
    </Node>
    </Composition>
    </Composite>
    </ModuleImplementation>
    <OutputType>System!System.Discovery.Data</OutputType>
    </DataSourceModuleType>

    <DataSourceModuleType ID="IsilonSNMP.DataSource.DiscoverPhysicalFan" Accessibility="Internal" Batching="false">
    <Configuration>
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="CommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="ConfiguredNodes" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="FanNumber" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="FanSpeedHighCritical" type="xsd:integer" />
    <xsd:element minOccurs="1" name="FanSpeedLowWarn" type="xsd:integer" />
    <xsd:element minOccurs="1" name="FanSpeedLowCritical" type="xsd:integer" />
    </Configuration>
    <OverrideableParameters>
    <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedHighCritical" Selector="$Config/FanSpeedHighCritical$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedLowWarn" Selector="$Config/FanSpeedLowWarn$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedLowCritical" Selector="$Config/FanSpeedLowCritical$" ParameterType="int" />
    </OverrideableParameters>
    <ModuleImplementation Isolation="Any">
    <Composite>
    <MemberModules>
    <DataSource ID="Scheduler" TypeID="System!System.Scheduler">
    <Scheduler>
    <SimpleReccuringSchedule>
    <Interval>$Config/Interval$</Interval>
    <SyncTime />
    </SimpleReccuringSchedule>
    <ExcludeDates />
    </Scheduler>
    </DataSource>
    <ProbeAction ID="ScriptDiscovery" TypeID="Windows!Microsoft.Windows.ScriptDiscoveryProbe">
    <ScriptName>DiscoverIsilonPhysicalFan.vbs</ScriptName>
    <Arguments>$Config/IPAddress$ $Config/CommStr$ $MPElement$ $Target/Id$ $Config/ConfiguredNodes$</Arguments>
    <ScriptBody>
    <![CDATA['Discover PhysicalFan
    Dim oAPI, oDiscoveryData, oInst, objWMIServices, objWMILocator, oArgs
    set oArgs = Wscript.Arguments
    if oArgs.Count <5 Then
    Wscript.Quit -1
    End If
    DeviceIP = oArgs(0)
    CommStr = oArgs(1)
    SourceID = oArgs(2)
    ManagedEntityId = oArgs(3)
    StrConfiguredNodes = oArgs(4)
    CommStr = Decode(CommStr)
    ConfiguredNodesCommStr = cstr(CommStr)
    wscript.echo CommStr
    Set oAPI = CreateObject("MOM.ScriptAPI")
    set oDiscoveryData = oAPI.CreateDiscoveryData(0, SourceId, ManagedEntityId)
    Set objWMILocator = CreateObject("WbemScripting.SWbemLocator")
    Set objWMIServices = objWMiLocator.ConnectServer("","root\snmp\localhost")
    'Name community name
    GetPhysicalFan
    'Created community names
    For i = 1 to StrConfiguredNodes
    CommStr = ConfiguredNodesCommStr & "_node_" & i
    GetPhysicalFan
    Next
    'Return all data to SCOM
    Call oAPI.Return(oDiscoveryData)
    Sub GetPhysicalFan
    on error resume next
    Set objWmiNamedValueSet = CreateObject("WbemScripting.SWbemNamedValueSet")
    objWmiNamedValueSet.Add "AgentAddress", cstr(DeviceIP)
    objWmiNamedValueSet.Add "AgentReadCommunityName", cstr(CommStr)
    Set colPhysicalFan = objWmiServices.InstancesOf("SNMP_ISILON_MIB_FanTable", , objWMINamedValueset)
    For each objItem in colPhysicalFan
    nIndex = objItem.fanNumber
    sDesc = objItem.fanDescription
    if nIndex > 0 then
    set oInst = oDiscoveryData.CreateClassInstance("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']$")
    call oInst.AddProperty("$MPElement[Name='MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice']/IPAddress$", DeviceIP)
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/Index$", cstr(CommStr) & "-" & cdbl(nIndex))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/NodeCommStr$", Encode(CommStr))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.PhysicalFan']/FanNumber$", cdbl(nIndex))
    call oInst.AddProperty("$MPElement[Name='IsilonSNMP.Class.IsilonCluster.Nodes']/Name$", "Cluster")
    'call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - Bay " & nIndex & " - Serial Number " & HexToString(sDesc))
    call oInst.AddProperty("$MPElement[Name='System!System.Entity']/DisplayName$", "SNMP Host " & cstr(CommStr) & " - " & HexToString(sDesc))
    call oDiscoveryData.AddInstance(oInst)
    'Test Section
    'wscript.echo Base64Encode(CommStr)
    'wscript.echo Base64Encoder(CommStr)
    'wscript.Echo CommStr
    'wscript.Echo nIndex
    'Wscript.Echo HexToString(sDesc)
    'wscript.echo cdbl(nIndex) & cstr(CommStr)
    end if
    Next
    on error goto 0
    End Sub
    Function Decode(strB64)
    strXML = "<B64DECODE xmlns:dt=" & Chr(34) & _
    "urn:schemas-microsoft-com:datatypes" & Chr(34) & " " & _
    "dt:dt=" & Chr(34) & "bin.base64" & Chr(34) & ">" & _
    strB64 & "</B64DECODE>"
    Set oXMLDoc = CreateObject("MSXML2.DOMDocument.3.0")
    oXMLDoc.LoadXML(strXML)
    decode = oXMLDoc.selectsinglenode("B64DECODE").nodeTypedValue
    set oXMLDoc = nothing
    End Function
    Function Encode(Str)
    'Use ADODB.Stream to write Ansi string to Unicode stream
    Set objStream = CreateObject("ADODB.Stream")
    objStream.Type = 2
    objStream.Open
    objStream.Charset = "unicode"
    objStream.WriteText Str
    objstream.Flush
    'Read the stream back as a byte array
    objStream.Position = 0
    objStream.Type = 1
    temp = objstream.read(2) 'read two bytes of the stream to discard the byte order mark
    bArray = objStream.Read
    objStream.Close
    'Convert byte array to Base64
    set objXML = createobject("MSXML2.DOMDocument.3.0")
    Set objNode = objXML.createElement("b64")
    objNode.dataType = "bin.base64"
    objNode.nodeTypedValue = bArray
    Encode = objNode.Text
    Set Stream = Nothing
    set objNode = nothing
    set objXML = nothing
    End Function
    Function HexToString(str)
    on error resume next
    sOutput = ""
    For x = 1 To len(str) Step 2
    sChar = Chr(Clng("&h" & Mid(str,x,2)))
    sOutput = sOutput & sChar
    Next
    if err.number = 0 then
    HexToString = sOutput
    Else
    HexToString = str
    end if
    End Function
    set oInst = nothing
    set oDiscoveryData = nothing
    set oArgs = nothing
    set oAPI = nothing
    set objWMILocator = nothing
    set objWMIServices = nothing
    set objWMINamedValueSet = nothing
    ]]>
    </ScriptBody>
    <TimeoutSeconds>120</TimeoutSeconds>
    </ProbeAction>
    </MemberModules>
    <Composition>
    <Node ID="ScriptDiscovery">
    <Node ID="Scheduler" />
    </Node>
    </Composition>
    </Composite>
    </ModuleImplementation>
    <OutputType>System!System.Discovery.Data</OutputType>
    </DataSourceModuleType>
    </ModuleTypes>
    <MonitorTypes>
    <UnitMonitorType ID="IsilonSNMP.MonitorType.PhysicalDiskStatus" Accessibility="Internal">
    <MonitorTypeStates>
    <MonitorTypeState ID="PhysicalDiskOK" NoDetection="false" />
    <MonitorTypeState ID="PhysicalDiskNotOK" NoDetection="false" />
    </MonitorTypeStates>
    <Configuration>
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    </Configuration>
    <MonitorImplementation>
    <MemberModules>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.BasicSNMPProbe">
    <Interval>$Config/Interval$</Interval>
    <IPAddress>$Config/IPAddress$</IPAddress>
    <CommStr>$Config/NodeCommStr$</CommStr>
    <OID>$Config/OID$</OID>
    </DataSource>
    <ConditionDetection ID="CDPhysicalDiskOK" TypeID="System!System.ExpressionFilter">
    <Expression>
    <RegExExpression>
    <ValueExpression>
    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>ContainsSubstring</Operator>
    <Pattern>HEALTHY</Pattern>
    </RegExExpression>
    </Expression>
    </ConditionDetection>
    <ConditionDetection ID="CDPhysicalDiskNotOK" TypeID="System!System.ExpressionFilter">
    <Expression>
    <RegExExpression>
    <ValueExpression>
    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>DoesNotContainSubstring</Operator>
    <Pattern>HEALTHY</Pattern>
    </RegExExpression>
    </Expression>
    </ConditionDetection>
    </MemberModules>
    <RegularDetections>
    <RegularDetection MonitorTypeStateID="PhysicalDiskOK">
    <Node ID="CDPhysicalDiskOK">
    <Node ID="DS1" />
    </Node>
    </RegularDetection>
    <RegularDetection MonitorTypeStateID="PhysicalDiskNotOK">
    <Node ID="CDPhysicalDiskNotOK">
    <Node ID="DS1" />
    </Node>
    </RegularDetection>
    </RegularDetections>
    </MonitorImplementation>
    </UnitMonitorType>
    <UnitMonitorType ID="IsilonSNMP.MonitorType.PhysicalFanStatus" Accessibility="Internal">
    <MonitorTypeStates>
    <MonitorTypeState ID="PhysicalFanOK" NoDetection="false" />
    <MonitorTypeState ID="PhysicalFanWarn" NoDetection="false" />
    <MonitorTypeState ID="PhysicalFanCritical" NoDetection="false" />
    </MonitorTypeStates>
    <Configuration>
    <xsd:element minOccurs="1" name="Interval" type="xsd:integer" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="IPAddress" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="OID" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="NodeCommStr" type="xsd:string" xmlns:xsd="http://www.w3.org/2001/XMLSchema" />
    <xsd:element minOccurs="1" name="FanSpeedHighCritical" type="xsd:integer" />
    <xsd:element minOccurs="1" name="FanSpeedLowWarn" type="xsd:integer" />
    <xsd:element minOccurs="1" name="FanSpeedLowCritical" type="xsd:integer" />
    </Configuration>
    <OverrideableParameters>
    <OverrideableParameter ID="Interval" Selector="$Config/Interval$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedHighCritical" Selector="$Config/FanSpeedHighCritical$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedLowWarn" Selector="$Config/FanSpeedLowWarn$" ParameterType="int" />
    <OverrideableParameter ID="FanSpeedLowCritical" Selector="$Config/FanSpeedLowCritical$" ParameterType="int" />
    </OverrideableParameters>
    <MonitorImplementation>
    <MemberModules>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.BasicSNMPProbe">
    <Interval>$Config/Interval$</Interval>
    <IPAddress>$Config/IPAddress$</IPAddress>
    <CommStr>$Config/NodeCommStr$</CommStr>
    <OID>$Config/OID$</OID>
    </DataSource>
    <ConditionDetection ID="CDPhysicalFanOK" TypeID="System!System.ExpressionFilter">
    <Expression>
    <And>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>Less</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedHighCritical$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>Greater</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </And>
    </Expression>
    </ConditionDetection>
    <ConditionDetection ID="CDPhysicalFanWarn" TypeID="System!System.ExpressionFilter">
    <Expression>
    <And>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>LessEqual</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>Greater</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedLowWarn$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </And>
    </Expression>
    </ConditionDetection>
    <ConditionDetection ID="CDPhysicalFanCritical" TypeID="System!System.ExpressionFilter">
    <Expression>
    <Or>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>GreaterEqual</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedHighCritical$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    <Expression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="Integer">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>LessEqual</Operator>
    <ValueExpression>
    <Value Type="Integer">$Config/FanSpeedLowCritical$</Value>
    </ValueExpression>
    </SimpleExpression>
    </Expression>
    </Or>
    </Expression>
    </ConditionDetection>
    </MemberModules>
    <RegularDetections>
    <RegularDetection MonitorTypeStateID="PhysicalFanOK">
    <Node ID="CDPhysicalFanOK">
    <Node ID="DS1" />
    </Node>
    </RegularDetection>
    <RegularDetection MonitorTypeStateID="PhysicalFanWarn">
    <Node ID="CDPhysicalFanWarn">
    <Node ID="DS1" />
    </Node>
    </RegularDetection>
    <RegularDetection MonitorTypeStateID="PhysicalFanCritical">
    <Node ID="CDPhysicalFanCritical">
    <Node ID="DS1" />
    </Node>
    </RegularDetection>
    </RegularDetections>
    </MonitorImplementation>
    </UnitMonitorType>
    </MonitorTypes>
    </TypeDefinitions>
    <Monitoring>
    <Discoveries>
    <Discovery ID="IsilonSNMP.Discovery.Cluster" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    <Category>Discovery</Category>
    <DiscoveryTypes>
    <DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.Nodes" />
    <DiscoveryRelationship TypeID="IsilonSNMP.Relationship.ClusterHostsNodes" />
    </DiscoveryTypes>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverContainmentClasses">
    <IPAddress>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    <ClassID>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.Nodes"]$</ClassID>
    <InstanceSettings>
    <Settings>
    <Setting>
    <Name>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Name>
    <Value>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="System!System.Entity"]/DisplayName$</Name>
    <Value>Cluster</Value>
    </Setting>
    <Setting>
    <Name>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.Nodes"]/Name$</Name>
    <Value>Cluster</Value>
    </Setting>
    </Settings>
    </InstanceSettings>
    </DataSource>
    </Discovery>
    <Discovery ID="IsilonSNMP.Discovery.IsilonCluster" Enabled="true" Target="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    <Category>Discovery</Category>
    <DiscoveryTypes>
    <DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster" />
    </DiscoveryTypes>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverCluster">
    <Interval>600</Interval>
    <IP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IP>
    <CommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommunityString>
    <SystemOID>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/SystemOID$</SystemOID>
    </DataSource>
    </Discovery>
    <Discovery ID="IsilonSNMP.Discovery.IsilonClustersGroup" Enabled="true" Target="IsilonSNMP.Group.IsilonClusters" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    <Category>Discovery</Category>
    <DiscoveryTypes>
    <DiscoveryRelationship TypeID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters" />
    </DiscoveryTypes>
    <DataSource ID="GP1" TypeID="SC!Microsoft.SystemCenter.GroupPopulator">
    <RuleId>$MPElement$</RuleId>
    <GroupInstanceId>$MPElement[Name="IsilonSNMP.Group.IsilonClusters"]$</GroupInstanceId>
    <MembershipRules>
    <MembershipRule>
    <MonitoringClass>$MPElement[Name="IsilonSNMP.Class.IsilonCluster"]$</MonitoringClass>
    <RelationshipClass>$MPElement[Name="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters"]$</RelationshipClass>
    <Expression>
    <RegExExpression>
    <ValueExpression>
    <Property>$MPElement[Name="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</Property>
    </ValueExpression>
    <Operator>ContainsSubstring</Operator>
    <Pattern>.</Pattern>
    </RegExExpression>
    </Expression>
    </MembershipRule>
    </MembershipRules>
    </DataSource>
    </Discovery>
    <Discovery ID="IsilonSNMP.Discovery.PhysicalDisk" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    <Category>Discovery</Category>
    <DiscoveryTypes>
    <DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" />
    <DiscoveryRelationship TypeID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" />
    </DiscoveryTypes>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverPhysicalDisk">
    <IPAddress>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    <CommStr>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommStr>
    <Interval>7800</Interval>
    <ConfiguredNodes>$Target/Host/Property[Type="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</ConfiguredNodes>
    <BayIndex>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/BayIndex$</BayIndex>
    <NodeCommStr>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/NodeCommStr$</NodeCommStr>
    </DataSource>
    </Discovery>
    <Discovery ID="IsilonSNMP.Discovery.PhysicalFan" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ConfirmDelivery="true" Remotable="true" Priority="Normal">
    <Category>Discovery</Category>
    <DiscoveryTypes>
    <DiscoveryClass TypeID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" />
    <DiscoveryRelationship TypeID="IsilonSNMP.Relationship.NodesHostsPhysicalFan" />
    </DiscoveryTypes>
    <DataSource ID="DS1" TypeID="IsilonSNMP.DataSource.DiscoverPhysicalFan">
    <IPAddress>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    <CommStr>$Target/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</CommStr>
    <Interval>8000</Interval>
    <ConfiguredNodes>$Target/Host/Property[Type="IsilonSNMP.Class.IsilonCluster"]/ConfiguredNodes$</ConfiguredNodes>
    <FanNumber>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</FanNumber>
    <NodeCommStr>$MPElement[Name="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
    <FanSpeedHighCritical>14500</FanSpeedHighCritical>
    <FanSpeedLowWarn>3400</FanSpeedLowWarn>
    <FanSpeedLowCritical>3000</FanSpeedLowCritical>
    </DataSource>
    </Discovery>
    </Discoveries>
    <Monitors>
    <UnitMonitor ID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" Accessibility="Public" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="Snmp!System.SnmpTrapProvider.2SingleEvent2StateMonitorType" ConfirmDelivery="false">
    <Category>Custom</Category>
    <AlertSettings AlertMessage="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID">
    <AlertOnState>Warning</AlertOnState>
    <AutoResolve>true</AutoResolve>
    <AlertPriority>Normal</AlertPriority>
    <AlertSeverity>MatchMonitorHealth</AlertSeverity>
    </AlertSettings>
    <OperationalStates>
    <OperationalState ID="UIGeneratedOpStateId843498792d7d4fbf80d83f3939255dd9" MonitorTypeStateID="SecondEventRaised" HealthState="Success" />
    <OperationalState ID="UIGeneratedOpStateId9fd776cd21a747c5994738e863b31fb9" MonitorTypeStateID="FirstEventRaised" HealthState="Warning" />
    </OperationalStates>
    <Configuration>
    <FirstIP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</FirstIP>
    <FirstCommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</FirstCommunityString>
    <FirstAllTraps>false</FirstAllTraps>
    <FirstVersion>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Version$</FirstVersion>
    <FirstOIDProps>
    <OIDProp>.1.3.6.1.4.1.12124.1.1.2.0</OIDProp>
    </FirstOIDProps>
    <FirstExpression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>Equal</Operator>
    <ValueExpression>
    <Value Type="String">1</Value>
    </ValueExpression>
    </SimpleExpression>
    </FirstExpression>
    <SecondIP>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</SecondIP>
    <SecondCommunityString>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/CommunityString$</SecondCommunityString>
    <SecondAllTraps>false</SecondAllTraps>
    <SecondVersion>$Target/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/Version$</SecondVersion>
    <SecondOIDProps>
    <OIDProp>.1.3.6.1.4.1.12124.1.1.2.0</OIDProp>
    </SecondOIDProps>
    <SecondExpression>
    <SimpleExpression>
    <ValueExpression>
    <XPathQuery Type="String">/DataItem/SnmpVarBinds/SnmpVarBind[1]/Value</XPathQuery>
    </ValueExpression>
    <Operator>NotEqual</Operator>
    <ValueExpression>
    <Value Type="String">1</Value>
    </ValueExpression>
    </SimpleExpression>
    </SecondExpression>
    </Configuration>
    </UnitMonitor>
    <UnitMonitor ID="IsilonSNMP.Monitor.PhysicalDiskStatus" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="IsilonSNMP.MonitorType.PhysicalDiskStatus" ConfirmDelivery="true">
    <Category>AvailabilityHealth</Category>
    <AlertSettings AlertMessage="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID">
    <AlertOnState>Warning</AlertOnState>
    <AutoResolve>true</AutoResolve>
    <AlertPriority>Normal</AlertPriority>
    <AlertSeverity>MatchMonitorHealth</AlertSeverity>
    <AlertParameters>
    <AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
    <AlertParameter2>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter2>
    </AlertParameters>
    </AlertSettings>
    <OperationalStates>
    <OperationalState ID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskOK" MonitorTypeStateID="PhysicalDiskOK" HealthState="Success" />
    <OperationalState ID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskNotOK" MonitorTypeStateID="PhysicalDiskNotOK" HealthState="Warning" />
    </OperationalStates>
    <Configuration>
    <Interval>120</Interval>
    <IPAddress>$Target/Host/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    <OID>.1.3.6.1.4.1.12124.2.52.1.5.$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/BayIndex$</OID>
    <NodeCommStr>$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalDisk"]/NodeCommStr$</NodeCommStr>
    </Configuration>
    </UnitMonitor>
    <UnitMonitor ID="IsilonSNMP.Monitor.PhysicalFanStatus" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.PhysicalFan" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" TypeID="IsilonSNMP.MonitorType.PhysicalFanStatus" ConfirmDelivery="true">
    <Category>AvailabilityHealth</Category>
    <AlertSettings AlertMessage="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID">
    <AlertOnState>Warning</AlertOnState>
    <AutoResolve>true</AutoResolve>
    <AlertPriority>Normal</AlertPriority>
    <AlertSeverity>MatchMonitorHealth</AlertSeverity>
    <AlertParameters>
    <AlertParameter1>$Target/Property[Type="System!System.Entity"]/DisplayName$</AlertParameter1>
    <AlertParameter2>$Data/Context/SnmpVarBinds/SnmpVarBind[1]/Value$</AlertParameter2>
    </AlertParameters>
    </AlertSettings>
    <OperationalStates>
    <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanOK" MonitorTypeStateID="PhysicalFanOK" HealthState="Success" />
    <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanWarn" MonitorTypeStateID="PhysicalFanWarn" HealthState="Warning" />
    <OperationalState ID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanCritical" MonitorTypeStateID="PhysicalFanCritical" HealthState="Error" />
    </OperationalStates>
    <Configuration>
    <Interval>120</Interval>
    <IPAddress>$Target/Host/Host/Property[Type="MicrosoftSystemCenterNetworkDeviceLibrary!Microsoft.SystemCenter.NetworkDevice"]/IPAddress$</IPAddress>
    <OID>.1.3.6.1.4.1.12124.2.53.1.4.$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/FanNumber$</OID>
    <NodeCommStr>$Target/Property[Type="IsilonSNMP.Class.IsilonCluster.PhysicalFan"]/NodeCommStr$</NodeCommStr>
    <FanSpeedHighCritical>14500</FanSpeedHighCritical>
    <FanSpeedLowWarn>3400</FanSpeedLowWarn>
    <FanSpeedLowCritical>3000</FanSpeedLowCritical>
    </Configuration>
    </UnitMonitor>
    <DependencyMonitor ID="IsilonSNMP.Monitor.ClusterPhysicalDiskAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.NodesHostsPhysicalDisk" MemberMonitor="IsilonSNMP.Monitor.PhysicalDiskStatus">
    <Category>AvailabilityHealth</Category>
    <Algorithm>WorstOf</Algorithm>
    <MemberUnAvailable>Error</MemberUnAvailable>
    </DependencyMonitor>
    <DependencyMonitor ID="IsilonSNMP.Monitor.ClusterPhysicalFanAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster.Nodes" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.NodesHostsPhysicalFan" MemberMonitor="IsilonSNMP.Monitor.PhysicalFanStatus">
    <Category>AvailabilityHealth</Category>
    <Algorithm>WorstOf</Algorithm>
    <MemberUnAvailable>Error</MemberUnAvailable>
    </DependencyMonitor>
    <DependencyMonitor ID="IsilonSNMP.Monitor.ClusterClusterAvailabilityDependency" Accessibility="Internal" Enabled="true" Target="IsilonSNMP.Class.IsilonCluster" ParentMonitorID="Health!System.Health.AvailabilityState" Remotable="true" Priority="Normal" RelationshipType="IsilonSNMP.Relationship.ClusterHostsNodes" MemberMonitor="Health!System.Health.AvailabilityState">
    <Category>AvailabilityHealth</Category>
    <Algorithm>WorstOf</Algorithm>
    <MemberUnAvailable>Error</MemberUnAvailable>
    </DependencyMonitor>
    </Monitors>
    </Monitoring>
    <Presentation>
    <StringResources>
    <StringResource ID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID" />
    <StringResource ID="AlertMessageIDb1a3848769824949889fcc4c159cf462" />
    <StringResource ID="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID" />
    <StringResource ID="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID" />
    </StringResources>
    </Presentation>
    <LanguagePacks>
    <LanguagePack ID="ENU" IsDefault="true">
    <DisplayStrings>
    <DisplayString ElementID="IsilonSNMP">
    <Name>Isilon SNMP MP</Name>
    <Description>Management pack to discover a Isilon cluster running OneFS 5.5</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster">
    <Name>Isilon Cluster</Name>
    <Description>Isilon SNMP Device</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster" SubElementID="Hostname">
    <Name>Hostname</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster" SubElementID="ConfiguredNodes">
    <Name>ConfiguredNodes</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.Nodes" SubElementID="Name">
    <Name>Name</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.Nodes">
    <Name>Isilon Cluster Hosts Nodes</Name>
    <Description>Containment class for the Isilon cluster with components such as hard disks, fans, power supplies, etc.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Relationship.ClusterHostsNodes">
    <Name>Isilon Cluster Hosts Nodes</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Discovery.IsilonCluster">
    <Name>Discover Isilon Cluster</Name>
    <Description>Discovery of the Isilon Cluster using OID strings from RFC1213.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.DataSource.BasicSNMPProbe">
    <Name>Isilon Basic Probe Data Source</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.DataSource.DiscoverCluster">
    <Name>Discover Isilon Cluster</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Relationship.IsilonClustersGroupContainsIsilonClusters">
    <Name>Isilon Devices Group Contains Isilon Cluster</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Discovery.Cluster">
    <Name>Discover Isilon Cluster Containment Class</Name>
    <Description>Discovers the Cluster containment class, which hosts managed objects such as fans</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Discovery.IsilonClustersGroup">
    <Name>Isilon Deivce Group Populator</Name>
    </DisplayString>
    <DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70">
    <Name>PlaceHolder</Name>
    <Description>Place Holder to detect isilon cluster</Description>
    </DisplayString>
    <DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" SubElementID="UIGeneratedOpStateId843498792d7d4fbf80d83f3939255dd9">
    <Name>Second Event Raised</Name>
    </DisplayString>
    <DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70" SubElementID="UIGeneratedOpStateId9fd776cd21a747c5994738e863b31fb9">
    <Name>First Event Raised</Name>
    </DisplayString>
    <DisplayString ElementID="UIGeneratedMonitore2c4dd195da8497bb99c9711e4134d70_AlertMessageResourceID">
    <Name>PlaceHolder</Name>
    <Description>placeholder alert to detect isilon</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus">
    <Name>Isilon PhysicalDisk Status Monitor</Name>
    <Description>Monitor that generates an alert when the PhysicalDisk status is not ok.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus" SubElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskOK">
    <Name>PhysicalDiskOK</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus" SubElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_PhysicalDiskNotOK">
    <Name>PhysicalDiskOK</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalDiskStatus_AlertMessageResourceID">
    <Name>Isilon PhysicalDisk Status</Name>
    <Description>The Disk ({0}) is in a warning or error state. The Disk state is: {1}.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk">
    <Name>Isilon Disk</Name>
    <Description>Disk</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalDisk" SubElementID="Index">
    <Name>Index</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Relationship.NodesHostsPhysicalDisk">
    <Name>Isilon Cluster Hosts PhysicalDisk</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Discovery.PhysicalDisk">
    <Name>Discover Isilon Cluster Physical Disks</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.DataSource.DiscoverPhysicalDisk">
    <Name>Discover Isilon Cluster PhysicalDisk</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.ClusterPhysicalDiskAvailabilityDependency">
    <Name>Isilon Disk</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus">
    <Name>Isilon PhysicalFan Status Monitor</Name>
    <Description>Monitor that generates an alert when the PhysicalFan speed is not within a premited range.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanOK">
    <Name>PhysicalFanOK</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanWarn">
    <Name>PhysicalFanWarn</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus" SubElementID="IsilonSNMP.Monitor.PhysicalFanStatus_PhysicalFanCritical">
    <Name>PhysicalFanCritical</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.PhysicalFanStatus_AlertMessageResourceID">
    <Name>Isilon PhysicalFan Status</Name>
    <Description>The Fan ({0}) is in a warning or error state. Current Fan speed is: {1}.</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalFan">
    <Name>Isilon Fan</Name>
    <Description>Fan</Description>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Class.IsilonCluster.PhysicalFan" SubElementID="Index">
    <Name>Index</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Relationship.NodesHostsPhysicalFan">
    <Name>Isilon Cluster Hosts PhysicalFan</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Discovery.PhysicalFan">
    <Name>Discover Isilon Cluster Physical Fans</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.DataSource.DiscoverPhysicalFan">
    <Name>Discover Isilon Cluster PhysicalFan</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.ClusterPhysicalFanAvailabilityDependency">
    <Name>Isilon Fan</Name>
    </DisplayString>
    <DisplayString ElementID="IsilonSNMP.Monitor.ClusterClusterAvailabilityDependency">
    <Name>Cluster</Name>
    </DisplayString>
    </DisplayStrings>
    </LanguagePack>
    </LanguagePacks>

  • Patterns library

    Could you recommend me any good online library of design patterns with java examples??
    Type it down! :)
    Thanks.

    http://www.patterndepot.com/put/8/JavaPatterns.htmI don't know if this is a really good resource . I checked up Singleton Implementation and It is completely wrong. The author misunderstood the meaning of "single instance" .
    Here is the code from that site. It throws an Exception if you try to get instance for second time ! (if garbage collection has not taken place). It depends on finalize() to reset "instance_flag"
    so that you can access the spooler again and such code could lead to unpredictable behaviour.
    // Copied from "Design Patterns Java Companion"
    // by James W. Cooper.
    class PrintSpooler
    //this is a prototype for a printer-spooler class
    //such that only one instance can ever exist
      static boolean
      instance_flag=false; //true if 1 instance
      public PrintSpooler() throws SingletonException
       if (instance_flag)
           throw new SingletonException("Only one spooler
                              allowed");//Huh ?????
       else
           instance_flag = true; //set flag for 1 instance
       System.out.println("spooler opened");
    public void finalize(){
       instance_flag = false; //clear if destroyed
    }I would recommend Bruce Eckel's thinking in patterns before moving on to GOF.

Maybe you are looking for