__group__,ticket,summary,component,version,type,severity,owner,status,created,_changetime,_description,_reporter
 Release,152,Method with large byte[] argument crashes with NullPointerException,uka.gm,,defect,critical,,reopened,2003-02-14T20:08:38+01:00,2007-09-29T08:06:38+02:00,"The server-side execution of a method with a large (4096) byte[] argument crashes. The effect is similar to a DGC problem, where a method of a no longer existing object is invoked. The object ID seen by the server is illegal and depends on the contents of the byte array argument. This behavior can only be observed when using the GM transport technology.
=== Problem ===
With GM technology writeHugeByteArray() did send the data out of order, because the buffer was not flushed before transmission.
=== Test ===
{{{
jp.test.TestLargeArgument
}}}

'''fixed''' since 1.07d.
",Ning Li (nli at uiuc dot edu)
 Release,1311,Cannot make TracNav work with Trac 1.0,trac.tracnav,,defect,critical,moschny,new,2012-11-01T16:30:08+01:00,2012-11-01T16:30:08+01:00,"Following your example, I have created
TracNav/TOC
and put 
{{{
[[TracNav(TracNav/TOC)]]
}}}
on my test page.

However this does not display my table of contents.

Is TracNav supported or tested tested with Trac 1.0?
Does it work work anyone else?
",Peter
 Release,176,Anonymous inner classes are not declared serializable,jpc,1.04d,defect,major,,new,2001-05-07T13:41:12+02:00,2005-02-02T22:13:46+01:00,"The JavaParty compiler automatically declares application classes serializable. This does not work for anonymous inner classes, because those classes cannot be declared to implement additional interfaces.
=== Workaround ===
Make the class non-anonymous.
=== Test ===
{{{
jp.test.TestMarshalInner
}}}
=== Solution ===
The transformation that adds the serializable code must be moved after the inner class transformation.

'''todo''' since 1.04d.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,106,Remote calls with with large (non-transportable) arguments fail with uka.gm,uka.karmi,1.05b,defect,major,,new,2001-09-14T19:01:00+02:00,2005-02-02T22:26:24+01:00,"The exception reported is


{{{
jp.lang.RemoteError: <method-description>: KaRMI: transport problem
  'java.io.IOException: received message to large'
}}}

=== Problem ===
KaRMI/GM messages are size bounded. There is a maximum message size that is handled by the transport subsystem. The uka.transport MarshalStream is aware of this fact and can be configured to create write request with a bounded size (by overriding the method writeLongByteArray()). But there is another requirement when using a message passing subsystem: A message that is received must always be accepted as a whole. This is not always met by the UnmarshalStream implementation. When reading plain byte arrays, the read requests are forwarded directly to the underlying stream without buffering. Especially because the fall-back serialization does not adhere to the rule that send and receive requests have to be paired with exactly the same size.

'''todo''' since 1.05b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,109,Illegal transformation result with package protected local classes,karmic,1.05b,defect,major,,new,2001-09-14T19:01:00+02:00,2005-02-07T14:55:22+01:00,"If a remote class uses a package protected local classes in its signature, it is not possible to extend it from a class in another package. The compiler crashes with an error message during skeleton generation:


{{{
<remote-class>_instance_intf.java:9: class <local-class> 
  is not public in package <package>; cannot be accessed from 
  outside package
}}}


=== Evaluation ===
For performance reasons, skeletons do not extend each other in KaRMI. The skeleton code from the extended super class is repeated in the extending classes skeleton instead. This repeated skeleton code seems to use the class name of the package protected local class during argument [un]marshaling.
=== See also ===
ticket:114

'''todo''' since 1.05b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,120,Compiler crash translating anonymous inner classes with non-final variables,jpc,1.05g,defect,major,,new,2002-03-13T16:19:00+01:00,2005-02-28T16:19:23+01:00,"Produces compiler crash.
=== Code ===

{{{
class T {
  void foo() {
    new Runnable() {
      /** must be declared final */
      int a;
      public void run() {
      }
    };
  }
}
}}}


'''todo''' since 1.05g.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,144,TestReenterSyncBlock sometimes fails,uka.karmi,1.06d,defect,major,,new,2002-09-05T11:23:00+02:00,2005-02-07T14:56:14+01:00,"{{{
Diagnostic output:
  Unexpected ERROR marker: remote reentrance RemoteReenter r failed.
  Missing OK marker 16.
Test log:
  vm0: JPTEST: OK 1: started
  ...
  vm0: JPTEST: OK 13: entered synchronized(r)
  vm0: JPTEST: OK 15: exited synchronized r.foo()
  vm1: JPTEST: OK 14: entered synchronized r.foo()
  vm1: CallHandler: receiving thread crashed: 
    java.lang.NullPointerException
  vm1: java.lang.NullPointerException
  vm1: at uka.karmi.rmi.CallHandler.run(CallHandler.java:394)
  vm1: at java.lang.Thread.run(Thread.java:536)
  vm1: JPTEST: OK 18: entered synchronized r.bar()
  vm1: JPTEST: OK 19: entered synchronized(r)
  vm1: JPTEST: OK 20: exited synchronized(r)
  vm0: JPTEST: ERROR: remote reentrance RemoteReenter r failed
  vm0: JPTEST: OK 17: created RemoteReenter r on remote node
  vm0: JPTEST: OK 21: exited synchronized r.bar()
  vm0: JPTEST: LAST-OK 22: finished
  vm0: CallHandler: receiving thread crashed: \
    java.net.SocketException: Connection reset by peer: 
    Connection reset by peer
  vm0: java.net.SocketException: Connection reset by peer: 
    Connection reset by peer
  vm0: at java.net.SocketInputStream.socketRead0(Native Method)
  vm0: at java.net.SocketInputStream.read(
    SocketInputStream.java:116)
  vm0: at java.io.BufferedInputStream.read1(
    BufferedInputStream.java:220)
  vm0: at java.io.BufferedInputStream.read(
    BufferedInputStream.java:277)
  vm0: at uka.transport.UnmarshalStream.requestTest(
    UnmarshalStream.java:1070)
  vm0: at uka.transport.UnmarshalStream.readByte(
    UnmarshalStream.java:1126)
  vm0: at uka.transport.MarshalContext.receiveSingleByte(
    MarshalContext.java:142)
  vm0: at uka.karmi.rmi.CallHandler.run(CallHandler.java:394)
  vm0: at java.lang.Thread.run(Thread.java:536)
}}}

=== Evaluation ===
Seems to occur rarely. Only seen with DEBUG-DGC enabled.

'''todo''' since 1.06d.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,239,"GJC produces ""slow"" code.",gjc,1.09c,defect,major,moschny,new,2005-03-09T20:04:06+01:00,2005-03-09T20:12:20+01:00,"As shown in [2891], switching KaRMI compilation from javac to gjc, results in a dramatically slowed down remote method invocation (by 50µs both, over Fast Ethernet and GM). This is strong evidence that the code produced by gjc is executed less efficiently (at least on recent JVMs (at least from Sun Microsystems (at least on Linux))).

This issue hinders implementing ticket:232.
",hauma
 Release,66,Unhelpful error message for misconfigured multicast,JP environment,1.04b,defect,minor,,new,2001-02-13T19:11:00+01:00,2005-02-07T14:59:05+01:00,"If a default route is not configuren in the kernel, the creation of a multicast socket fails with the following exception: java.lang.InternalError:


{{{
config server crashed: 
   java.net.SocketException: 
error setting options
}}}
This is not an helpful error message. It should be mentioned that something with the multicast configuration is wrong.


'''todo''' since 1.04b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,13,No stub transmission outside a remote call,uka.karmi,1.00,defect,normal,,new,2000-11-15T13:50:36+01:00,2000-11-15T13:50:36+01:00,"Stubs or remote references can not be transmitted outside a remote method invocation. This is not the case for remote server implementation objects. They can be transmitted outside a marshal stream. So object migration with KaRMI is possible in principle, but not practical, because the remote implementation object can not be marshalled into a byte array if it contains remote references to other remote objects.
=== Workaround ===
Migration can be implemented as service call. Addidtionally advantage: better performance.
=== See also ===
ticket:21, ticket:51

'''todo''' since 1.00.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,30,Missing test case for bridge objects,uka.karmi,1.03d,defect,normal,,new,2000-11-20T22:44:25+01:00,2000-11-20T22:44:25+01:00,"The effectiveness of the fix for ticket:28 must be shown with a test case. In ""normal"" one-technology operation the code for bridge objects is never executed.

'''todo''' since 1.03d.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,38,blanc static final variables,jpc,1.03e,defect,normal,,new,2000-12-12T12:45:36+01:00,2000-12-12T12:45:36+01:00,"Blanc static final variables can not be initialized within a static block of the class.
=== Problem ===
The JavaParty transformation even rewrites local classes to allow direct instance variable access for remote objects. This rewrite makes all references as absolute as possible. All references to static variables get fully qualified with package and class name. But such a fully qualified write access to a final variable is not allowed within the static initializer.
=== Test ===
{{{
jp.test.TestStaticFinal
}}}

'''todo''' since 1.03e.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,47,Access pattern r.l.x = expr,JP trafo,1.03r,enhancement,normal,,new,2001-01-30T18:09:53+01:00,2005-02-07T14:56:48+01:00,"Assignment to instance variables (x) of local instance variables (l) of remote objects (r) do not behave like expected, because the effect of the assignment is silently lost.

