'. '

FriendDependencies

From APIDesign

(Difference between revisions)
Jump to: navigation, search
Line 1: Line 1:
-
Concept of [[friends]] is almost essential for [[Modularity]]. Not all exported [[API]]s are stable enough, not all of them are ready for public consumption. In such case one needs to create a [[module]], define its [[API]], but restrict list of '''friends''' that may access it.
+
Concept of '''friends''' is almost essential for [[Modularity]]. Not all exported [[API]]s are stable enough, not all of them are ready for public consumption. In such case one needs to create a [[module]], define its [[API]], but restrict list of '''friends''' that may access it.
== [[NetBeans]] [[Friends]] Support ==
== [[NetBeans]] [[Friends]] Support ==

Revision as of 13:47, 19 September 2011

Concept of friends is almost essential for Modularity. Not all exported APIs are stable enough, not all of them are ready for public consumption. In such case one needs to create a module, define its API, but restrict list of friends that may access it.

NetBeans Friends Support

The NetBeans Runtime Container has first class support for friends. Inside manifest one can enumerate the names of modules that may access given API. Surprisingly, this list of friends is an API of the module itself. In case you change the list, you are changing the module API and you need to properly version such change.

Recently we had to deal with a bug Template:Iz - suddenly one module was getting NoClassDefFoundError when trying to access a Lexer class from another module. The Lexer class existed since the creation of its module, so it was a mistery for all of us. How could a class not be found, if it exists for ages?

Is the installation corrupted? was our first question. No, it was not. We received the same report from multiple users. Thus we could rule out random error. Something in our shared infrastructure must get broken.

Is there are problem in initialized? is a second question to ask. Sometimes, when a class throws an exception from one of its static initializers, it becomes unavailable for the JVM. Later, if any other class references the broken one, a NoClassDefFoundError is generated at very unexpected places. However this was not the problem either. There was no other exception in the log files!

A complete mistery.


TBD describe what friend dependencies are. Talk about the sad case of bug #201021

Personal tools
buy