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
-
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 -
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
psllooJust add a constructor to your subclass:
class MyTreeNode extends DefaultMutableTreeNode {
public MyTreeNode(Object obj) {
super(obj);
...Regards -
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
cvsanHow 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.frDear 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.comHi 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 commentsHi!
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
-
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