'''todo''' since 1.03r.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,56,Separate class loading for application classes,JP environment,1.03r,enhancement,normal,,new,2001-01-30T18:09:53+01:00,2005-02-07T14:58:39+01:00,"JavaParty application classes are loaded with the same class loader as the JavaParty environment classes. Therefore it is not possible to restart a modified and recompiled program in an already running environment. After each program modification the JavaParty environment must be shut down and restarted to get the actual versions of the program classes loaded.

'''todo''' since 1.03r.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,58,Cyclic initializers of remote classes,JP environment,1.03r,defect,normal,,new,2001-01-30T18:09:53+01:00,2005-02-07T14:58:20+01:00,"According to the Java language specification it is possible to initialize a class that has a cyclic reference to another class in its static initializer. Therefore the following definition is correct for local Java classes.

{{{
class A {
  final static int x;
  static {
    x = B.y + 1;
  }
}
class B {
  final static int y;
  static {
    y = A.x;
  }
}
}}}
For remote classes this causes a deadlock, because the remote class implementation object is allowed to be looked up from the runtime manager only after the static initializer has completed.

=== Evaluation ===
The standard Java behavior is not possible for remote classes, because we can not decide whether the access to a class object is from within the static initializer of a class we are initializing at the moment. We can not make the uninitialized class object available to normal access, before the class initializer has completed, because this access could occur from an other thread, that expects the class object to be initialized before. The local class initialization scheme can make use of Java thread monitors that ensure, that the owning thread can reenter the same monitor without being blocked. Without unique thread identifiers this can not be realized in a distributed environment.
=== Cave ===
The logical consequence is that even the creation of an instance of the class A is not possible within the static initializer of class A, because the creation of an instance is an usage of class A that requires that the static initializer of A has completed. The following statement causes the program to deadlock, if the class A is being loaded:


{{{
remote class A {
  static A a = new A();
}
}}}

=== Test ===
{{{
jp.test.TestCyclic
}}}

'''closed''' since 1.03r.

=== Evaluation ===
In the context of distributed threads, this problem should be revisited. It seems that the solution of synchronization reentrance does not yet solve the cyclic dependency problem, but may help.

'''todo''' since 1.03r.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,64,Interoperability with RMI,uka.karmi,1.04b,defect,normal,,new,2001-02-13T19:11:00+01:00,2001-02-13T19:11:00+01:00,"If KaRMI is used in an application that also uses RMI objects, these RMI objects are not treated as expected: In remote method calls such RMI server objects are copied instead of transformed to a stub. The same problem occurs with KaRMI objects in RMI remote method calls.
=== Evaluation ===
Maybe can not be fixed satisfactory.

'''todo''' since 1.04b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,65,KaRMI interoperability with RMI,JP trafo,1.04b,defect,normal,,new,2001-02-13T19:11:00+01:00,2005-02-07T14:59:38+01:00,"JavaParty for KaRMI does not generate stubs and skeletons for RMI server objects. But due to ticket:64 applications that use both KaRMI and RMI are problematic anyway.
=== Evaluation ===
This bug is not worth fixing without fixing ticket:64 first.
=== See also ===
ticket:64

'''todo''' since 1.04b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,74,not accept private classes in retro transport,uka.transport,1.04b,defect,normal,,new,2001-02-13T19:11:00+01:00,2001-02-13T19:11:00+01:00,"Because transportable classes are required to be public, the RetroTransport generator should complain, if the target class is not declared public. Otherwise the problem is only discovered at runtime.

'''todo''' since 1.04b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,75,operators *= /= ... are not supported as remote operations,JP trafo,1.04b,enhancement,normal,,new,2001-02-13T19:11:00+01:00,2005-02-07T14:58:51+01:00,"The only assignement operators supported are =, += -=. All other produce a nasty (internal) error message.
=== Solution ===
Produce better error message.

'''todo''' since 1.04b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,88,Semantics of annotations to the new statement (source location),jpc,1.04e,defect,normal,,new,2001-05-09T23:30:00+02:00,2005-02-02T22:15:34+01:00,"A documentation comment can occur anywhere in the source code. Its location is not controlled by the context-free grammar of the language. The location of the special documentation comments introduced in ticket:86 is not constrained, either. This opens up the possibility to place the comment at a location, where the variables used in the location expression are not defined.
=== See also ===
ticket:89, ticket:90

'''todo''' since 1.04e.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,89,Semantics of annotations to the new statement (side-effects),jpc,1.04e,defect,normal,,new,2001-05-09T23:30:00+02:00,2005-02-02T22:15:05+01:00,"The location expression introduced in ticket:86 may cause side-effects. This is considered to be a misuse of the annotation. Even so the observations of such side effects should be reasonable.
=== Example ===

{{{
/** @at foo() */
for (int n = 0; n < cnt; n++) {
    new R();
}
}}}

=== Problem ===
If such usage of the annotation is allowed (see ticket:88), the effect should be the same as a Java declaration. The usage depicted above should evaluate the method foo() once and use the result for all allocations done inside the loop.
=== See also ===
ticket:88, ticket:90

'''todo''' since 1.04e.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,90,Semantics of annotations to the new statement (scope),jpc,1.04e,defect,normal,,new,2001-05-09T23:30:00+02:00,2005-02-02T22:14:47+01:00,"Regular Java declarations are bound to some scope. It is not yet clear, whether the annotation described in ticket:86 should be valid exactly for the next allocation statement, or if it should be possible to annotate a block of statements with one location that is valid for the whole block.
=== Problem ===
The scope for a location annotation should be somewhat different from a Java declaration to enable an usage like in the following example.
=== Example ===

{{{
/** @at n */
new R(
  /** @at n + 1 */
  new S()
)
}}}

=== See also ===
ticket:88, ticket:89

'''todo''' since 1.04e.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,99,GM on only one VM per node,uka.karmi,1.05a,defect,normal,,new,2001-08-23T13:48:11+02:00,2001-08-23T13:48:11+02:00,"GM technology is only supported on one Java VM per node. All other nodes keep using TCP/IP.

'''todo''' since 1.05a.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,107,uka.util.PeriodicTask broken,uka.karmi,1.05b,defect,normal,,new,2001-09-14T19:01:00+02:00,2010-07-26T13:25:57+02:00,"Singleton thread is never initialized. Should also be checked for further possible bugs.
=== Solution ===
In method add(Runnable task), replace ""if (thread != null)"" with ""if (thread == null)"".

'''todo''' since 1.05b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,115,Access checks,jpc,1.05e,defect,normal,,new,2001-12-12T18:31:28+01:00,2005-02-07T14:59:57+01:00,"Access checks don't work for static methods and static variables. One can access a protected static method or field from a non-subclass from within another package.

'''todo''' since 1.05e.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,121,Invoke stateless static methods locally,JP trafo,1.05g,enhancement,normal,,new,2002-03-13T16:19:00+01:00,2005-02-07T14:58:02+01:00,"Static methods that do not depend on static variables of its class can be executed locally on the node that invokes them.
=== See also ===
ticket:118

'''todo''' since 1.05g.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,133,Batch job should not hang,JP environment,1.06b,defect,normal,,new,2002-05-31T11:37:00+02:00,2005-02-07T15:00:07+01:00,"The environment does also not shutdown silently, if a virtual machine registers late and the RuntimeManager throws a ConfigurationException complaining about missing virtual machines.
=== See also ===
ticket:130

'''todo''' since 1.06b.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,134,Replicated static constants break remote class loading with RMI,JP trafo,1.06c,defect,normal,,new,2002-08-12T18:54:22+02:00,2005-02-07T14:57:22+01:00,"A not yet discovered dead-lock can be observed during remote class loading. The problem only occurs in the JavaParty for RMI version. It only occurs, if a static method or static variable references its surrounding class. It is due to different RMI stub behavior. During remote class loading for class R the following occurs:

 * On node A R_class_impl is accessed and its static initializer is executed.
 * The static initializer must decide whether the remote class R should be initialized on the local node, or if it is already loaded somewhere else in the distributed environment.
 * The static initializer contacts the runtime manager with a request for a reference to the remote class. The request is attributed with the node A, the request originates from.
 * If the class R is not yet loaded anywhere in the distributed environment, the runtime manager decides the node, where it should be loaded: B.
 * If A == B, the runtime manager returns null as result for the reference to the remote class object. This is a marker that lets the static initializer on A decide to initialize the class locally.
 * If A != B, a request is sent to the virtual machine B to load the corresponding class.
 * Virtual machine B looks up the class R_class_impl.
 * The static initializer of class R_class_impl is executed on node B. Again, it requests a reference to the remote class R form the runtime manager, but gets null returned, because the runtime manager still intends to load class R on node B.
 * The static initializer of class R_class_impl now initializes class R locally on node B. It creates a new instance of R_class_impl, initializes it as class object, keeps a local reference to it, and registers this remote object at the runtime manager. (Here the problem occurs)
 * The runtime manager marks the class R as successfully loaded and notifies all thread waiting for class loading of class R to complete.
 * The initial request for a reference to class object for class R now can be completed: a reference to the remote class object is passed to the requestor on node A.
 * The static initializer of R_class_impl on node A stores the returned reference, and initializes replicated static constants of class R by requesting their values from the original class object that was allocated on node B.

