Proteced variable in FORTE 3.0

Hello,
How can I define a protected variable in the frame Variables declaration in forte 3.0. all the variables are private, and I can't change it.
thanks

an easy solution to this problem is to open the file on another text editor such as notpad or write or if linux than emacs or others.
chang it there and than go back to work with forte. same problem with Netbeans

Similar Messages

  • Watching variables in forte

    Hi there,
    I am trying to see the value of variables of a program I wrote without having to step through it manually. I use the forte IDE.
    I just want to have the program run and see a list of all the variables in scope at that moment as I click through my program.
    Is this possible?
    Any help you could give me on this subject would be most appreciated.
    Thanks in advance,
    Nick Fellows
    [email protected]

    Hi,
    I came up with a solution. Its primitive but it works.
    Just create a button and put an action listener on it and a line of code like boolean b = true;. Then stick a breakpoint on it and run the program. whenever you want to see what the variables look like at a given point, push the button and it will populate the debugger window data.
    Hope that helps someone else out there.
    Nick

  • Sorting Nodes in JTree

    Can someone please help me. I got this class (MyTreeNode) from this forum but has problem compiling/using it due to my beginners status in Java. My current program is shown below. My problem is that if I change DefaultMutableTreeNode to MyTreeNode the program won't compile as the constructor for MyTreeNode does not take a parameter. Please show my how I can modify this to make use of the new class. I only want to sort the nodes in alphabetical order. If someone has a better way of doing it, please post it here.
    public void xpy()
    DefaultMutableTreeNode node1 = new DefaultMutableTreeNode(field1);
    DefaultMutableTreeNode node2 = new DefaultMutableTreeNode(field2);
    node1.add(node2);
    class MyTreeNode extends DefaultMutableTreeNode
    private static Comparator nodeComparator = new Comparator ()
    public int compare(Object o1, Object o2)
    return o1.toString().compareTo(o2.toString());
    public boolean equals(Object obj)
    return false; //static class -- 1 instance only
    public void add(MutableTreeNode node)
    super.add(node);
    Collections.sort(this.children, nodeComparator); //this.children is a proteced variable reference to the node's vector of children.
    Thanks
    pslloo

    Just add a constructor to your subclass:
    class MyTreeNode extends DefaultMutableTreeNode {
      public MyTreeNode(Object obj) {
        super(obj);
    ...Regards

  • RE :Wrappering a DLL

    Hi There,
    Couple of things worth mentioning here.
    1. Let your DLL do its own memory management. Avoid
    allocating memory in DLL and freeing it up(!!!) in
    your
    Forte client, and vice-versa.
    2. Handle all your DLL exceptions within the DLL and
    let it not get passed to the Forte client.
    3. Have the DLL expose fewer (top level ) functions
    to the outer world and do all of its pyrotechnics
    internally. Keep the parameter passing machanism to
    these functions as simple as possible.
    Hope this helps!
    Ajith Kallambella M.
    Forté Systems Engineer,
    International Business Corporation.
    Hello,
    I am currently in the process of wrappering a DLL inForte. I was wondering
    if there are any pitfalls or hazards that I should beaware of?
    Also, to wrapper a DLL do I need to create a Cfunction that calls the DLL
    and then wrapper the C function or can I just wrapperthe DLL. I am a
    little flaky on how it is done, and the documentationis a little unclear.
    Any help would be appreciated,
    John Twomey - CSC-
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    Hello John,
    there are several things to look for
    1. u can just wrapper the DLL and call it directly from FORTE.
    2. Make sure that if u are creating a dynamic DLL to include the path
    of the .obj file generated by the C/C++ compiler of the library u are
    wrappering in the externalobject files section of the .pex file
    3. Make sure that if u are creating a static DLL to include the path of
    the .lib file generated by the C/C++ compiler of the library u are
    wrappering in the staticlibs section of the .pex file
    4. whether u use #2 or #3, it will be the .obj or the .lib file
    generated by the C/C++ compiler that goes in the
    forte/userapp/<path set in the .pex file> subdirectory, so when u run
    fcompile it will create the FORTE DLL correctly.
    5. if u run fcompile from the DOS box, run vcvars32.bat first to set up
    the environment variables otherwise FORTE won't recognize the path to ur
    compiler/linker (assuming u are using VC++ compiler)
    6. make sure that path of all other libraries/dlls u are linking to is
    also set in u environment variables when u do the fcompile.
    7. don't forget to configure the library and make a distribution
    8. when u create the DLL, make sure that any other libraries/dlls it
    calls are visible in the path of the environment of the machine u are
    running otherwise u'll get errors saying it can't find the FORTE .dll
    file even though it is clearly there.
    9. if u are using C++ code, then don't forget to include the functions
    u are exporting between (extern "C") brackets
    Hope this helps, if u need anything else, please let me know.
    Issa.
    Get Your Private, Free Email at http://www.hotmail.com
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

  • New to Java:   Help Needed

    Hi,
    I am writing a utility to monitor all the objects created by my application. I want to be able to get not only values of class variables(for which the reflection package seems pretty useful), but also instance variables.
    For example.
    public class myClass {
    //Constructor
    public myClass(int i) {
    // another class instantiates this one
    myClass mc = new myClass(10);
    myClass mc1 = new myClass(20);
    I need to keep track of the the handles mc and mc1 and the
    other initializations they do based on the value passed at runtime.
    Is there a way to to this. Or even better, is there someplace in Java which stores all the objects instantiated and their handles?
    Any suggestions would be greatly appreciated.
    Thnx
    cvsan

    How do I access private and proteced variables. By default only the public variables are accessible via the reflect class as in the example below.
    Class c = rc.getClass();
    String s = c.getName();
    System.out.println(s);
    try { abcField = c.getField("abc");
    where abc is a public instance variable. If abc is a private instance variable, the above example fails.
    Is there any way to override the data hiding feature of Java?
    Thanks
    cvsan

  • RE: (forte-users) FORTE_ROOT environment variable

    Simply :
    myVar : string = ${forte_root};
    It works in the current partition, if you want to know about variables
    in another partition or
    another machine, you'll have to use the
    task.part.operatingsystem.GetEnv() syntax.
    Patrice BOURDON
    Alliance Sante France
    ZIAP Chtx-Deols - BP 30
    Place Marcel Dassault
    31630 DEOLS
    FRANCE
    e-mail: mailto:[email protected]
    web : http://www.alliance-sante.fr

    Dear Jane,
    In order to see the new value of the environment variable you have to
    reboot your forte, or it is also possible to write a simple forte program
    which sets the environment variable (SetEnv), in this case you can change the
    value without rebooting.
    Best Regards,
    Tamas Deak
    Jane Patterson wrote:
    Dear Forte Users,
    I am using a Windows 95 machine running Forte 30G2 and I am trying to get
    the value of FORTE_ROOT within a method so I can create the full path and
    name for the applications helpfile. I have tried many, many ways to get
    the value out of this environment variable, but with no joy!
    All ideas or samples will be welcome.
    Thanks,
    Jane Patterson
    Jane Patterson
    Analyst/Programmer, Administrative Technology Services
    P.O. Box 56, University of Otago
    Dunedin, New Zealand
    Business Phone: +64 (0)3 479 8286
    Business Fax : +64 (0)3 479 5080
    For the archives, go to: http://lists.sageit.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: [email protected]
    Tamas Deak
    Lufthansa Systems Hungary
    (forte developer)
    2-6 Mazsa ter, Budapest, 1107, HUNGARY
    (36-1) 4312 973
    [email protected]
    [email protected][email protected]-

  • Re: (forte-users) Same Environment variables?

    If you will be connecting the environments in the
    future, then you will need to make sure that the
    environment names are unique. Both the Name Server
    Addresses and the Environment Names need to be unique
    in connected environments.
    Mark Musgrove
    Senior Consultant
    Object Technologies, Inc
    (540) 977-3861 (home)
    (540) 977-2794 (fax)
    http://shopping.yahoo.com/

    If you will be connecting the environments in the
    future, then you will need to make sure that the
    environment names are unique. Both the Name Server
    Addresses and the Environment Names need to be unique
    in connected environments.
    Mark Musgrove
    Senior Consultant
    Object Technologies, Inc
    (540) 977-3861 (home)
    (540) 977-2794 (fax)
    http://shopping.yahoo.com/

  • RE: (forte-users) 3J= 3M new to me error

    Hi Thomas,
    Thanks for your email but I think it will be interesting for Brenda not me.
    It is exactly what I have expected from Forte Support: detailed information
    about bugs and workarounds. But what I cannot understand is that #53398 was
    released without any information about possible reasons for this problem or
    suggested workarounds. My first reaction after reading this bugreport was to
    open a new case at CallCenter to get more information about it. Please
    release more information with your bug reports !
    Regards
    Zenon Adamek
    Information Services
    Senior Programmer Analyst
    Tel: 905 712-1084 ext. 3628
    Fax: 905 712-6709
    E-mail: zadamekpurolator.com
    -----Original Message-----
    From: Thomas Degen - Sun Germany Forte Tools - Bonn
    [SMTP:thomas.degensun.com]
    Sent: Wednesday, September 27, 2000 9:49 AM
    To: Adamek, Zenon
    Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
    Subject: RE: (forte-users) 3J=>3M new to me error
    Hi Zenon,
    bug #53398 is not a bug which will likely get fixed, it's an informational
    bugreport.
    You might see an errorstack like Brenda has reported (and described in
    informational
    bugreport #53398) probably when you are doing something illegal that is
    possible
    via Forte Tool but Forte is not trapping it for performance reasons. Hence
    you will see
    the error coming from your illegal operation only at runtime, probably
    only
    while
    running interpreted in the Forte IDE, but in worst case it might be even a
    segmentation
    violation.
    Technotes 12448 'Sudden client partition crashes at runtime' and 11225
    'Don't reparent
    mapped Widgets between UserWindows at runtime' explain this matter . See
    attached.
    But maybe Brenda is much more experiencing a problem as described by Forte
    Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
    control'
    that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
    Good Luck and Best Regards !
    BTW: I've logged bug #53398, so I've felt responsible to explain its real
    background.
    Thomas
    Thomas Degen
    Sun Microsystems - Forte Tools
    Forte CTE & Sustaining Group
    Technical Support Germany
    tel.:+49.228/91499-50
    MailTo:thomas.degensun.com
    Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
    control
    SCENARIO:
    Getting some unusual interpreter errors that result in an error stating
    that
    the workspace has been set to read only. Please see Enclosures for the
    two
    most common error stacks that have been encountered. The abbreviated
    versions of the errors are:
    - Can't read record (record size = -1)
    - Id in index does not match id in record header in data file
    - Recursive deserialization attempted.
    - Unknown Mark type in deserialization
    - Could not read record (64,74615) from repository data file.
    Header
    is corrupt.
    These errors can be happening in either the development environment when
    running from one of the development workshops, or with the deployed
    application.
    The bug outlined in this Technote may be the culprit if the errors above
    are
    seen when running a client on Windows NT or Motif and the user interface
    incorporates ActiveX controls or ListView/TreeView widgets.
    CAUSE:
    Basically what is happening is that in rare circumstances Forte may invoke
    a
    nested copy of the interpreter while the first interpreter has yielded.
    This
    is not a problem in and of itself, but in the case where the original
    interpreter was in the middle of a repository fetch when it yielded, and
    the second interpreter needs to fetch code as well, we will get one of the
    errors listed above, depending on the exact timing. The reason for the
    errors is that the repository code at this level is thread-safe but not
    re-entrant. It is protected by a mutex that is already owned by the
    current task. Which, given the scenario outlined here, where the two
    interpreters are running inside of the same task, results in the nested
    interpreter being allowed to change data out from under the first.
    While for every fetch one or more calls to WindowSystem.Yield will be made
    (this is there to prevent the semblance of system lock-up on Win 3.1,
    where
    Yield is the only way other applications can be allowed to run), there is
    a parameter which controls how often to actually yield, which by default
    is
    set to one out of every 100 calls. This is the reason the problem is
    intermittent--you need a yield to occur during a repository fetch
    which starts another interpreter which also needs to fetch code from
    disk.
    The reason this has only surfaced recently is that the nested interpreter
    scenario can only happen in 2 cases that we know of:
    - ActiveX controls which respond to events/Windows messages
    - Outline fields/ListViews with column(s) mapped to virtual
    attributes
    In all other normal cases, the yield can process the message (typically a
    paint message) without starting another interpreter, so regardless of
    whether
    the first interpreter yielded during a repository operation or not, there
    is
    no conflict.
    SOLUTION:
    The workaround is to prevent yields altogether by setting the
    FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
    environment. This should have no detrimental effects since the yield code
    is in place solely for Windows 3.1x clients.
    ERROR STACK 1
    SYSTEM ERROR: Because of a prior error, your workspace was set to
    read-only to
    prevent the application from attempting to write to the repository. The
    repository and work you have saved to the repository are safe. If your
    workspace
    contains unsaved work, you may use the following procedure to save this
    work.
    First, export the changed components. Then, shut down and restart this
    application and reopen this workspace in read-write mode. Finally, import
    the
    changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 695]
    Detected at: qqrp_Session::GetObjectById
    Last TOOL statement: method EFWindowController.EFEventLoop
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    The remainder of the Error Manager stack is:
    SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
    (fetch
    bitmask is 0x20). Your workspace is now read-only to prevent the
    application
    from attempting to write to the repository. The repository and work you
    have
    saved to the repository are safe. If your workspace contains unsaved work,
    you
    may use the following procedure to save this work. First, export the
    changed
    components. Then, shut down and restart this application and reopen this
    workspace in read-write mode. Finally, import the changed components and
    save
    your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 61]
    Detected at: qqrp_LogicalSession::MaterializeObject
    Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    SYSTEM ERROR: Unknown Mark type in deserialization.
    Class: qqsp_ImplementationException
    Error #: [1101, 34]
    Detected at: qqrp_DeSerializeObject::ProcessHdr
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    ERROR STACK 2
    SYSTEM ERROR: A serious error has occurred in Repository
    (c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
    Notify
    your repository administrator.
    Class: qqsp_ImplementationException
    Error #: [1101, 198]
    Detected at: qqrp_Repository::Fetch
    Last TOOL statement: method
    SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
    Error Time: Wed Dec 03 10:27:22
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
    taskId =
    [769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
    "ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
    SYSTEM ERROR: Could not read record (64,74615) from repository data file.
    Header is corrupt.
    Class: qqsp_ImplementationException
    Error #: [1106, 612]
    Detected at: qqbt_BtreeAccess::FetchDataFileRecord
    Error Time: Wed Dec 03 10:27:22
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
    taskId =
    [769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
    "ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
    Technote 11225 Don't reparent mapped Widgets between UserWindows at
    runtime
    It is sometimes tempting to unparent a widget from one UserWindow and
    reparent
    it into another at runtime. However, this can cause crashes if the widget
    (or
    its decendants) are "mapped" to data. Here's why...
    Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
    (DF1)
    which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
    mapped to
    a scalar Integer. At compile time, every mapped attribute is internally
    assigned
    a "Map ID" (a small integer) which is used to tie the Widget to its
    corresponding attribute. These Map IDs are used by the Widget to look up a
    pointer to their data in a "Map" which is maintained by the UserWindow.
    Each
    UserWindow is assumed be to independent of the others, so there is nothing
    wrong
    with Widgets in different UserWindows being assigned the same Map IDs.
    In
    this
    case, let's assume that DF1 and RL2 both got assigned the same Map ID of
    3. No
    problem so far, since each lives in a separate UserWindow with a separate
    map.
    Now suppose at runtime the application "detaches" or unparents DF1 from
    its
    UserWindow and reparents it somewhere into UW2. When it comes time for DF1
    to
    paint itself the Display System it must ask the Runtime System for the
    value of
    DF1's mapped attribute. To do that it says "give me the value of the
    TextData
    for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
    ID is
    3". When the runtime system goes to do this it expects to find a TextData
    in
    this "slot" of the map, but instead it picks up the integer which is
    mapped to
    RL2. At best this leads to bad data being returned; more likely you get a
    segfault and a crash.
    If DF1 was not a mapped attribute (say, a Rectangle) there would be no
    problem
    because there is no data mapped to a Rectangle. If instead of moving DF1
    you
    created a brand new DataField on the fly there would be no problem,
    because the
    dynamic DataField would not have any Map ID and so couldn't conflict with
    any
    IDs in UW2.
    So how do you solve this problem? This is exactly what Nested Windows are
    all
    about. While you can't move DF1 into the middle of UW2, you can nest
    UW1.
    This
    works because UW1 brings its map with it, and when you access DF1 it knows
    to
    look up its value in UW1's map.
    UserWindows are intended to be the "unit of compilabilty" that can be
    nested
    inside other UserWindows. It is dangerous to "transplant" anything from
    inside
    one UserWindow into another at runtime.
    (Note that you can't avoid this problem by cloning DF1 because the MapID
    gets
    copied along with it, and the clone will fail in the same way.)
    Further details explained in related technote 12448 'Sudden client
    partition
    crashes at runtime.'
    Technote 12448 Sudden client partition crashes at runtime
    Scenario : You have two UserWindows, A and B. When Window A starts up, it
    instantiates an instance of B and reparents some component of B into A's
    window
    hierarchy.
    This is not allowed and almost always leads to an error at best or at
    worse a
    segmentation fault.
    Here's why :
    When you compile a UserWindow in Forte, each "mapped attribute" (whether a
    form
    element or menu element) is assigned an internal ID which represents an
    offset into
    that UserWindow's table of mapped attributes. This offset is only valid
    in the
    context of the UserWindow in which it was compiled. If you detach a
    FieldWidget or
    MenuWidget from one compiled Window ("tmpMenu" for example) and then
    parent
    into another compiled window ("tmpWindow") the internal ID comes with it.
    When Forte tries to make use of that copied widget it uses the ID as an
    offset
    into tmpWindow's table of mapped attributes. But that copied offset is
    meaningless in the context of tmpWindow's table, so you get some kind off
    error.
    In this case it found that the data type of the variable in the slot
    wasn't
    what
    was expected. But you might even index off the end of the table and get a
    segmentation fault.
    There is nothing to prevent you from dynamically creating menu items and
    adding
    them to a window at runtime; that will work fine. Although of course you
    can't
    access them via mapped attributes, since those can only be created at
    compile time.
    But you are not allowed to reparent a widget from one compiled UserWindow
    into
    the hierarchy of another.
    More information may be found in technote 11225 'Don't reparent mapped
    Widgets
    between UserWindows at runtime'.
    Possible errorstacks seen at runtime instead of a complete crash or
    segmentation
    violation while you are illegally reparenting a widget or menuitem between
    windows
    at runtime:
    Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
    SYSTEM ERROR: Bad parameter at location 3 in method
    qqrt_MapClassAccess::ProcessSubjectData.
    Class: qqsp_Exception
    Error #: [1001, 381]
    Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
    Error Time: Wed Aug 09 13:03:57
    Exception occurred (locally) on partition "testproject_CL0_Client",
    (partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
    taskId =
    [D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
    "FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
    At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
    Hi,
    It is the unfixed defect 53398. Please contact Forte support.
    Zenon
    -----Original Message-----
    From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
    Sent: Tuesday, September 26, 2000 1:15 PM
    To: Forte User group
    Subject: (forte-users) 3J=>3M new to me error
    Hi,
    We are in the process of going from 3J1 to 3.0.M.2, and I am getting
    this error that I am unfamiliar with on a GUI that works fine in 3J.
    It
    does not happen all the time, and I have been unable to establish the
    pattern that kicks it off. Has anyone seen this before?
    PS- this error is not occurring in the deployed (non-compiled) app,but
    when I am running locally from my workspace.
    SYSTEM ERROR: Bad parameter at location 6 in method
    qqrt_MapClassAccess::ProcessSubjectData.
    Class: qqsp_Exception
    Error #: [1001, 381]
    Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
    taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Can't find scope 20070 for a class.
    Class: qqsp_Exception
    Error #: [201, 11]
    Detected at: qqlo_ClassTableLoadScope at 1
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Because of a prior error, your workspace was set to
    read-only to prevent the application from attempting to write to the repository.
    The repository and work you have saved to the repository are safe. If
    your
    workspace contains unsaved work, you may use the following procedure
    to save this work. First, export the changed components. Then, shut down and
    restart this application and reopen this workspace in read-write mode.
    Finally, import the changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 695]
    Detected at: qqrp_Session::IsDistributed
    Last TOOL statement: method PPMeasWin.
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Internal Error attempting to deserialize element
    (64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
    prevent
    the application from attempting to write to the repository. The
    repository
    and work you have saved to the repository are safe. If your workspace
    contains unsaved work, you may use the following procedure to savethis
    work.
    First, export the changed components. Then, shut down and restart this
    application and reopen this workspace in read-write mode. Finally, import the
    changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 61]
    Detected at: qqrp_LogicalSession::MaterializeObject
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
    Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
    Error #: [301, 231]
    Detected at: qqsp_DeSerializeDriver::Run at 1
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in anew
    email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

    Hi Thomas,
    Thanks for your email but I think it will be interesting for Brenda not me.
    It is exactly what I have expected from Forte Support: detailed information
    about bugs and workarounds. But what I cannot understand is that #53398 was
    released without any information about possible reasons for this problem or
    suggested workarounds. My first reaction after reading this bugreport was to
    open a new case at CallCenter to get more information about it. Please
    release more information with your bug reports !
    Regards
    Zenon Adamek
    Information Services
    Senior Programmer Analyst
    Tel: 905 712-1084 ext. 3628
    Fax: 905 712-6709
    E-mail: zadamekpurolator.com
    -----Original Message-----
    From: Thomas Degen - Sun Germany Forte Tools - Bonn
    [SMTP:thomas.degensun.com]
    Sent: Wednesday, September 27, 2000 9:49 AM
    To: Adamek, Zenon
    Cc: 'Brenda Cumming'; Forte-userslists.xpedior.com
    Subject: RE: (forte-users) 3J=>3M new to me error
    Hi Zenon,
    bug #53398 is not a bug which will likely get fixed, it's an informational
    bugreport.
    You might see an errorstack like Brenda has reported (and described in
    informational
    bugreport #53398) probably when you are doing something illegal that is
    possible
    via Forte Tool but Forte is not trapping it for performance reasons. Hence
    you will see
    the error coming from your illegal operation only at runtime, probably
    only
    while
    running interpreted in the Forte IDE, but in worst case it might be even a
    segmentation
    violation.
    Technotes 12448 'Sudden client partition crashes at runtime' and 11225
    'Don't reparent
    mapped Widgets between UserWindows at runtime' explain this matter . See
    attached.
    But maybe Brenda is much more experiencing a problem as described by Forte
    Technote 11398 'Read Only Workspace Errors using ListViews or ActiveX
    control'
    that might get easily resolved via setting of FORTE_YIELD_THROTTLE=0.
    Good Luck and Best Regards !
    BTW: I've logged bug #53398, so I've felt responsible to explain its real
    background.
    Thomas
    Thomas Degen
    Sun Microsystems - Forte Tools
    Forte CTE & Sustaining Group
    Technical Support Germany
    tel.:+49.228/91499-50
    MailTo:thomas.degensun.com
    Technote 11398 Read Only Workspace Errors using ListViews or ActiveX
    control
    SCENARIO:
    Getting some unusual interpreter errors that result in an error stating
    that
    the workspace has been set to read only. Please see Enclosures for the
    two
    most common error stacks that have been encountered. The abbreviated
    versions of the errors are:
    - Can't read record (record size = -1)
    - Id in index does not match id in record header in data file
    - Recursive deserialization attempted.
    - Unknown Mark type in deserialization
    - Could not read record (64,74615) from repository data file.
    Header
    is corrupt.
    These errors can be happening in either the development environment when
    running from one of the development workshops, or with the deployed
    application.
    The bug outlined in this Technote may be the culprit if the errors above
    are
    seen when running a client on Windows NT or Motif and the user interface
    incorporates ActiveX controls or ListView/TreeView widgets.
    CAUSE:
    Basically what is happening is that in rare circumstances Forte may invoke
    a
    nested copy of the interpreter while the first interpreter has yielded.
    This
    is not a problem in and of itself, but in the case where the original
    interpreter was in the middle of a repository fetch when it yielded, and
    the second interpreter needs to fetch code as well, we will get one of the
    errors listed above, depending on the exact timing. The reason for the
    errors is that the repository code at this level is thread-safe but not
    re-entrant. It is protected by a mutex that is already owned by the
    current task. Which, given the scenario outlined here, where the two
    interpreters are running inside of the same task, results in the nested
    interpreter being allowed to change data out from under the first.
    While for every fetch one or more calls to WindowSystem.Yield will be made
    (this is there to prevent the semblance of system lock-up on Win 3.1,
    where
    Yield is the only way other applications can be allowed to run), there is
    a parameter which controls how often to actually yield, which by default
    is
    set to one out of every 100 calls. This is the reason the problem is
    intermittent--you need a yield to occur during a repository fetch
    which starts another interpreter which also needs to fetch code from
    disk.
    The reason this has only surfaced recently is that the nested interpreter
    scenario can only happen in 2 cases that we know of:
    - ActiveX controls which respond to events/Windows messages
    - Outline fields/ListViews with column(s) mapped to virtual
    attributes
    In all other normal cases, the yield can process the message (typically a
    paint message) without starting another interpreter, so regardless of
    whether
    the first interpreter yielded during a repository operation or not, there
    is
    no conflict.
    SOLUTION:
    The workaround is to prevent yields altogether by setting the
    FORTE_YIELD_THROTTLE environment variable equal to 0 in the client's
    environment. This should have no detrimental effects since the yield code
    is in place solely for Windows 3.1x clients.
    ERROR STACK 1
    SYSTEM ERROR: Because of a prior error, your workspace was set to
    read-only to
    prevent the application from attempting to write to the repository. The
    repository and work you have saved to the repository are safe. If your
    workspace
    contains unsaved work, you may use the following procedure to save this
    work.
    First, export the changed components. Then, shut down and restart this
    application and reopen this workspace in read-write mode. Finally, import
    the
    changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 695]
    Detected at: qqrp_Session::GetObjectById
    Last TOOL statement: method EFWindowController.EFEventLoop
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    The remainder of the Error Manager stack is:
    SYSTEM ERROR: Internal Error attempting to deserialize element (64,67470)
    (fetch
    bitmask is 0x20). Your workspace is now read-only to prevent the
    application
    from attempting to write to the repository. The repository and work you
    have
    saved to the repository are safe. If your workspace contains unsaved work,
    you
    may use the following procedure to save this work. First, export the
    changed
    components. Then, shut down and restart this application and reopen this
    workspace in read-write mode. Finally, import the changed components and
    save
    your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 61]
    Detected at: qqrp_LogicalSession::MaterializeObject
    Last TOOL statement: method EFTabManagerNew.EFNoteBookHandler
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    SYSTEM ERROR: Unknown Mark type in deserialization.
    Class: qqsp_ImplementationException
    Error #: [1101, 34]
    Detected at: qqrp_DeSerializeObject::ProcessHdr
    Error Time: Tue Nov 18 15:58:47
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1,
    taskId =
    [7EFAE060-4AFA-11D1-A1C1-1FDC8A99AA77:0x446:0x1.23]) in application
    "ConPlus_GUI_cl0", pid 147 on node ISD060 in environment EdgeTest.
    ERROR STACK 2
    SYSTEM ERROR: A serious error has occurred in Repository
    (c:\PROGRA~1\CSSPTEST\conplu0). Corrective action may be necessary.
    Notify
    your repository administrator.
    Class: qqsp_ImplementationException
    Error #: [1101, 198]
    Detected at: qqrp_Repository::Fetch
    Last TOOL statement: method
    SalesDevelopment_NWC.DEVNotifyofTabSetCurrent
    Error Time: Wed Dec 03 10:27:22
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
    taskId =
    [769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
    "ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
    SYSTEM ERROR: Could not read record (64,74615) from repository data file.
    Header is corrupt.
    Class: qqsp_ImplementationException
    Error #: [1106, 612]
    Detected at: qqbt_BtreeAccess::FetchDataFileRecord
    Error Time: Wed Dec 03 10:27:22
    Exception occurred (locally) on partition "ConPlus_GUI_cl0_Client",
    (partitionId = 769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1,
    taskId =
    [769D4310-6B88-11D1-84FD-65BF87C8AA77:0x121:0x1.22]) in application
    "ConPlus_GUI_cl0", pid 172 on node ISD42 in environment Edge.
    Technote 11225 Don't reparent mapped Widgets between UserWindows at
    runtime
    It is sometimes tempting to unparent a widget from one UserWindow and
    reparent
    it into another at runtime. However, this can cause crashes if the widget
    (or
    its decendants) are "mapped" to data. Here's why...
    Suppose you have two UserWindows, UW1 and UW2. UW1 contains a DataField
    (DF1)
    which is mapped to a TextData. UW2 contains a RadioList (RL2) which is
    mapped to
    a scalar Integer. At compile time, every mapped attribute is internally
    assigned
    a "Map ID" (a small integer) which is used to tie the Widget to its
    corresponding attribute. These Map IDs are used by the Widget to look up a
    pointer to their data in a "Map" which is maintained by the UserWindow.
    Each
    UserWindow is assumed be to independent of the others, so there is nothing
    wrong
    with Widgets in different UserWindows being assigned the same Map IDs.
    In
    this
    case, let's assume that DF1 and RL2 both got assigned the same Map ID of
    3. No
    problem so far, since each lives in a separate UserWindow with a separate
    map.
    Now suppose at runtime the application "detaches" or unparents DF1 from
    its
    UserWindow and reparents it somewhere into UW2. When it comes time for DF1
    to
    paint itself the Display System it must ask the Runtime System for the
    value of
    DF1's mapped attribute. To do that it says "give me the value of the
    TextData
    for DF1. You'll find it in the Map for this UserWindow (UW1), and its Map
    ID is
    3". When the runtime system goes to do this it expects to find a TextData
    in
    this "slot" of the map, but instead it picks up the integer which is
    mapped to
    RL2. At best this leads to bad data being returned; more likely you get a
    segfault and a crash.
    If DF1 was not a mapped attribute (say, a Rectangle) there would be no
    problem
    because there is no data mapped to a Rectangle. If instead of moving DF1
    you
    created a brand new DataField on the fly there would be no problem,
    because the
    dynamic DataField would not have any Map ID and so couldn't conflict with
    any
    IDs in UW2.
    So how do you solve this problem? This is exactly what Nested Windows are
    all
    about. While you can't move DF1 into the middle of UW2, you can nest
    UW1.
    This
    works because UW1 brings its map with it, and when you access DF1 it knows
    to
    look up its value in UW1's map.
    UserWindows are intended to be the "unit of compilabilty" that can be
    nested
    inside other UserWindows. It is dangerous to "transplant" anything from
    inside
    one UserWindow into another at runtime.
    (Note that you can't avoid this problem by cloning DF1 because the MapID
    gets
    copied along with it, and the clone will fail in the same way.)
    Further details explained in related technote 12448 'Sudden client
    partition
    crashes at runtime.'
    Technote 12448 Sudden client partition crashes at runtime
    Scenario : You have two UserWindows, A and B. When Window A starts up, it
    instantiates an instance of B and reparents some component of B into A's
    window
    hierarchy.
    This is not allowed and almost always leads to an error at best or at
    worse a
    segmentation fault.
    Here's why :
    When you compile a UserWindow in Forte, each "mapped attribute" (whether a
    form
    element or menu element) is assigned an internal ID which represents an
    offset into
    that UserWindow's table of mapped attributes. This offset is only valid
    in the
    context of the UserWindow in which it was compiled. If you detach a
    FieldWidget or
    MenuWidget from one compiled Window ("tmpMenu" for example) and then
    parent
    into another compiled window ("tmpWindow") the internal ID comes with it.
    When Forte tries to make use of that copied widget it uses the ID as an
    offset
    into tmpWindow's table of mapped attributes. But that copied offset is
    meaningless in the context of tmpWindow's table, so you get some kind off
    error.
    In this case it found that the data type of the variable in the slot
    wasn't
    what
    was expected. But you might even index off the end of the table and get a
    segmentation fault.
    There is nothing to prevent you from dynamically creating menu items and
    adding
    them to a window at runtime; that will work fine. Although of course you
    can't
    access them via mapped attributes, since those can only be created at
    compile time.
    But you are not allowed to reparent a widget from one compiled UserWindow
    into
    the hierarchy of another.
    More information may be found in technote 11225 'Don't reparent mapped
    Widgets
    between UserWindows at runtime'.
    Possible errorstacks seen at runtime instead of a complete crash or
    segmentation
    violation while you are illegally reparenting a widget or menuitem between
    windows
    at runtime:
    Map::SetSubjectData: Invalid conversion from map type 0 to subject type 22
    SYSTEM ERROR: Bad parameter at location 3 in method
    qqrt_MapClassAccess::ProcessSubjectData.
    Class: qqsp_Exception
    Error #: [1001, 381]
    Detected at: qqrt_MapClassAccess::ProcessSubjectData at 3
    Error Time: Wed Aug 09 13:03:57
    Exception occurred (locally) on partition "testproject_CL0_Client",
    (partitionId = D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd,
    taskId =
    [D4914A10-36C1-11D4-91B3-419AA33BAA77:0x208:0xd.68]) in application
    "FTLaunch_cl0", pid 672 on node ONEWAY in environment Audi3M2Env.
    At 13:14 26.09.00 -0400, Adamek, Zenon wrote:
    Hi,
    It is the unfixed defect 53398. Please contact Forte support.
    Zenon
    -----Original Message-----
    From: Brenda Cumming [SMTP:brenda_cummingtranscanada.com]
    Sent: Tuesday, September 26, 2000 1:15 PM
    To: Forte User group
    Subject: (forte-users) 3J=>3M new to me error
    Hi,
    We are in the process of going from 3J1 to 3.0.M.2, and I am getting
    this error that I am unfamiliar with on a GUI that works fine in 3J.
    It
    does not happen all the time, and I have been unable to establish the
    pattern that kicks it off. Has anyone seen this before?
    PS- this error is not occurring in the deployed (non-compiled) app,but
    when I am running locally from my workspace.
    SYSTEM ERROR: Bad parameter at location 6 in method
    qqrt_MapClassAccess::ProcessSubjectData.
    Class: qqsp_Exception
    Error #: [1001, 381]
    Detected at: qqrt_MapClassAccess::ProcessSubjectData at 6
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2,
    taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Can't find scope 20070 for a class.
    Class: qqsp_Exception
    Error #: [201, 11]
    Detected at: qqlo_ClassTableLoadScope at 1
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Because of a prior error, your workspace was set to
    read-only to prevent the application from attempting to write to the repository.
    The repository and work you have saved to the repository are safe. If
    your
    workspace contains unsaved work, you may use the following procedure
    to save this work. First, export the changed components. Then, shut down and
    restart this application and reopen this workspace in read-write mode.
    Finally, import the changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 695]
    Detected at: qqrp_Session::IsDistributed
    Last TOOL statement: method PPMeasWin.
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Internal Error attempting to deserialize element
    (64,120684) (fetch bitmask is 0x20). Your workspace is now read-onlyto
    prevent
    the application from attempting to write to the repository. The
    repository
    and work you have saved to the repository are safe. If your workspace
    contains unsaved work, you may use the following procedure to savethis
    work.
    First, export the changed components. Then, shut down and restart this
    application and reopen this workspace in read-write mode. Finally, import the
    changed components and save your workspace.
    Class: qqrp_RepResourceException
    Error #: [1101, 61]
    Detected at: qqrp_LogicalSession::MaterializeObject
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition
    "ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    SYSTEM ERROR: Recursive Deserialization attempted, Internal Error!
    Class: qqsp_UsageException with ReasonCode: SP_ER_INVALIDSTATE
    Error #: [301, 231]
    Detected at: qqsp_DeSerializeDriver::Run at 1
    Error Time: Wed Sep 20 14:32:54
    Exception occurred (locally) on partition"ABSDevtStartUp_CL0_Client",
    (partitionId = 36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2, taskId =
    [36172000-5DA8-11D4-B1F0-14015EDAAA77:0x2da:0x2.25]) in
    application
    "Forte_cl0", pid 93 on node T5621 in environment AbisDMEnv.
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in anew
    email the word: 'Unsubscribe' to:forte-users-requestlists.xpedior.com
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • Creating Forte FieldWidgets Dynamically at Runtime

    Hi Everyone,
    Could someone please help me with the following problem I have when
    creating Forte fieldwidgets dynamically at run-time. I am using Forte
    ver. 3.0.G.2.
    (-1-) I have a window class with an empty gridfield, <grfMain>, inside a
    viewport. The idea is to populate the gridfield with DataField
    fieldwidgets dynamically at runtime. Depending on some input criteria,
    sometimes some of the DataFields need to map to IntegerNullables, some
    to DoubleNullables and some to DateTimeNullables. (Please note that I
    cannot use the Forte window workshop to create these fieldwidgets,
    because different types of fieldwidgets will be needed at different
    times, in different numbers, at run-time. ) Here is a sample of how I am
    currently trying to achieve this:
    dfDate : DataField = new;
    dfDate.MaskType = MK_Template;
    dfDate.DateTemplate = new( value='dd/mm/yyyy' );
    dfDate.Row = 1;
    dfDate.Column = 2;
    dfDate.Parent = <grfMain>;
    dfInt : DataField = new;
    dfInt.MaskType = MK_INTEGER;
    dfInt.Row = 2;
    dfInt.Column = 2;
    dfInt.Parent = <grfMain>;
    dfReal : DataField = new;
    dfReal.MaskType = MK_FLOAT;
    dfReal.Row = 3;
    dfReal.Column = 2;
    dfReal.Parent = <grfMain>;
    The code above is called after the window has been opened with the
    Open() statement.
    Looking at the code above, one obvious omission is that the "Mapped
    Type" of the Datafields are not set up. In the Forte window workshop, an
    interface is provided to set up the "Mapped Type" of the Datafield
    widgets, but I'm not sure how to do that dynamically, and that is
    basically my biggest problem here.
    (-2-) If I now run the window class, the Datafield widgets get created,
    and they all have the correct input maks, but no validation gets done
    when one tabs away from the field. For example, Datafields with
    MaskType=MK_INTEGER will gladly accept '--1--0++7', while Datafields
    created in the window workshop (mapping to IntegerNullables) will do a
    validation, and not allow one to tab out of the field before the extra
    minus and plus signs are not removed.
    I have the same problem with the Datafields which have
    MaskType=MK_Template and DateTemplate='dd/mm/yyyy'. For the date, one
    can enter something like '2*\**\****', and leave the field, while the
    same type of datafield created in the window workshop (mapped to a
    DateTimeNullable), will not allow you to leave the field before a valid
    date has not been entered. To summarise, the input masks of my
    dynamically created Datafields work fine, but no validation gets done
    when the field looses the focus.
    (-3-) As a test, I used the Forte debugger ("view"-"local variables") to
    look at the differences between Datafields created dynamically, and
    those created in the Forte window workshop. One very obvious difference
    was that Datafield attribute "MapTypeName" was filled in for the window
    workshop Datafields, but not for my dynamically created Datafields. The
    problem is that Forte does not allow me to set this attribute
    dynamically in my code. How else can I setup the Mapped Type
    dynamically?
    (-4-) In order to have a consistent look-and-feel throughout our Forte
    project, we are making use of Domain classes for DATE and DECIMAL data
    entry fields. My questions are:
    (4.1) How must I go about creating Datafields dynamically that make use
    of these Domain classes?
    (4.2) Is it also a matter of setting up the "MapTypeName" attribute,
    which I cannot seem to do?
    (4.3) Is the mapping done differently for Domain classes?
    (-5-) Another interesting thing to note for Datafields created in the
    Forte Window Workshop, is that if the mapped type is IntegerNullable
    with Input Mask = Integer, or DoubleNullable with Input Mask = Float,
    then the Object that the Datafield widget maps to, must first be
    instantiated before the Loose-Focus validations will start to work. For
    example, if a Datafield widget called "dfTestInt" was created in the
    Forte window workshop, which maps to an IntegerNullable, and Input Mask
    = Integer, then the following line is needed before the window is
    displayed: dfTestInt = new;
    Without this line, one can enter something like '2---3+++7', and leave
    the field.
    This is not true for Datafields where the mapped type is
    DateTimeNullable with say Input Mask Template='dd\mm\yyyy'. In this case
    validations are done even thought the object being mapped to, has not
    been instantiated yet. In other words you will never be able to enter
    '2*/**/****', and leave the field for datafield created in the window
    workshop. Maybe in this case the validation is being done by the
    template itself?
    Thanks in advance
    Riaan
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    what I mean is rendering JSF components on the fly, becuase some time you don't know things at design time. Lets say I am designing a page in creator that shows the total number of dependants that belongs to a primary inusrance member in text boxes. Of course we don't know in advance how many dependants we have for a specific member unless we go to databse and fetch all the data at runtime. Desiging some thing dynamic like that is very easy in CGI or ASP/JSP but JSF model seems very static due to it's design time feature.
    So is it possible with JSF or not?

  • Re: (forte-users) Forte on Solarix box problem

    Hi All,
    Thank you very much, for all the help you
    people extended towards this problem.Its solved, the
    problem was i had 2 users, and i started from one user
    Nodemanager ( which does not have oracle home path
    set) and from the other user id, i started the
    launcher, ( which have oracle home set), so the
    application, was running locally, but when i
    distributed the application, it was not finding oracle
    home variable from the other user, from which node
    manager was started. So that was the problem. I found
    this specifically after setting FORTE_STACK_SIZE,
    variable(as suggested by Thomas), it was throwing
    error saying that, tns name is not resolved,( kudos to
    Thomas :) ).
    Once again thank you all.
    Babu
    --- Thomas Degen - Sun Germany Forte Tools - Bonn
    <thomas.degensun.com> wrote:
    >
    Hi Babu,
    ok, maybe we need to go now a bit more in some
    details of
    your Forte nodemanager environment on the Sparc
    Solaris box.
    Q1: Which operating system release ? Solaris
    2.51,2.6,7 or 8 ?
    Q2: Which Forte Release are you running on all nodes
    Q3: Where's the Forte environment manager located ?
    Q4: Which Oracle RDBMS release have you installed on
    the Sun ?
    Q5: Which Oracle client release have you probably
    installed
    on your PC which is running NT4 I guess ?
    (These questions are just the generic Tech Support
    approach
    to get an idea about your environment).
    Q6: You mentioned in your very first message that
    during
    Forte installation on the Sun, you've left the
    path to
    Oracle empty....it is mandatory for the Forte
    nodemanager
    on any box/operating system to find in its
    environment
    the relevant third party environmental
    informations...
    For Oracle the Forte nodemanager on Sun
    requires a
    valid setting for ORACLE_HOME !
    Could you send me the complete environment for
    the user
    who is starting the Forte nodemanager on your
    Sun ?
    Q7: This is more a necessary suggestion than a
    question
    but is and when yes, how have you setted
    FORTE_STACK_SIZE
    on the Sun ?
    If it's not there or only set as
    FORTE_STACK_SIZE=42000,
    then add or reconfigure FORTE_STACK_SIZE to
    100000 in the
    nodemanager's environment and re-boot the
    nodemanager!
    Q8: Once more a recommendation than question but can
    you
    just try to access your Oracle DB instance with
    the Forte
    sample program DynamicSQL ? You will find this
    in
    the $FORTE_ROOT/install/examples/database
    directory
    and it will require the Utility plan that you
    may import
    from $FORTE_ROOT/install/examples/frame .
    Try to access your Oracle instance from local
    directly
    out of your workspace and later on full
    distributed
    via an own Forte server partition from the
    Partition
    Workshop. Send to me all errors thrown during
    these
    procedures on the client and within the remote
    server
    partition logfile on the Sun.
    BTW: When you can access the Oracle RDBMS running in
    the
    Forte IDE locally, this is an indicator to me that
    you have
    setted up the Oracle client on your PC and have
    configured
    Oracle locally correctly (tnsnames.ora) to connect
    to your
    remote Oracle instance...hence when test running
    locally, Forte
    will use this locally configured Oracle SQL*Net V2
    client
    to connect to your remote Oracle RDBMS instance.
    That's one
    shortcut making it possible for you as the Forte
    developer
    to debug DB access within the Forte IDE...when
    running completly
    distributed debugging of remote partitions is not
    possible.
    Hope this helps ! Best Regards from Germany !
    Thomas
    Thomas Degen
    Sun Microsystems - Forte Tools
    Forte CTE & Sustaining Group
    Technical Support Germany
    tel.:+49.228/91499-50
    MailTo:thomas.degensun.com
    At 10:55 09.09.00 -0700, you wrote:
    HI Mark,
    I have setup all the resources properly.Even
    given new names, and tried again, no use so far.
    Thanks,
    Babu
    --- Mark Musgrove <musgrovemarkyahoo.com> wrote:
    The message "Loading partition
    DatabaseTestSolaris_cl0_Part2 built on
    <unknown>."
    is
    bizarre.
    It sounds like the partition workshop is notassigning
    the partition containing the DBSession to thecorrect
    server node. Normally you would see "built on<node name>."
    Have you setup the supported resource managerson
    the solaris node? If not, then forte will notassign the
    DBSession to the correct node. You mustdesignate in
    the environment that the server node supportsall of
    the required resources (Oracle, ODBC, etc).
    Mark Musgrove
    Senior Consultant
    Object Technologies, Inc
    (540) 977-3861 (home)
    (540) 977-2794 (fax)
    http://mail.yahoo.com/

    Hi All,
    Thank you very much, for all the help you
    people extended towards this problem.Its solved, the
    problem was i had 2 users, and i started from one user
    Nodemanager ( which does not have oracle home path
    set) and from the other user id, i started the
    launcher, ( which have oracle home set), so the
    application, was running locally, but when i
    distributed the application, it was not finding oracle
    home variable from the other user, from which node
    manager was started. So that was the problem. I found
    this specifically after setting FORTE_STACK_SIZE,
    variable(as suggested by Thomas), it was throwing
    error saying that, tns name is not resolved,( kudos to
    Thomas :) ).
    Once again thank you all.
    Babu
    --- Thomas Degen - Sun Germany Forte Tools - Bonn
    <thomas.degensun.com> wrote:
    >
    Hi Babu,
    ok, maybe we need to go now a bit more in some
    details of
    your Forte nodemanager environment on the Sparc
    Solaris box.
    Q1: Which operating system release ? Solaris
    2.51,2.6,7 or 8 ?
    Q2: Which Forte Release are you running on all nodes
    Q3: Where's the Forte environment manager located ?
    Q4: Which Oracle RDBMS release have you installed on
    the Sun ?
    Q5: Which Oracle client release have you probably
    installed
    on your PC which is running NT4 I guess ?
    (These questions are just the generic Tech Support
    approach
    to get an idea about your environment).
    Q6: You mentioned in your very first message that
    during
    Forte installation on the Sun, you've left the
    path to
    Oracle empty....it is mandatory for the Forte
    nodemanager
    on any box/operating system to find in its
    environment
    the relevant third party environmental
    informations...
    For Oracle the Forte nodemanager on Sun
    requires a
    valid setting for ORACLE_HOME !
    Could you send me the complete environment for
    the user
    who is starting the Forte nodemanager on your
    Sun ?
    Q7: This is more a necessary suggestion than a
    question
    but is and when yes, how have you setted
    FORTE_STACK_SIZE
    on the Sun ?
    If it's not there or only set as
    FORTE_STACK_SIZE=42000,
    then add or reconfigure FORTE_STACK_SIZE to
    100000 in the
    nodemanager's environment and re-boot the
    nodemanager!
    Q8: Once more a recommendation than question but can
    you
    just try to access your Oracle DB instance with
    the Forte
    sample program DynamicSQL ? You will find this
    in
    the $FORTE_ROOT/install/examples/database
    directory
    and it will require the Utility plan that you
    may import
    from $FORTE_ROOT/install/examples/frame .
    Try to access your Oracle instance from local
    directly
    out of your workspace and later on full
    distributed
    via an own Forte server partition from the
    Partition
    Workshop. Send to me all errors thrown during
    these
    procedures on the client and within the remote
    server
    partition logfile on the Sun.
    BTW: When you can access the Oracle RDBMS running in
    the
    Forte IDE locally, this is an indicator to me that
    you have
    setted up the Oracle client on your PC and have
    configured
    Oracle locally correctly (tnsnames.ora) to connect
    to your
    remote Oracle instance...hence when test running
    locally, Forte
    will use this locally configured Oracle SQL*Net V2
    client
    to connect to your remote Oracle RDBMS instance.
    That's one
    shortcut making it possible for you as the Forte
    developer
    to debug DB access within the Forte IDE...when
    running completly
    distributed debugging of remote partitions is not
    possible.
    Hope this helps ! Best Regards from Germany !
    Thomas
    Thomas Degen
    Sun Microsystems - Forte Tools
    Forte CTE & Sustaining Group
    Technical Support Germany
    tel.:+49.228/91499-50
    MailTo:thomas.degensun.com
    At 10:55 09.09.00 -0700, you wrote:
    HI Mark,
    I have setup all the resources properly.Even
    given new names, and tried again, no use so far.
    Thanks,
    Babu
    --- Mark Musgrove <musgrovemarkyahoo.com> wrote:
    The message "Loading partition
    DatabaseTestSolaris_cl0_Part2 built on
    <unknown>."
    is
    bizarre.
    It sounds like the partition workshop is notassigning
    the partition containing the DBSession to thecorrect
    server node. Normally you would see "built on<node name>."
    Have you setup the supported resource managerson
    the solaris node? If not, then forte will notassign the
    DBSession to the correct node. You mustdesignate in
    the environment that the server node supportsall of
    the required resources (Oracle, ODBC, etc).
    Mark Musgrove
    Senior Consultant
    Object Technologies, Inc
    (540) 977-3861 (home)
    (540) 977-2794 (fax)
    http://mail.yahoo.com/

  • Re: (forte-users) Delays in data transfer..server-to-client

    I would try using DOM (distributed object manager) traces. trc:do:20 will
    give you information on each messages sent from and received by the
    partition. Levels are 1, 2, 5, 7, and 8, and trc:do:*:8 is very
    verbose. trc:do:20:1 may tell you what you want to know. trc:do:1:1 will
    give you a basic 1-line-per DOM event trace that may also be all you need.
    Communications manager traces will tell you about network and socket-level
    activity, but not about the sizes of the messages themselves. In addition,
    the operating system makes decisions about physical packet size and
    send/receive timing, so CM activities only generally map to actual network
    activity.
    -tdc
    iPlanet Integration Server Engineering
    At 09:24 AM 5/1/01 -0700, you wrote:
    All,
    We are experiencing delays in object transfer between server and client. The
    delays are longer with large objects (a single object with an array of objects
    that reflect the rows returned in a database) than small (ie: 10 rows vs 400).
    Does anyone have any (actual) experience using the various Forte' flags in
    order
    to show the actual size of the object/packets being passed between the server
    and client?
    We are using input/output between client and server, input on all the SO's
    within a partition. Response on the server side is good, roughly 6 seconds or
    so. The round trip fare however from the time the client makes the SO call to
    the time that it completes is in the 25-30 second range, leaving roughly 20-25
    seconds unaccounted for. I have brought in the network guys who are
    requesting
    the data size and packet information. I did not see what I am looking for
    using
    the trc:cm:*:4 and trc:cm:*:8 flags. I will be trying the trc:cm:*:10
    flag, but
    Forte' indicates that this flag is very verbose, the systems group hates
    it when
    I use up all of THEIR disk space!
    Any ideas would be appreciated as always.

    Jeff,
    If the object you are passing does not require changes made to it in the
    server partition to be returned, pass the object as copy input (pass by
    value not reference). If it is necessary to pass the object as input, try
    to pass only the attributes that are required to the remote partition
    instead of the whole object.
    Input/Output is normaly used with scalar variables. When a scalar is passed
    to a remote partition, if the value is changed in that partition, the value
    is not returned to the calling partition unless Input/Output is used.
    Input/Output should not be used for object type parameters, if you need to
    pass a reference, use Input only. If you can pass by value, use Copy Input.
    You will notice a huge difference in performance changing from Input to Copy
    input when passing large objects.
    Hope this helps,
    Travis Foote
    Fortedeveloper.com Inc.
    ----- Original Message -----
    From: "Jeff Bennett" <[email protected]>
    To: <[email protected]>
    Sent: Tuesday, May 01, 2001 9:24 AM
    Subject: (forte-users) Delays in data transfer.. server-to-client
    >
    All,
    We are experiencing delays in object transfer between server and client.The
    delays are longer with large objects (a single object with an array ofobjects
    that reflect the rows returned in a database) than small (ie: 10 rows vs400).
    >
    Does anyone have any (actual) experience using the various Forte' flags inorder
    to show the actual size of the object/packets being passed between theserver
    and client?
    We are using input/output between client and server, input on all the SO's
    within a partition. Response on the server side is good, roughly 6seconds or
    so. The round trip fare however from the time the client makes the SOcall to
    the time that it completes is in the 25-30 second range, leaving roughly20-25
    seconds unaccounted for. I have brought in the network guys who arerequesting
    the data size and packet information. I did not see what I am looking forusing
    the trc:cm:*:4 and trc:cm:*:8 flags. I will be trying the trc:cm:*:10flag, but
    Forte' indicates that this flag is very verbose, the systems group hatesit when
    I use up all of THEIR disk space!
    Any ideas would be appreciated as always.
    -jeff
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: [email protected]

  • RE: (forte-users) user name

    Troy Burns wrote:
    It would definitely be of interest to me, since this is an item on my
    "to-do" list. If you can release the code, let me know.Here 'tiz.
    The files you're getting are:
    SFVosC.pex - "C" wrapper.
    Vos.C - The "C" callout.
    Vos.H - A header file for Vos.C, used by ...
    VosCLI.C - A command-line-driven mainline to test Vos.C
    VosObj.CEX - An object that provides a "nice" interface to the "C" wrapper.
    We use this in two ways: instantiated as a local object to get the username
    under VMS or NT, or as a service object partitioned to an NT server to do
    username/password authentication on behalf of clients on other operating
    systems.
    The following changes have been made throughout the files in an attempt to
    keep various people in DuPont happy:
    "our_application_root" replaces the actual name of the root directory of
    the application.
    "our_vms_server" replaces the actual name of the system in question.
    "our_nt_server" replaces the actual name of the system in question.
    "our_application_name" replaces the actual name of the application.
    A copyright notice, the usual disclaimer, and a "fair use" statement (which
    is just a reference to the Perl Artistic License) have been inserted.
    Except for the "ExternalObjectFiles" declaration in SFVosC.pex, all the
    changes appear to have been in comments. But the files come with the usual
    freeware warranty (i.e. "use at your own risk".)
    Have fun with these!
    Tom Wyant
    (See attached file: SFvosC.pex)(See attached file: Vos.c)(See attached
    file: Vos.h)(See attached file: Voscli.c)(See attached file: VosObj.cex)

    I would try going to the "lowest common denominator" between WindowsNT and
    Windows95 - DOS. Both windowing OS's sort of have their roots in DOS, or at
    least both are capable of opening a DOS session.
    Therefore, from a DOS prompt type "set" to view the environment variables for
    both OS types. Look for a common variable between the two that stores the
    userID. If you can find one of these your application will be that much more
    portable between these two Windows mutations.
    I used "set" on my NT and found my userID assigned to a few variables. I haven't
    done this on a Windows95 machine in quite some time, but if the machine is on
    the network it should have at least one environment variable with the userID.
    I'm just guessing that DOS has a variable to store the userID that will be
    common to both machines.
    Good luck....
    Kelsey PetrychynSaskTel Technical Analyst
    ITM - Technology Solutions - Distributed Computing
    Tel (306) 777 - 4906, Fax (306) 359 - 0857
    Internet:kelsey.petrychynSasktel.sk.ca
    Quality is not job 1. It is the only job!
    "Olivier Andrieux" <oandrieuxaxialog.fr> on 07/19/2000 09:12:41 AM
    To: forte-userslists.xpedior.com
    cc: (bcc: Kelsey Petrychyn/SaskTel/CA)
    Subject: (forte-users) user name
    Hi
    I use this command to catch the username:
    task.part.operatingsystem.getenv('username')
    with NT, there is no problem
    but with windows95 or 98 the command doesn't find the username.
    Thanks in advance.
    Olivier Andrieux
    Axialog
    Lille
    For the archives, go to: http://lists.xpedior.com/forte-users and use
    the login: forte and the password: archive. To unsubscribe, send in a new
    email the word: 'Unsubscribe' to: forte-users-requestlists.xpedior.com

  • RE: Reporting after many forte tasks run in batch mode?

    Actually, if you're looking for MAKEAPPDISTRIB (I assume that's how you
    create distributable) you can see if the command was succesfull or not.
    <<deployrep.js>> This Jscript will look for this string and it will
    generate a report based on the next line in the log file.
    The script assumes you have an environment variable (DESCARTES_ROOT) that
    points to a folder (let's say "D:\TEST"). Under that folder you have a log
    folder ("d:\test\log") which holds the deploy.log log file. You can easily
    change the script to reflect your systems settings.
    The generated report looks like that : <<deployrep.txt>>
    Norocel Popa
    Forte SysEng
    (519)746-8110 x 2292
    -----Original Message-----
    From: [email protected] [mailto:[email protected]]
    Sent: Tuesday, March 16, 1999 11:58 AM
    To: Forte-Users (Adresse de messagerie)
    Subject: Reporting after many forte tasks run in batch mode ?
    Hi,
    I would like to know if overnight builds went okay, and therefore need to
    parse the log(s).
    The issue is that I don't have a proper string to look for (i.e. for
    grep).
    If I consider 'ERROR", then the following message won't be understandable.
    There might a way to cheat with the indentation (i.e. the lines with only
    two first blank chars)..
    Has anyone experimented such a need ?
    J-Paul Gabrielli
    DTS
    SYSTEM ERROR: Service object MySuperApplicationServer.MySuperMgrSO has
    not been partitioned. Therefore, you cannot move it to an existing
    partition.
    Class: qqsp_UsageException
    Error #: [1602, 606]
    Detected at: qqcf_StandardConfig::MoveServiceObject at 3
    Error Time: Tue Mar 16 17:39:26
    Exception occurred (locally) on partition "Fscript_cl9_Client",
    (partitionId = B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1,
    taskId =
    [B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1.1]) in application
    "fscript", pid 22713 on node rambo in environment SuperEnv.

    Hi,
    To trap error message from Forte log, I usually do this
    egrep '(EXCEPTION|Exception|exception|ERROR|Error|error)' filename
    This takes a regular expression to 'egrep' all occurrences of "exception" or
    "error" not matter they are in upper case or lower case.
    Hope this help.
    Regards,
    Peter Sham.
    -----Original Message-----
    From: [email protected] [SMTP:[email protected]]
    Sent: Wednesday, March 17, 1999 12:58 AM
    To: Forte-Users (Adresse de messagerie)
    Subject: Reporting after many forte tasks run in
    batch mode ?
    Hi,
    I would like to know if overnight builds went okay, and
    therefore need to parse the log(s).
    The issue is that I don't have a proper string to look for
    (i.e. for grep).
    If I consider 'ERROR", then the following message won't be
    understandable.
    There might a way to cheat with the indentation (i.e. the
    lines with only two first blank chars)..
    Has anyone experimented such a need ?
    J-Paul Gabrielli
    DTS
    SYSTEM ERROR: Service object
    MySuperApplicationServer.MySuperMgrSO has
    not been partitioned. Therefore, you cannot move it to an
    existing partition.
    Class: qqsp_UsageException
    Error #: [1602, 606]
    Detected at: qqcf_StandardConfig::MoveServiceObject at 3
    Error Time: Tue Mar 16 17:39:26
    Exception occurred (locally) on partition
    "Fscript_cl9_Client",
    (partitionId =
    B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1, taskId =
    [B84E6180-D639-11D2-82F2-1863030AAA77:0x244:0x1.1]) in
    application
    "fscript", pid 22713 on node rambo in environment
    SuperEnv.
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:<a href=
    "http://pinehurst.sageit.com/listarchive/">http://pinehurst.sageit.com/listarchive/</a>>

  • Problem with compiling STL using program with Forte C++ 6 update 1 in compat mode

    I try to compile SGI STL using program with Forte C++ 6 update 1 and I get an errror
    ld -L/opt/SUNWspro/WS6U1/lib -liostream test.o -o test
    Undefined first referenced
    symbol in file
    __0oNIostream_initctv test.o
    __0oNIostream_initdtv test.o
    Iostream_init - declared as a static class CC4/iostream.h, but nm libiostream.a produce
    __1cNIostream_init2T6M_v_
    __1cNIostream_init2t6M_v_
    and program can't link.
    What's wrong?
    Thank you for any comments

    Hi!
    I experienced the same problem and the solution looks like the following: in sunpro6.mak file there is a variable STL_INCL that has the following value: -I. -I${PWD}/../stlport
    Change that to -I. -I${PWD}/../stlport/SC5 and the problem vanishes. The reason is that stlport/SC5 contains files *.SUNWCCh which are used by SUNpro C++ compiler as standard headers and contain correct STLPort namespace information.
    Regars,
    Art

  • Re: Forte Estimating Metrics

    Greg,
    In my experience, the class-count metric is a poor one for time estimation,
    for four reasons:
    1. The actual time/class is very domain- and implementation-
    sensitive. Industry averages are fairly unhelpful, unless
    you happen to employ average practices and work in domains
    of "average" complexity (whatever that means!)
    2. It does not account for the overall size of the project; the
    larger the project, the lower overall productivity is.
    3. It requires that a fairly detailed design be done already, which
    represents a fair amount of the total effort; as an estimation
    tool, it is only useful in the latter stages of a project.
    4. Lorenz's research is based on a very small sample; 18 projects are
    hardly enough to have statistical validity.
    (I almost included a fifth point, but it is hardly worthy: class-counting
    can be spoofed. Awareness of the use of class-count as a metric can give
    developers a motive to either artificially increase or decrease the class
    count, depending on other motivating factors.)
    I would recommend function point analysis as a more general purpose tool
    for project management. Using a good statement of the requirements, FPA
    generates a measure of the size of the application in terms of function
    points. This is independent of the implementation; it measures the
    behaviours of the application, rather than the particulars of design
    or implementation, such as class count or lines-of-code. Note that
    expected productivity varies as a function of the overall size of a project.
    FPA has been used as part of the study of literally thousands of
    software projects, so the conclusions drawn from FPA studies done
    by Capers Jones at Software Productivity Research have some
    statistical credibility.
    Looking at the general productivity numbers gathered by SPR
    (http://www.spr.com), there are some productivity measures that
    cover many languages, including Forte. In terms of lines-of-code
    per function point, Forte is 3 times more productive than C++.
    In terms of overall productivity (function points / man month), there
    are too many variable factors to make a simple statement of relative
    productivity levels between C++ and Forte meaningful. This has a lot
    to do with the Forte object model and run-time system, which, in certain
    problem domains, provides a lot of function points (or equivalent)
    "for free." In other words, if you can use Forte's plumbing package,
    you're automatically more productive. Providing the equivalent in
    C++ would be a daunting task (I should know -- I've done it!)
    The best method of determining your productivity is to measure it. There
    are many factors that affect the overall productivity of your software
    organisation; the programming language choice is just one. Using metrics
    drawn on industry averages concerning just ONE variable in the product
    development process is not terribly useful in project management.
    If you are looking for an extremely rough number that is more defensible
    that the good old "gut feel" technique, then class counting is probably
    the least intrusive on the development process.
    -Ron
    At 08:02 AM 6/5/97 +1000, you wrote:
    In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
    Lorenz in proposes an approach for estimating OO projects. Lorenzrecommends
    the average amount of effort spent on a single class is the best indictor of
    the amount of work required on a new project. He suggests Smalltalkdevelopers
    average 5-10 person-days per class, and C++ developers average 25-35
    person-days per class.
    Has anyone a view on average effort to build Forte classes?
    Note, the metrics quoted above relate to Design and Implementation. They
    assume Analysis has been completed, and do not include the time for project
    management, systems testing, and other support personnel. They assume aratio
    of 1:6 OO experts to novices. Higher ratios should result in greater
    productivity (lower average efforts per class). The guidelines also assumeno
    library of reusable components.
    Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
    consultant and author. His method is based on the results of 8-16Smalltalk and
    C++ projects (not all statistics are available from all projects). Projects
    ranged in size from 60 to 700+ project-specific classes. Project durations
    ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
    Thanks for any help
    gjb.

    Greg,
    In my experience, the class-count metric is a poor one for time estimation,
    for four reasons:
    1. The actual time/class is very domain- and implementation-
    sensitive. Industry averages are fairly unhelpful, unless
    you happen to employ average practices and work in domains
    of "average" complexity (whatever that means!)
    2. It does not account for the overall size of the project; the
    larger the project, the lower overall productivity is.
    3. It requires that a fairly detailed design be done already, which
    represents a fair amount of the total effort; as an estimation
    tool, it is only useful in the latter stages of a project.
    4. Lorenz's research is based on a very small sample; 18 projects are
    hardly enough to have statistical validity.
    (I almost included a fifth point, but it is hardly worthy: class-counting
    can be spoofed. Awareness of the use of class-count as a metric can give
    developers a motive to either artificially increase or decrease the class
    count, depending on other motivating factors.)
    I would recommend function point analysis as a more general purpose tool
    for project management. Using a good statement of the requirements, FPA
    generates a measure of the size of the application in terms of function
    points. This is independent of the implementation; it measures the
    behaviours of the application, rather than the particulars of design
    or implementation, such as class count or lines-of-code. Note that
    expected productivity varies as a function of the overall size of a project.
    FPA has been used as part of the study of literally thousands of
    software projects, so the conclusions drawn from FPA studies done
    by Capers Jones at Software Productivity Research have some
    statistical credibility.
    Looking at the general productivity numbers gathered by SPR
    (http://www.spr.com), there are some productivity measures that
    cover many languages, including Forte. In terms of lines-of-code
    per function point, Forte is 3 times more productive than C++.
    In terms of overall productivity (function points / man month), there
    are too many variable factors to make a simple statement of relative
    productivity levels between C++ and Forte meaningful. This has a lot
    to do with the Forte object model and run-time system, which, in certain
    problem domains, provides a lot of function points (or equivalent)
    "for free." In other words, if you can use Forte's plumbing package,
    you're automatically more productive. Providing the equivalent in
    C++ would be a daunting task (I should know -- I've done it!)
    The best method of determining your productivity is to measure it. There
    are many factors that affect the overall productivity of your software
    organisation; the programming language choice is just one. Using metrics
    drawn on industry averages concerning just ONE variable in the product
    development process is not terribly useful in project management.
    If you are looking for an extremely rough number that is more defensible
    that the good old "gut feel" technique, then class counting is probably
    the least intrusive on the development process.
    -Ron
    At 08:02 AM 6/5/97 +1000, you wrote:
    In his book Object-Oriented Software Metrics (Prentice Hall, 1994), Mark
    Lorenz in proposes an approach for estimating OO projects. Lorenzrecommends
    the average amount of effort spent on a single class is the best indictor of
    the amount of work required on a new project. He suggests Smalltalkdevelopers
    average 5-10 person-days per class, and C++ developers average 25-35
    person-days per class.
    Has anyone a view on average effort to build Forte classes?
    Note, the metrics quoted above relate to Design and Implementation. They
    assume Analysis has been completed, and do not include the time for project
    management, systems testing, and other support personnel. They assume aratio
    of 1:6 OO experts to novices. Higher ratios should result in greater
    productivity (lower average efforts per class). The guidelines also assumeno
    library of reusable components.
    Lorenz is an ex-head of IBM's Object Technology Center and a respected OO
    consultant and author. His method is based on the results of 8-16Smalltalk and
    C++ projects (not all statistics are available from all projects). Projects
    ranged in size from 60 to 700+ project-specific classes. Project durations
    ranged from 6 months to 2.5 years, with teams of 2 to 35 developers.
    Thanks for any help
    gjb.

Maybe you are looking for

  • Unable to load project after cut

    Hi, I've a new (few days old) iMac, 27inch i5, 24G Ram, OS X 10.9.1, Logic Pro X 10.0.6. Interface is M-AUDIO - Fast TrackUltra (latest driver) I had a project that seemed fine until I did a Cut/Insert->Cut Selction between Locations. The cut was fin

  • DYNP_VALUES_UPDATE not updating SCREEN FIELD PERNAM

    Following code not working. screen field pernam not getting updated. pls advise. tables:zmara ,DFIES. PARAMETER: pmatnr LIKE zmara-matnr,            pernam like zmara-ernam. AT SELECTION-SCREEN ON PMATNR. perform p2. FORM P2. *****READ DATA: SCREEN_V

  • Very Urgent Help , ABAP SQL Query

    Guys, Please suggest.I have a table(custom_table1) with a field say A which is of date type = c and length = 9. And i want to query this table.Following is the query. Select substr(A,0,5) B C into itab From table custom_table1 where b = ( select b fr

  • Maximum number of items in FI

    Hi All, When performing the GR for 421 lines, there is a warning message error "Maximum number of items in FI reached". What is the maximum number?  and where to see the setting? Thanks.

  • CRM2007 How to add a Web Dynpro ABAP application to a CRM business role

    I am investigating CRM2007 UI framework and I cannot seem to find a way to add a custom made Web Dynpro ABAP Application (created in CRM 4.0) to a business role, or how to add a custom transaction created in classic ABAP (transaction created via se93