The problem occurs when the reference to the remotely loaded class object R_class_impl is registered by the static initializer on node B at the runtime manager. The remote reference is basically a stub object. The dead-lock occurs when this stub object is unmarshaled on the runtime manager node. RMI stubs have the curious property that loading the stub class causes also loading all classes referenced in signatures of remote methods. (Since Java 1.2, RMI uses reflection for remote method execution. The reflection objects used in invocations are created during stub class loading. For the lookup of a reflection method object, all parameter classes are required. Therefore the stub class must load all classes referenced from signatures of remote methods.) If class R itself is referenced from signatures of static methods of class R, the static initializer of the stub class R_class_impl_Stub tries to load the handle class of R.

There are two scenarios that prevent the handle class from being loaded:

 1. Loading the handle class triggers loading the class implementation class for initialization of replicated static constants. Loading the class implementation class fails, because initialization of class R is not yet complete.
 1. If the original request for loading class R was triggered by accessing the handle class on the same node where the runtime manager lives, loading of the handle class is not yet complete and loading was triggered in a separate thread. Therefore the call from virtual machine B with the registration of class object R_class_impl is blocked when accessing the handle class R.

Problem 2 could be solved by the introduction of distributed threads. But the problem only occurs in RMI due to different stub behavior, and RMI will not introduce distributed threads, the only solution for RMI would be complete separation of handle and class implementation classes. Loading the handle class should never trigger loading the class implementation class.

=== Solution ===
It seems that the problem can be solved be separation of the handle and the class implementation class. The connection of these both classes was introduced by the introduction of replicated static constants, but there is no strong need for that connection: It only eases the transformation of accessors to static replicated constants, because they are copied to the handle class and accesses to replicated static constants need not be changed for the original program source during transformation.

The connection of these two classes can be broken up by accessing replicated static constants always at the class implementation class. Then the handle class can be loaded everywhere without the need for other classes.

=== Test ===
{{{
jp.test.TestRemoteClassLoading
}}}
=== See also ===
ticket:122, ticket:118, ticket:58

'''todo''' since 1.06c.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,148,RemoteServerRef.getClientHost() and distributed threads,uka.karmi,1.06d,defect,normal,,new,2002-09-05T11:23:00+02:00,2002-09-05T11:23:00+02:00,"The implementation of getClientHost() does rely on the fact that a remote server method is executed in an ExecutionThread. With distributed threads the thread that executes a server method can also be an application thread. This causes getClientHost() to throw an exception.
=== Evaluation ===
In the context of distributed threads the getClientHost() interface seems not to be appropriate.

'''todo''' since 1.06d.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,153,CallHandler theads never die,uka.karmi,1.07a,defect,normal,,new,2002-11-12T19:20:43+01:00,2005-03-24T15:02:06+01:00,"CallHandlers can never die, even if their connection (uka.karmi.rmi.ClientConnection) object would be garbage collected. Server-side call handlers are kept in a pool (uka.karmi.rmi.ServerConnection.handlers) for re-usage, but they have also no chance to die, even if they are without work for a long period of time.
=== Workaround ===
As work-around, you could disable the transparent distributed thread feature (if you do not rely on that) by setting the runtime properties uka.karmi.useDistributedThreads and uka.karmi.useThreadID to false. This will prevent CallHandlers from being created.

'''todo''' since 1.07a.
",Dan Hanley (dan at magus dot co dot uk)
 Release,164,Insufficient error message in case of internal errors,uka.karmi,1.07f,defect,normal,,new,2003-09-02T10:32:00+02:00,2003-09-02T10:32:00+02:00,"When a stream server crashes during internal processing (before the application method is invoked, or during service calls), no error message is marshaled back to the client. Instead the connection is closed silently. In these cases, the client gets a RemoteException that was caused by an EOFException during requesting the remote method return code.

'''todo''' since 1.07f.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,168,Separate compilation interferes with transport code generation,jpc,1.07f,defect,normal,,new,2003-09-02T10:32:00+02:00,2003-09-02T10:32:00+02:00,"Local classes are transparently equipped with marshaling routines according to the Transportable interface. For abstract classes not all methods of the Transportable interface are implemented. Their implementation is deferred to a concrete subclass. This causes interference with separate compilation: Before being able to inject the additional transport code into a class, type checking of the source code is performed. But the source code does neither reference the Transportable interface nor does it provide implementations for the methods declared in the Transportable interface, because these methods are automatically generated by the compiler. When classes are compiled separately, binary class files of already compiled classes are loaded for type checking new ones. This does not work with injected Transportable interfaces: Since the already compiled abstract superclass does implement Transportable, type checking requires that a concrete subclass provides implementations of all methods of this interface. This is not the case for the newly compiled class, because it expects the implementation of these methods to be injected by the compiler after type checking. Therefore type checking fails when classes are compiled separately.
=== Solution ===
The problem can be solved by introducing signature files also for local classes. Signature files are currently only created for remote classes. They reflect the status of a remote class before the remote transformation took place. When compiling separately, the signature file is used for type checking, instead of the generated class files. This would also help for local classes where additional code was injected automatically.
=== Test ===
{{{
jp.test.TestLocalAbstract
jp.test.TestExtendLocalAbstract
}}}

'''todo''' since 1.07f.
",Bernhard Haumacher (haui at haumacher dot de)
 Release,187,Multiple TCP/IP Interfaces are not supported,uka.karmi,1.07g,enhancement,normal,,new,2003-09-10T12:43:00+02:00,2005-02-07T15:01:06+01:00,"Currently it is not possible in a clean and transparent way to direct KaRMI communication over secondary TCP/IP interfaces.

The standard way to setup a cluster with an additional fast interconnect such as Myrinet or Infiniband is to assign IP addresses from a private subnet to the fast interconnect adapters. In most cases {{{InetAddress.getLocalHost()}}} however will return the address of the primary adapter, connected to the (standard) slow Ethernet network. The socket technology only uses this address and thus communicates always using the primary interface.

=== Solution ===
Introduce an additional configuration parameter for the socket technology that allows to specify the interface that shall be used by KaRMI, for example a subnet identifier. This way several instances of the socket technology can be used, each of them using a different network. The existing technology selection mechanism could select the appropriate instance for each pair of VMs, totally transparent to the user.

'''todo''' since 1.07g.
",Thomas Moschny
 Release,221,Assert keyword not supported,gjc,1.07h,defect,normal,moschny,assigned,2005-02-14T10:29:46+01:00,2005-02-24T20:48:18+01:00,"Java 1.4 adds an assert keyword to the language. This new keyword should be accepted by the compiler. Otherwise, existing code cannot be used easily. ",hauma
 Release,224,JavaParty as high-performance RMI server in a three tier architecture,JP environment,1.07h,defect,normal,hauma,new,2005-02-17T11:53:40+01:00,2011-06-15T07:17:51+02:00,"I'm contemplating a three tier architecture.  The top/client tier is composed of standard RMI clients built with standard JDK tools running somewhere on the internet.  The bottom/compute tier is composed of the JavaParty ""remote objects"" running on a cluster of Linux boxes behind a firewall.  The middle tier is both a standard RMI server to the client tier and a JavaParty front end.  So the objects served to the top/client tier are users of ""remote"" objects.  I absolutely do not want these clients to be at the party.  The question is whether such a middle tier can be created with the current implementation of JP?

The driver for this query is that we are looking at serving computational bandwidth via the internet.  We expect low transaction rates for relatively heavy compute jobs.  So, we need to scale well in terms of compute power but have little concern for scaling to support transaction rates.  The conventional approach is to adopt an architecture based on an application server (i.e. the e-Enterprise solution) which are really based on the recipricol case.  There is a quantum leap of complexity and cost when you go that route, even if you use an opensource application server.

So, I'm investigating the idea of leveraging something like JavaParty to allow us to scale our computational bandwidth without the need for massive amounts of middleware and the headaches that comes with it.  As we scale we add machines and grow the party.  We can add a lot of Linux boxes at a fraction of the cost of adopting an enterprise middleware solution. ",Chuck Dillon
 Release,225,Final variables with initializer in transportable classes,uka.transport,1.07h,defect,normal,hauma,new,2005-02-21T17:15:54+01:00,2005-02-21T17:35:52+01:00,"A final variable with an initializer (like the following class {{{A}}}) is not allowed to be re-initialized in its constructor. Therefore, the following code is wrong:

{{{
#!java
class A {
   final int x = 13;
   A() {
      x = 42;
   }
}
}}}

Unfortunately, the transportable transformation generates such code for final variables with initializers, because those variables are (re-)initialized from within the de-marshaling constructor.

=== Related tickets ===

 * ticket:174
 * ticket:191
 * ticket:166

=== Solution ===

The transportable transformation must replace all initializers of final variables with initialization code in the application constructors. 

To simply ignore (not marshal) final variables with initializers is incorrect, because the initializer might produce side-effects or it could yield different results for each newly constructed object:

{{{
#!java
class B {
   final long initializationTime = System.currentTimeMillis();
}
}}}

",hauma
 Release,230,GJ has problems with inner classes,gjc,1.00,defect,normal,moschny,new,2005-02-24T20:57:20+01:00,2005-02-28T16:28:58+01:00,"Members of nested static (=inner) classes don't hide members of their surrounding class.

A.java:
{{{
public class A {
        public Object test;
}
}}}

B.java:
{{{
public class B {
        public Object test;

        public static class C extends A {

                public void method() {
                        System.out.println(test);
                }
        }
}
}}}
GJ prints the following error message:
{{{
B.java:7: variable test is inherited from class A and hides a variable 
of the same name in class B. An explicit `this' qualifier must be used 
to select the desired instance
                        System.out.println(test);
}}}

This is obviously wrong as the inner class C is static and therefore has 
no access to the member B.test. Suns javac and the Eclipse compiler do 
it right.",Thorsten Meinl
 Release,234,Wrong exception checking for anonymous inner class constructors in GJ,gjc,1.00,defect,normal,moschny,new,2005-02-25T10:44:05+01:00,2005-02-25T10:44:05+01:00,"The following code should silently compile: A new anonymous inner class is constructed as subclass of {{{A}}} by calling its constructor {{{A()}}} that declares an exception to be thrown.  This exception is declared to be thrown from the surronding method. 

{{{
#!java
import java.io.IOException;

class A {
    A() throws IOException {}
}

class C {
    void bar() throws IOException {
        A x = new A() {};
    }
}
}}}

When compiling with GJ, the following error is reported. This indicates that the generated inner class constructor misses to declare {{{IOException}}}.

{{{
A.java:9: unreported exception: java.io.IOException; must be caught
or declared to be thrown

        A x = new A() {};
                      ^
}}}
",hauma
 Release,249,gjc.v6.RetroTransport: final variable is assigned a value in generated method,uka.transport,1.07i,defect,normal,hauma,new,2005-08-23T14:02:48+02:00,2005-08-23T14:02:48+02:00,"A class has a non static variable, e.g. EMPTY_VALUE which is final:

{{{
..
private final String EMPTY_VALUE = ""-"";
}}}


The code generator generates the following method:
{{{
protected void deepCloneReferences(uka.transport.DeepClone _helper)
  throws CloneNotSupportedException
{
  super.deepCloneReferences(_helper);
  this.EMPTY_VALUE = (java.lang.String) _helper.doDeepClone(this.EMPTY_VALUE);
}
}}}
The javac compiler will stumble across this method, cause a final variable is assigned a value.",burkhard.kuehlert@…
 Release,250,gjc.v6.RetroTransport: public inner classes make use of variable this$0 in generated code,uka.transport,1.07i,defect,normal,hauma,new,2005-08-23T14:58:12+02:00,2005-08-23T14:58:12+02:00,"Let us assume we have this code:
{{{
..
public class Outerclass
{
  public class InnerClass
  {
  }
}
}}}
then the gjc.v6.RetroTransport compiler generates the following:
{{{
protected void deepCloneReferences(uka.transport.DeepClone _helper)
  throws CloneNotSupportedException
{
  this.this$0 = (com.x.Outerclass) _helper.doDeepClone(this.this$0);
}
}}}
This is wrong cause the inner class is independent of outer objects.",Burkhard Kuehlert
 Release,255,Problem to run  javaparty on GRID5000,JP environment,,defect,normal,hauma,new,2006-03-27T10:22:22+02:00,2011-10-02T21:48:47+02:00,"Hello,
i've compile an example source of javaparty, and i tried to execute it on 10 nodes resereved previously. I've added the 10 nodes that i reserve in .jp-nodefile, but when i want to execute it on these nodes, i receive this message.
{{{ 
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
tcgetattr: Inappropriate ioctl for device
Connection to node-31.lille.grid5000.fr closed by remote host.
Connection to node-31.lille.grid5000.fr closed.
Connection to node-32.lille.grid5000.fr closed by remote host.
Connection to node-32.lille.grid5000.fr closed.
}}}
until the last node
and when i try to execute this command : jpinivte -test, this message appear:
{{{
ssh: connect to host node-1.lille.grid5000.fr port 22: Connection timed out
ssh: connect to host node-1.lille.grid5000.fr port 22: Connection timed out
Linux node-2.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-2.lille.grid5000.fr closed.
Linux node-2.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-2.lille.grid5000.fr closed.
Linux node-26.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-26.lille.grid5000.fr closed.
Linux node-26.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-26.lille.grid5000.fr closed.
Linux node-27.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-27.lille.grid5000.fr closed.
Linux node-27.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-27.lille.grid5000.fr closed.
Linux node-28.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-28.lille.grid5000.fr closed.
Linux node-28.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-28.lille.grid5000.fr closed.
Linux node-30.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-30.lille.grid5000.fr closed.
Linux node-30.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-30.lille.grid5000.fr closed.
Linux node-31.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-31.lille.grid5000.fr closed.
Linux node-31.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-31.lille.grid5000.fr closed.
Linux node-32.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-32.lille.grid5000.fr closed.
Linux node-32.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-32.lille.grid5000.fr closed.
Linux node-34.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-34.lille.grid5000.fr closed.
Linux node-34.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-34.lille.grid5000.fr closed.
Linux node-49.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-49.lille.grid5000.fr closed.
Linux node-49.lille.grid5000.fr 2.4.21-32.ELsmp #1 SMP Fri Apr 15 21:03:28 EDT 2005 x86_64 x86_64 x86_64 GNU/Linux
Connection to node-49.lille.grid5000.fr closed.
}}}
Can u help me please. Thanks",ali_bou59@…
 Release,262,TracNav footer navigation bar,trac.tracnav,,enhancement,normal,moschny,new,2006-09-20T00:36:18+02:00,2010-08-17T23:30:56+02:00,"'''Prev/Next navigation footer for TracNav?'''

How about a `[[TracNavFooter(TOC)]]` macro, that renders a page-specific navigation bar to the previous, next and ""parent"" page in the heirarchy defined by the TOC?

Users adding this macro to the bottom (or top) of each wiki page would give a nice ability for sequential navigation.

This info is already parsed out by the TracNav macro, would just be slightly different way of rendering it. 


",jwilliams@…
 Release,264,"Implement IRequestFilter, allows integration of TOC in templates",trac.tracnav,,enhancement,normal,moschny,new,2006-10-30T17:06:15+01:00,2007-03-02T17:13:44+01:00,"The attached patch implements IRequestFilter methods. The idea behind that is being able to use the generated TOC within a .cs-template (where you can't call a macro). The TOC content is added to the template variable tracnavplugin.toc.

Example:

I use the following snippet in a test installation, template ''wiki.cs'':
{{{
...
<div id=""content"" class=""wiki"">

 <?cs if tracnavplugin.toc && wiki.action == ""view"" ?>
 <div class=""tracnav-toc""><?cs var:tracnavplugin.toc ?></div>
 <?cs /if ?>

 <?cs if wiki.action == ""delete"" =><?cs
...
}}}

The patch should apply cleanly against current trunk. The modification works for Trac 0.10 only, since IRequestFilter are not available in previous Trac releases afaik.",mrenzmann@…
 Release,278,Selection does not work when using camel case links,trac.tracnav,tracnav-3.92,defect,normal,moschny,reopened,2007-03-01T17:28:41+01:00,2007-03-15T23:27:19+01:00,"Wiki links using the camel case notation are rendered correctly in the TOC, but no selection occurs.  When using the angle bracket notation, it works as expected.",schodet
 Release,282,make tracnav friendly to wikinegotiator,trac.tracnav,tracnav-3.92,enhancement,normal,moschny,new,2007-07-10T03:26:29+02:00,2007-07-10T03:26:29+02:00,"see http://trac-hacks.org/ticket/1756
{{{
#!diff
Index: tracnav/tracnav.py
===================================================================
--- tracnav/tracnav.py  (revision 3169)
+++ tracnav/tracnav.py  (working copy)
@@ -121,6 +121,8 @@
         #needed several times
         self.preview = req.args.get('preview', '')
         self.curpage = req.args.get('page', 'WikiStart')
+        self.curpagename = req.args.get('page_name')
+        self.curpagelang = req.args.get('page_langsuffix')
         self.modify = req.perm.has_permission('WIKI_MODIFY')

         # parse arguments
@@ -138,11 +140,14 @@
         Fetch the wiki page containing the toc, if available.
         """"""
         if self.preview and name == self.curpage:
-            return self.req.args.get('text', '')
+            return self.req.args.get('text', ''), name
+        elif self.curpagelang and WikiSystem(self.env).has_page(name + '.' + self.curpagelang):
+            name = name + '.' + self.curpagelang
+            return WikiPage(self.env, name).text, name
         elif WikiSystem(self.env).has_page(name):
-            return WikiPage(self.env, name).text
+            return WikiPage(self.env, name).text, name
         else:
-            return ''
+            return '', name

     def get_toc_entry(self, toc_text):
         """"""
@@ -223,7 +228,8 @@

         # add TOCs
         for name in (self.names or [""TOC""]):
-            toc = self.parse_toc(self.get_toc(name))
+            toc, name = self.get_toc(name)
+            toc = self.parse_toc(toc)
             if not toc:
                 toc = self.parse_toc(' * TOC ""%s"" is empty!' % name)
             found, filtered = self.filter_toc(toc)
@@ -243,7 +249,7 @@
         result = []
         for name, title, sub in toc:
             if sub == None:
-                if name == self.curpage:
+                if name == self.curpage or self.curpagename and name == self.curpagename:
                     found = True
                 result.append((name, title, None))
             else:
@@ -273,7 +279,7 @@
         for name, title, sub in toc:
             li_style = ' style=""padding-left: %dem;""' % (depth + 1)
             if sub == None:
-                if name == self.curpage:
+                if name == self.curpage or self.curpagename and name == self.curpagename:
                     cls = ' class=""active""'
                 else:
                     cls = ''
}}}

it's compatible when without wikinegotiator",phpxcache@…
 Release,285,Wrong backlink when redirecting between two tracs with redirect plugin enabled.,trac.redirect,,defect,normal,moschny,new,2007-10-23T19:40:11+02:00,2007-10-23T19:40:11+02:00,"I have page in trac wiki (ex. ''!https://domain/tracinstance/wiki/ExamplePage'') that redirects to wiki page in another trac via ex. ''!https://domain/othertracinstance/wiki/PageName''
In other trac on PageName page there is link ''Redirected from '''ExamplePage''' '' but  link ExamplePage links to ''othertracinstance'' instead of ''tracinstance''.",Daniel Boczek
 Release,297,javaparty retro doesn't work,build process,,defect,normal,hauma,new,2008-11-14T23:58:29+01:00,2008-11-14T23:58:29+01:00,"I am trying to use the japarty retro command but nothing happens.

after execute this in the same directory where I have the .class files I got a diagnosis screen and a suggestion to use jpc.bat, jprm.bat, jpvm.bat, and jprk.bat in the DOS shell.

checking the japarty.bat file I realize that there is not calling to another bat file or something similar but except the diagnosis.

am I missing something?",Ezequiel Boaglio
 Release,301,"When both PageOutline and TracNav are displayed, allow one to be displayed below the other",trac.tracnav,,enhancement,normal,moschny,new,2010-02-11T23:37:43+01:00,2010-02-11T23:37:43+01:00,"I'd like to use the `PageOutline` and `TracNav` macros on the same page.  I'd like the `TracNav` side-bar to be displayed below the `PageOutline` side-bar.  I've tried:

{{{
[[PageOutline(2-5, Page Outline)]]
[[BR]]
[[TracNav(SandBox)]]
}}}

Here is what I get:

[[Image(PageOutlineAndTracNav.png)]]",ryano@…
 Release,302,"Add option to allow heading to be displayed, like the PageOutline macro does",trac.tracnav,,enhancement,normal,moschny,new,2010-02-11T23:40:30+01:00,2010-02-11T23:40:30+01:00,"It would be nice to have a heading displayed, like the `PageOutline` macro allows, using the same font and fontsize as the `PageOutline` macro does.

[[Image(PageOutlineMacro.png)]]",ryano@…
 Release,303,Syntax for arguments is non-standard and commas should also be allowed,trac.tracnav,,enhancement,normal,moschny,assigned,2010-02-12T02:41:08+01:00,2010-04-16T14:51:56+02:00,"It took me a little while to figure out the syntax for passing arguments to this macro.

From my experience using other macros, including those included with Trac, I was expecting the following to be valid syntax:
{{{
[[TracNav(SiteNavigation,noedit)]]
}}}

However, that syntax results in an error:

`TOC ""SiteNavigation,noedit"" is empty!`

The valid syntax seems to be:
{{{
[[TracNav(SiteNavigation|noedit)]]
}}}

Also, there are no example provided on the usage page,  TracNav/Usage#Options, so some people might have trouble figuring this out.

Seems like a good solution would be to also allow arguments to be separated with commas as well as pipes, though I can't say for sure that this is readily possible.",ryano@…
 Release,305,Apply macro on TOC page which generate lists,trac.tracnav,,enhancement,normal,moschny,new,2010-04-14T15:26:20+02:00,2010-04-14T15:26:20+02:00,"Current allow_macros parameter only apply after list analyze.

Before analyze the list, apply macros first which will generate new lists, like Include and TitleIndex, will be a great enhancement. Then we can build a TOC with other TOC or dynamic TOC.

I think it's no need to specify what macros should aplly since the TOC pages are generally dedicated to this use, allow some and don't allow others seems not so much usefulness.

{{{
Subject_TOC_1

 * item1
 * item2
}}}

{{{
Subject_TOC_2

 * item3
 * item4
}}}

{{{
TOC

 * Subject1
 [[Include(Subject_TOC_1)]]
 * Subject2
 [[Include(Subject_TOC_2)]]
}}}

Page TOC when display as float TOC should be the same as direct view as a wiki page like below.

 * Subject1
  * item1
  * item2
 * Subject2
  * item3
  * item4

",ulysess444@…
 Release,307,InterTrac support,trac.redirect,,defect,normal,moschny,new,2011-06-29T23:20:11+02:00,2011-06-29T23:20:11+02:00,"Does the plugin support InterTrac syntax? I would like to redirect mypage on another project such as '''`otherproject:wiki:mypage`'''.

Thanks",anonymous
 Release,308,Patch for Trac 0.12.2,trac.redirect,,defect,normal,moschny,new,2011-06-30T18:47:03+02:00,2011-06-30T18:47:03+02:00,"I got the plugin ported to Trac 0.12.2 with following:
 * Convert unicoded resource.id to string to avoid unencoded char
 * Handling missing ticket in target link 

Attached is the patch.
",rlrj60
 Release,806,"TOC displays ""TracNav"" when scripting is disabled",trac.tracnav,tracnav-devel,defect,normal,moschny,new,2012-05-14T11:36:59+02:00,2013-03-17T02:43:22+01:00,"Hi, I noticed that the TracNav Macro has the problem that it displays ""TracNav"" as headline (see attached screen shot) in case the user has scripting disabled (via NoScript or ScriptNo). Is there any way to avoid this?",dietmar.winkler@…
 Release,1306,patch to make tracnav always visible (i.e. fixed while scrolling),trac.tracnav,,task,normal,moschny,new,2012-10-24T16:38:44+02:00,2012-10-24T16:38:44+02:00,"Hi there, 

And thanks for this nice plugin. [[br]]
In order to make TracNav always visible, here's a patch to make the tracnav div fixed while scrolling  [[br]](see e.g. left ""frame"" of [http://csswizardry.com/2012/02/pragmatic-practical-font-sizing-in-css/]).  [[br]]
The new option is named ""posfixed"".
{{{
127d126
<         self.posfixed = False
138,139d136
<                 elif arg == 'posfixed':
<                     self.posfixed = True
216,220c213
< 
<         if self.posfixed:
< 						out = tag.div(class_=""wiki-toc trac-nav"",style='position:fixed;right:1%')
<         else:
< 						out = tag.div(class_=""wiki-toc trac-nav"")
---
>         out = tag.div(class_=""wiki-toc trac-nav"")
}}}
Could you please release a new version of your plugin with this option?

Cheers, [[br]] 
Mathieu
",mtrocme
 Release,1312,HELP Need Exact Syntax for Allowed_Macros option,trac.tracnav,,task,normal,moschny,new,2013-04-26T19:13:16+02:00,2013-04-26T19:13:16+02:00,"I am having trouble following the instructions shown (see image below).

[[Image(http://files.amkcreations.com/trac/amacros/TracNav_Usage.jpg)]]

I am calling a TracNav that contains a TicketQuery macro. It will not display properly. Can you give me the correct syntax? 
My attempt: [ [ TracNav(ViewTickets|allowed_macros=TicketQuery) ] ]

My Results are 

[[Image(http://files.amkcreations.com/trac/amacros/TracNav_Failed.jpg)]]

TO RESTATE MY DESIRE:
I am trying to get the TracNav to display the Count of each report next to the link.

[[Image(http://files.amkcreations.com/trac/amacros/WishScreen.jpg)]]

With your permission, I will edit the instructions so others can understand this better as well. Thanks for your time!

God Bless,
Arlene :)",akliewer99@…
 Release,190,Connections should be cleaned up asynchronously.,uka.karmi,1.09a,enhancement,normal,,new,2004-08-11T16:43:00+02:00,2005-02-02T23:17:02+01:00,"After each usage, a KaRMI connection is cleaned up and put back into a connection pool. This cleanup is done in closeReceiveResult() on the client side and in closeSendResult() on the server side. Under certain circumstances (see uka.transport.MarshalStream.symmetricReset()), this cleanup requires sending and receiving additional data. Since the cleanup phase of a connection should not be on the critical path of a remote operation, it should be handled asynchronously in a helper thread. The only requirement is that the cleanup is finished before the connection is reused.

'''todo''' since 1.09a.
",Bernhard Haumacher
 Release,210,Gjc issue repository should be converted into tickets,gjc,1.07h,defect,normal,moschny,assigned,2005-01-31T16:23:09+01:00,2005-01-31T20:31:55+01:00,"The gjc compiler had its own issue repository, which was not maintained for a long time until revived in the checkpointing branch. The entries (at least the active ones) should be converted to trac tickets. 

See: source:branches/checkpointing/gj/doc/fixes.txt
",hauma
2.0 Release,240,Arrays of anonymous objects are always handled embedded. ,uka.transport,1.09c,defect,normal,hauma,new,2005-03-09T23:54:37+01:00,2005-04-03T14:29:21+02:00,"This is a workaround for the problematic ticket:232. The embedded annotation cannot be used within KaRMI source files, but it is required to generate correct marshaling code e.g. for ReplicaStub.",hauma
2.0 Release,186,Instances of replicated classes are not assignable to jp.lang.ReplicatedObject,jpc,1.09a,defect,critical,hauma,assigned,2004-08-11T16:43:00+02:00,2005-02-03T17:24:14+01:00,"Transparent replicated classes (see ticket:158) are marked with the {{{replicated}}} modifier. The implicit root class of all replicated classes is {{{jp.lang.ReplicatedObject}}} (like {{{jp.lang.RemoteObject}}} is the implicit root class of all remote classes). But the types defined by replicated classes are not assignment compatible with jp.lang.ReplicatedObject.
=== Test ===
{{{
jp.test.TestReplication with uncommented test case fooCast().
}}}

'''todo''' since 1.09a.
",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,213,Optimized collective updates,uka.karo,1.08a,defect,critical,boh,new,2005-02-04T17:43:19+01:00,2010-07-26T13:22:06+02:00,"A collective update on a replicated object that does not employ PartialReplication corresponds to an all-to-all operation in MPI, because each replica must communicate its changes to each other replica. But if a replicated object is partially replicated, changes to one replica are only relevant for a small subset of all replicas. This fact should be used to optimize collective updates for partially replicated objects. ",hauma
2.0 Release,214,Separate compilation does not work with transparent replicated objects,jpc,1.09a,defect,critical,hauma,new,2005-02-07T13:24:11+01:00,2005-02-09T22:38:40+01:00,"If compiling the follwing two class files at once, everything works fine. When compiling first {{{A.java}}} and then {{{B.java}}}, the compiler complains about {{{B.java:6: variable x not found in class A}}} during the compilation of {{{B.java}}}.

A.java:
{{{
#!java
replicated class A {
    static int x;
}
}}}

B.java:
{{{
#!java
class B {
    static {
        A.x = 13;
    }
}
}}}
",hauma
2.0 Release,137,Pseudo class variable as argument to synchronized blocks,JP trafo,1.06c,defect,major,hauma,new,2002-08-12T18:54:22+02:00,2005-02-21T08:26:39+01:00,"Compiler crashes if it encounters an access to the pseudo {{{.class}}} variable of a remote class as argument to a synchronized block.

=== Problem ===
R.class is translated to ""this.class"" in the context of a synchonized block argument. This is nonsense.

=== Evaluation ===
The same difficulty exists for replicated classes (see ticket:157). 

=== Test ===
{{{
jp.test.TestClassVariable
}}}

'''todo''' since 1.06c.
",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,167,Final variables in replicated objects,uka.karo,1.08a,defect,major,,new,2004-03-25T11:13:14+01:00,2005-02-03T17:26:02+01:00,"Final instance variables never change after the object is constructed. This property is used in replicated objects. Final variables are simply excluded from the update process. This would be fine, if those variables were initialized on all replicas in a consistent manner. But this is not the case, because after construction only the primary replica is initialized. All secondary replicas are allocated uninitialized and wait for an update. Since final variables are excluded from the update process, their state stays inconsistent even after the first update.
=== Evaluation ===
Final variables cannot be updated during the regular update process, because assignments to them are only allowed within their constructor.
=== Evaluation ===
Secondary replicas are created uninitialized, because the constructor in the replicated root class (ReplicatedObject) triggers the creation of the secondary replicas. At this time, the primary replica is not yet completely initialized. The problem could be fixed by delaying the creation of the secondary replicas to the time the construction of the primary replica has completed.

'''todo''' since 1.08a.
",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,211,"Wrong transformation (or insufficient error checking) for collective, exclusive, and shared synchronization",jpc,1.09b,defect,minor,hauma,new,2005-02-03T15:36:29+01:00,2005-02-03T15:37:34+01:00,"Assume, one has ""forgotten"" the {{{replicated}}} modifier in the following class definition (Even with the replicated modifier, this program is nonsense, because there is only one thread performing a collective synchronization on the replicated class. Therefore, this program should hang unless executed in a distributed environment with only one virtual machine.):

{{{
#!java
import jp.lang.DistributedRuntime;

class A {
    static int[] x = 
	new int[DistributedRuntime.getMachineCnt()];

    public static void main(String[] args) {
	int rank = DistributedRuntime.getMachineID();
	collective synchronized (A.class) {
	    x[rank] = rank;
	}
    }
}
}}}

This program is ""illegal"", because there is an attributed (collective) synchronization on a class object that does not represent a replicated class. 

This mistake should either be detected at compile time, or the program should compile silently, but throw an exception at runtime. Instead, the compiler accepts the program, starts the transformation, produces an illegal transformation result, and '''then''' prints an error message containing details about the (wrong) transformation. 

The error message is:
{{{
A.java:11: method __collectiveUpdate() not found in class java.lang.Class
}}}
",hauma
2.0 Release,177,Collective exchange,uka.karo,1.08a,enhancement,normal,,new,2004-03-25T11:13:14+01:00,2005-02-03T17:25:40+01:00,"The only collective operation introduced in ticket:157 was the collective update. This operation consists of an exchange of concurrent modifications done to a replicated object. In addition to that, an application may need a more basic form of data exchange, without modifying the state of the replicated object. In general, cooperating threads might want to use all collective operations for pure data exchange known from MPI: barrier, broadcast, (all-)scatter, (all-)gather, all-to-all. Even the combined communication/computation operations (all-)reduce, and scan are conceivable.
=== Evaluation ===
Implementing all flavors of MPI-style collective communications is to time consuming. As prove of concept, the most powerful ""all-to-all"" communication should be implemented.
=== Solution ===
A collectively replicated object serves as context for a collective data exchange. Therefore, the base class of replicated objects provides a set of collective methods that are inherited by subclasses. The all-to-all communication is implemented in the {{{Object[] exchange(Object[])}}} method. The caller must provide a list of arguments, one for each rank of the replicated object. The method returns a list of results, one from each rank (data from rank {{{r}}} is stored at index {{{r}}} in the result list). The object at position {{{caller-rank}}} is copied from the argument list to the corresponding index within the result list.
=== Problem ===
The semantic of the exchange operation is problematic. See ticket:180 for details.

'''todo''' since 1.08a.
",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,179,Merge annotations for collective replicated objects,JP trafo,1.08a,enhancement,normal,,new,2004-03-25T11:13:14+01:00,2005-02-07T17:34:13+01:00,"Collective replicated objects as introduced in ticket:157 require the modified state of a replicated object to be strictly partitioned among the cooperating threads. This restriction is to limiting for most applications. Concurrent modifications during collective operations should be allowed, if a merge strategy is provided that specifies how to merge modifications done to the same state on different nodes into a consistent view.
=== Solution: Application-provided differencing methods ===
Instead of relying on the automatically generated methods for object differencing and merging, the application could provide tailored methods that extract a difference in a way that is suited for being applied non-destructively to another also modified copy. E.g., if a variable of type {{{int}}} is modified additively, instead of marshaling the current (modified) state, the difference to its former state could be marshaled. At the receiving side, this difference could be added to both, the current value and its former value. This merges the modification by another thread into an existing local modification at the receiving side (without overriding the local modification). Of cause, subtracting the backup copy form the current value to represent the modification is not generally valid: Both modifying thread could have multiplied the value with some factor. Merging these modifications additively would result in undesired effects. Therefore, the merging strategy must be application provided.
=== Evaluation: Application-provided differencing methods ===
Replacing the whole automatically generated methods with user-defined ones is not the best solution: In those methods details about the differencing and merging process are revealed. Hand-coding those methods is both tedious and error-prone.
=== Solution: Merge annotations ===
An instance variable of a replicated class, or a whole replicated class could be annotated with another class that provides the functionality for differencing and merging.
=== Cave ===
In combination with the handling of updates to locally dead objects according to ticket:207, the code that was generated for merging updates into the local state was broken (see ticket:181).

'''todo''' since 1.08a.
",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,180,Semantics of collective exchange operations,uka.karo,1.08b,defect,normal,,reopened,2004-03-25T11:13:14+01:00,2005-02-08T23:14:35+01:00,"The collective exchange (see ticket:177) was originally designed as  pure data exchange (without touching the replicated state of the corresponding replicas). But two things might happen: 

 * The exchanged data may reference parts of the replicated state (by incident). 
 * The application might use the exchange operation to actively ""migrate"" parts of the replicated state from on rank to another by means of an exchange. 

To deal with both cases, during the exchange, data that is unrelated to the replicated object is passed by value as in a regular remote method invocation, while data that was '''already''' part of the replicated object is passed ''by reference'' (by transmitting the corresponding object identifiers and resolving them on the target node to the already existing copy of the object). 

This approach causes two semantic problems:

 * Exchanging references to replicated data may behave unexpected, because the exchanged data can differ on the sending and receiving side, if the replicated state is currently inconsistent (e.g. in the middle of a collective update operation). The effect is similar when  passing a volatile reference from one thread to another, without ensuring that the receiver will see fresh values upon dereferencing.
 * Since an exchange operation is meant for exchanging data that is not directly related to the state of a replicated object, it is acceptable that the argument passing semantics depends on the fact, whether a referenced object is part of the replicated graph, or not. But within a temporarily inconsistent replicated object, it is not clear, which object currently belongs to the replicated state and which does not. E.g., an object that is just entered to the replicated graph in a running collective update is at the one hand already referenced form the graph, but not yet registered, because it was not yet detected by an update. Such object would be passed by value, instead of by reference. This will result in unexpected behavior.

=== Solution: Update before exchange ===
Both problems described above can be solved by preventing an exchange operation on a temporarily inconsistent replicated object. If the replicated object is in a consistent state, all ranks have a consistent view to all shared objects. Then, there does not exist a  newly created object that is not yet registered at the replicated graph. The only way of preventing an exchange within an inconsistent replicated object is to perform an update before the exchange operation.

=== Evaluation: Non-shared objects are not registered ===
For performance reasons, objects that are not shared between ranks of a replicated object are not registered. If such object takes part in an exchange operation it will be passed by value regardless whether the replicated object is in a consistent state, or not. This limits the exchange operation to shared objects. An exchange may therefore not be used to share an otherwise unshared object. It depends on the application, whether this restricts the usability of the exchange operation. Ensuring that all referenced objects (shared and non-shared) are registered requires traversal of the whole replicated graph during each update and will result in prohibitive cost.

",Bernhard Haumacher (haui at haumacher dot de)
2.0 Release,215,NaN values in replicated state produce continuous  updates,uka.karo,1.08a,defect,normal,hauma,new,2005-02-08T10:20:26+01:00,2005-02-08T10:27:08+01:00,"The update mechanism used in CollectiveReplication only marshals
updates form one replica to another, only if the actual value in one
replica has changed. This test uses the built-in (==) operator for all
primitive types. Since {{{Double.NaN != Double.NaN}}}, this test
detects always an update for replicated {{{float}}} and {{{double}}}
values that are {{{NaN}}}.

A side effect of this behavior is that {{{NaN}}} values are likely to
dominate changes to replicas of such {{{double}}} or {{{float}}}
variables. After some has set a variable to {{{NaN}}}, it is hard to
override this in a collective update, because each rank generates an
update for its {{{NaN}}} value.
",hauma
2.0 Release,217,Broken transparent replicated class transformation (access to static parts of a replicated class),jpc,1.09a,defect,normal,hauma,new,2005-02-08T15:40:24+01:00,2005-03-12T18:34:36+01:00,"Crashes the compiler where it should not:
{{{
replicated class A {
    static int x = 10;
    static int y = x;
}
}}}",hauma
2.0 Release,218,Broken transparent replicated class transformation (initializer of instance variable),jpc,1.09a,defect,normal,hauma,new,2005-02-08T15:55:04+01:00,2005-02-08T15:55:04+01:00,"The compiler does reject the following code, where it should not:
{{{
replicated class A {
    static int x = 10;
    int y = x;
}
}}}

It makes the following excuses:
{{{
A.java:52: variable x not found in class A
  int y = x;
          ^
1 errors
}}}
",hauma
2.0 Release,219,Missing backup copies for objects transmitted in a CollectiveExchange,uka.karo,1.09b,defect,normal,hauma,new,2005-02-09T10:31:13+01:00,2005-02-09T10:31:13+01:00,"Refactoring the order of backup creation and reference filtering in [2528] broke CollectiveExchange. Backup copies are now created immediately after creating a patch (directly within the method {{{PatchAdapterImpl.Output.createPatch()}}}). The exchange is done after creating patches to bring the replicated state up to date. If a shared object is transmitted during the exchange operation to a rank, where previously no copy existed, no backup copy is created for that object.
",hauma
2.0 Release,222,Optimized collective updates require frozen objects ,uka.karo,1.09b,defect,normal,hauma,new,2005-02-16T12:23:31+01:00,2005-02-16T12:23:31+01:00,"The replicated root object is present at each rank of a replicated object. Since this could have been modified during a collective update, the underlying communication is always potentially all-to-all. To optimize collective updates effectively according to ticket:213, there must be the possibility to ""freeze"" at some point in time after construction. A frozen object must no longer be modified and is excluded from updates.",hauma
2.0 Release,223,Difficulties defrosting objects,uka.karo,1.09b,defect,normal,hauma,new,2005-02-16T12:30:37+01:00,2005-02-16T12:30:37+01:00,"An object can be frozen during a collective or exclusive synchronization according to ticket:222. Since frozen objects are excluded from updates, collective updates can be optimized according to ticket:213. 

Unfortunately, defrosting an object is an operation that modifies the state of the replicated object on all machines holding a copy of the frozen object. Therefore, an optimized collective update cannot be used to bring a replicated object with defrosted objects up-to-date. Defrosting must either be restricted to exclusive updates, or a special collective operation must be introduced for object defrosting.",hauma
2.0 Release,228,Anonymous objects should replace value mode marshaling (non-recursive),uka.transport,1.08a,defect,normal,hauma,new,2005-02-24T14:55:46+01:00,2011-05-30T21:50:23+02:00,"The {{{uka.transport}}} marshaling does support value mode marshaling. For objects marshaled in value mode, no cycle resolution is performed. This prevent such (temporary) objects from being inserted into  the streams object spaces, which is especially important in the context of replicated objects to keep the set of objects watched for modifications small. 

All objects marked with {{{uka.lang.Immutable}}} (and all objects transitively referenced from those objects) were transmitted in value mode. This is problematic, because there are classes that should be transmitted in value mode without extending the value mode to referenced objects. 

A new marker {{{uka.lang.Anonymous}}} (see [2833], [2834]) was introduced that guarantees (non-recursively) equivalence of objects and copies. {{{uka.transport}}} should respect this annotation and transmit anonymous objects without inserting them into the stream's object spaces. 
",hauma
2.0 Release,231,Embedded objects,uka.transport,1.09b,defect,normal,hauma,new,2005-02-25T07:45:31+01:00,2005-02-25T07:45:31+01:00,"When value mode marshaling is replaced with anonymous objects (see ticket:228), a possibility is required build complex anonymous objects that internally consist of multiple helper objects e.g. arrays (which in turn cannot be declared anonymous, because their class is not extendable). To prevent references to those helper objects from being marshaled ""by reference"", they should be declarable as being embedded into its owner object. In the following example, an anonymous class {{{A}}} internaly consists of an array of references to other objects stored in an array {{{A.r}}}. As well as the refernce to {{{A}}} as the reference to the internal helper array {{{A.r}}} should be marshaled in value mode. Only for the containing references {{{A.r[n]}}}, regular marshaling should apply:

{{{
#!java
class A implements Anonymous {
   /** @embedded */
   Object[] r = new Object[10];
}
}}}

The {{{@embedded}}} anotation marks the refereced Object {{{A.r}}} as being anonymous in the context of {{{A}}}. This annotation is not restricted to variables of anonymous classes. Also helper objects of regular classes can be embedded (declared anonymous in the context of their owner). 

By declaring an object embedded, a class guarantees that the embedded reference is the '''only reference''' to the embedded object (an that this reference '''cannot be {{{null}}}'''). With this guarantee, it should be possible for a JIT compliler to inline the embedded object.",hauma
2.0 Release,233,"Add a ""-local"" mode to jpc where it does not depend on the availability of JP runtime classes",jpc,1.09b,defect,normal,hauma,new,2005-02-25T08:06:51+01:00,2005-02-25T16:51:18+01:00,"To be able to compile KaRMI with {{{jpc}}} (see ticket:232), the JavaParty compiler must work without the JP runtime being available (because this requires KaRMI to be built first). A new option should be added to the compiler, where it does ""local"" compilation with only generating marshaling methods, but without transforming remote classes.
",hauma
2.0 Release,237,Transport code generation failure for classes without default super constructor,jpc,1.09c,defect,normal,hauma,new,2005-03-08T19:35:03+01:00,2005-03-08T19:35:03+01:00,"Wrong transport code is generated, when jpc tries to retrofit a serializable class that does extend a non-serializable class, which has no default constructor. 

When compiling the following example (with the -local option to prevent transport code generation for '''all''' classes (see: ticket:233)), jpc crashes with ""errors in generated code"":

{{{
class A {
    private int x;
    A(int x) {
        this.x = x;
    }
}

class B extends A implements java.io.Serializable {
    int y;
    B(int x, int y) {
        super(x);
        this.y = y;
    }
}
}}}

In such situation, no transport code should be generated at all, because it is impossible to generate transport code for {{{B}}} that marshals the complete state including the private instance variable {{{x}}} of superclass {{{A}}}.
",hauma
2.0 Release,238,Application startup fails in JavaParty for RMI,JP environment,1.07i,defect,normal,hauma,reopened,2005-03-09T15:10:10+01:00,2005-04-01T12:17:36+02:00,"When using the RMI compatibility version of JavaParty, application startup randomly fails with the following error:

{{{
invoking main() method failed: java.lang.reflect.InvocationTargetException. 
        caused by: java.rmi.NoSuchObjectException: no such object in table

java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0()
        at sun.reflect.NativeMethodAccessorImpl.invoke()
        at sun.reflect.DelegatingMethodAccessorImpl.invoke()
        at java.lang.reflect.Method.invoke()
        at jp.lang.JavaParty.invokeMain()
        at jp.lang.JavaParty.mainExec()
        at jp.lang.JavaParty.main()
Caused by: jp.lang.RemoteError: method BenchMethodRemote.getClassNode()
        at jp.bench.BenchMethodRemote.getClassNode()
        at jp.bench.BenchMethodCalls.main()
        ... 7 more
Caused by: java.rmi.NoSuchObjectException: no such object in table
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer()
        at sun.rmi.transport.StreamRemoteCall.executeCall()
        at sun.rmi.server.UnicastRef.invoke()
        at jp.bench.BenchMethodRemote_class_impl_Stub.getClassNode()
        at jp.bench.BenchMethodRemote.getClassNode()
        ... 8 more
}}}

The exception looks like RMI allows to garbage collect some remote object prematurely. Such exception should normally no be observable by an application. Is this a bug in RMI?
",hauma
2.0 Release,242,KaRMI GM technology hangs under heavy traffic,uka.gm,1.07i,defect,normal,hauma,new,2005-03-22T16:41:11+01:00,2005-03-22T16:41:11+01:00,"Under heavy traffic (especially during replicated object updates) a vitual machine locks up in the native method gmReceive(). The effect is reproducible with {{{jp.bench.BenchReplication -none -frozen}}}.
",hauma
2.0 Release,300,"Add option for inline vs pullout display, like the PageOutline macro",trac.tracnav,1.05e,enhancement,normal,moschny,new,2010-02-11T23:33:55+01:00,2013-05-26T07:23:23+02:00,"It would be a nice enhancement to allow content to be displayed inline, for use on e.g. the main page of a Trac site, like the `PageOutline` macro does.

{{{
[[PageOutline(2-5, Page Outline, inline)]]
}}}",ryano@…
2.0 Release,209,Duplicate transformation results for replicated classes,jpc,1.09b,defect,trivial,hauma,new,2005-01-31T13:19:30+01:00,2005-02-02T23:18:11+01:00,"Replicated classes are transformed twice. The first time, the
{{{replicated}}} modifier is transformed away, and the second time,
usages of remote classes within method bodies of replicated
classes are transformed. Both transformation phases produce source
code, which is saved. Since writing transformation results does not
overwrite files (for safety reasons), the compiler always issues
warning messages, when compiling replicated classes. 

Saving the transformation result directly after the replicated class
transformation step is required for debugging the transformation. See
issue [2561].
",hauma
2.1 Release,208,Redistribution of partially replicated graphs,uka.karo,1.08a,enhancement,normal,,new,2004-03-25T11:13:14+01:00,2005-03-12T18:30:39+01:00,"With partial replication (see ticket:171), the application may want to change the distribution of single objects or reorganize the distribution of a whole replicated object graph.

'''todo''' since 1.08a.
",Bernhard Haumacher (haui at haumacher dot de)
JPlater Release,184,Generation of marshaling routines does not respect user-provided implementations,uka.transport,1.08b,defect,major,,new,2004-03-25T11:13:14+01:00,2005-03-12T18:40:05+01:00,"The JavaParty compiler declares classes transportable and generates appropriate implementations of marshaling methods. Unfortunately, it does not respect user-provided implementations of the Transportable interface. Instead it generates duplicate methods and crashes when compiling generated sources.

=== Test ===
{{{
jp.test.TestStringTransport_SendPackage
}}}

=== Evaluation ===

There should be a possibility to specify user-defined marshaling routines in a more abstract way that is suitable for java.io serialization '''and''' uka.transport mashaling. These user-defined methods should only use the general interfaces java.io.Object{In|Out}put instead of the concrete implementations java.io.Object{In|Out}putStream and uka.transport.{Unm|M}arshalStream.",Bernhard Haumacher (haui at haumacher dot de)
JPlater Release,189,A CallHandler is unnecessarily associated with each connection.,uka.karmi,1.09a,defect,normal,,new,2004-08-11T16:43:00+02:00,2005-03-12T18:36:37+01:00,"Each connection in KaRMI is a call handler. This is not useful for each kind of connection (e.g. the connections used in the replicated wait process or the collective or exclusive update operations on replicated objects).

The calls {{{StreamClientConnection.openSendCall()}}} and {{{StreamClientConnection.closeReceiveResult()}}} register and unregister their corresponding call handler, if the connection's command identifier is {{{APP_CALL}}}. The registration of a call handler marks it responsible for handling incoming calls for the current distributed thread. Multiple registrations of call handlers for the same thread identifier build up a stack of call handlers that models the distributed stack of the current distributed thread. During unregistering a call handler, the top of this stack is removed. Obviously, the call handler registration is unnecessary for special remote operations that cannot cause a recursive call back.

If call handlers are not unregistered in exactly the reverse order of their registration, the distributed stack gets completely confused.

=== Workaround ===
If a thread opens more then one connection in {{{APP_CALL}}} mode, it has to close them in reverse order.
=== Solution ===
A new sort of connections is required that are not associated with a call handler. Or at least a new command identifier should be introduced that causes the remote operation to be executed in the local representative thread (like {{{APP_CALL}}}), but does not require a call handler registration, because no recursive call is possible. The new command identifier could be called {{{APP_CALL_NR}}} for non-recursive application calls.

'''todo''' since 1.09a.
","Bjoern-Oliver Hartmann, Bernhard Haumacher"
JPlater Release,229,Support wildcard type parameters in GJ.,gjc,1.07i,defect,normal,moschny,assigned,2005-02-24T20:15:15+01:00,2010-10-03T12:17:17+02:00,"GJ doesn't support bound and unbound wildcard type parameters such as {{{<? extends Tree>}}}, {{{<? super Tree>}}} and {{{<?>}}} at all. This inhibits the usage of GJ and thus of JavaParty in a Java5 environment, because some of the library classes make use of those wildcard type params.
",moschny
JPlater Release,232,KaRMI should be compilable with jpc for automatic generation of marshaling routines,uka.transport,1.09b,defect,normal,hauma,new,2005-02-25T08:01:34+01:00,2005-03-12T18:38:55+01:00,"Currently, KaRMI with uka.transport is compiled in three phases. It is first compiled with javac. This requires to replace all declarations of the {{{Transportable}}} interface with {{{java.io.Serializable}}}. The resulting class files are read with the ""transportc"" retrofitting tool that generates code snippets with implementations of the marshaling methods, which are included into the original source code. In a third phase, the enriched source files are recompiled with javac to produce the transportable class files.

The procedure described above doese not work for classes with marshaling annotations as described in ticket:179 and ticket:231, because they are not understood by javac and therefore not included into the resulting class files. Even if this could be improved with Java 5 meta data annotations, a preliminary solution is to directly use {{{jpc}}} to translate the KaRMI classes which should become transportable. This is necessary, because some of the KaRMI classes depend on the annotations.

",hauma
JPlater Release,236,Remove the interface uka.transport.Transportable,uka.transport,1.09c,defect,normal,hauma,new,2005-02-28T15:56:25+01:00,2005-03-12T18:37:47+01:00,"The property of being transportable is determined at runtime by checking the availability of a static field {{{TRANSPORT_DESCRIPTOR}}} in the class. This makes the interface {{{Transportable}}} superfluous.

Since, it is not safely possible to automatically promote each serializable class to transportable ones. If the class implements its own marshaling protocol using writeObject() methods, it may be difficult to convert those methods into marshaling methods valid for uka.transport. The property of being transportable is not in all cases inherited to subclasses. Since a subclass of a serializable class that was promoted to a transportable class could declare custom marshaling methods, the subclass can no longer be promoted to a transportable class. 
",hauma
JPlater Release,243,"Collective replication over GM requires ""server-less"" connections",uka.gm,1.09c,defect,normal,hauma,new,2005-03-24T14:53:37+01:00,2005-03-24T14:53:37+01:00,"In particular collective updates (see: ticket:157) are much slower when using KaRMI/GM instead of KaRMI/Ethernet. The reason seems to be that collective operations involve lots of (server-) threads for accumulating the required connections. Currently, a collective operation is mapped to multiple connections that normally serve as transport for remote method invocations. Each such connection is associated on one end with a server thread that is either responsible for executing the remote method invocation, or for forwarding the call to a waiting segment of a transparent distributed thread (see ticket:140).

The problem could be mitigated by introducing a second connection abstraction in KaRMI that is not automatically associated with a server thread. Such server-less connection can only be used, if two threads on both ends agree on a collective operation.
",hauma
JPlater Release,244,"Access restrictions for ""const"" variables are too tight",JP trafo,1.07i,defect,normal,hauma,new,2005-03-30T17:53:51+02:00,2005-03-30T17:53:51+02:00,"In ticket:118, replicated static constants of remote classes were introduced. To enable constants of array type, the unused ""const"" modifier was re-introduced to declare the whole (multi-dimensional) array to be constant. Access to arrays declared ""const"" is restricted to ensure that their values cannot be modified outside the static initializer. These restrictions completely forbid creating alias references to const arrays. This restriction is too tight. Instead, the const modifier should be usable for local variables as well. Aliasing a constant static array as local const variable is OK, since the compiler can track the further usage of such local variables and prevent modifications of them.
",hauma
JPlater Release,245,Embedded references have to be final,JP trafo,1.09b,defect,normal,hauma,new,2005-04-03T14:28:48+02:00,2005-04-03T14:28:48+02:00,"There is no way to detect the modification of an embedded reference (in the context of transparent replicated objects, see ticket:158), because the referenced object does not have an assigned identifier and the reference in the original and the copy point to different objects by default. The property of being final should be enforced by the compiler.
",hauma
JPlater Release,254,Compatibility JavaParty with JDK 1.5,gjc,,defect,normal,moschny,assigned,2006-02-24T16:14:27+01:00,2006-03-23T10:51:20+01:00,"Hello, i'am developping a middelware in order to perform javaparty's migration and perform the load of JVM and machines. The problem that i find is the compatibility of javaparty with JDK 1.5. So, i can compile and run with 1.4 but with the 1.5 i can't compile any file. Can you help me please or give me some informations wich can help me.
TRhanks",ali_bou59@…
JPlater Release,306,Redirect to Wiki Pages containing underscore doesn't work,trac.redirect,1.02,defect,normal,moschny,new,2011-01-01T21:49:08+01:00,2013-05-05T19:18:18+02:00,"[[redirect(wiki:__)]] doesn't work, although the wiki page '__' does exist. ",anonymous
