Skip to content

Commit

Permalink
MONDRIAN: Expand tabs, and update copyright notices.
Browse files Browse the repository at this point in the history
          Fix case-sensitive paths in build.xml, and a bad shell path in deployDoc.sh.

[git-p4: depot-paths = "//open/mondrian/": change = 3188]
  • Loading branch information
julianhyde committed Feb 11, 2005
1 parent 95a2ab9 commit b5b5168
Show file tree
Hide file tree
Showing 540 changed files with 43,391 additions and 43,358 deletions.
304 changes: 152 additions & 152 deletions LICENSE.html

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion bin/runtime.xml
Expand Up @@ -3,7 +3,7 @@
== This software is subject to the terms of the Common Public License
== Agreement, available at the following URL:
== http://www.opensource.org/licenses/cpl.html.
== (C) Copyright 2002-2003 Kana Software, Inc. and others.
== (C) Copyright 2002-2005 Kana Software, Inc. and others.
== All Rights Reserved.
== You must accept the terms of that agreement to use this software.
== jhyde, 20 September, 2002
Expand Down
6 changes: 3 additions & 3 deletions build.properties
Expand Up @@ -28,12 +28,12 @@ scp.path=/home/groups/m/mo/mondrian/htdocs

# Oracle
#oracle.home=G:/oracle/product/10.1.0/Db_1
#driver.classpath=${oracle.home}/jdbc/lib/classes12.zip
driver.classpath=/home/jhyde/open/mondrian/lib/ojdbc14.jar
# Thin JDBC connect string:
#mondrian.foodmart.jdbcURL=jdbc:oracle:thin:@//stilton:1521/orcl
mondrian.foodmart.jdbcURL=jdbc:oracle:thin:foodmart/foodmart@//stilton:1521/orcl
# OCI-style connect string:
#mondrian.foodmart.jdbcURL=jdbc:oracle:oci8:foodmart/foodmart@orcl
#mondrian.jdbcDrivers=oracle.jdbc.OracleDriver
mondrian.jdbcDrivers=oracle.jdbc.OracleDriver

# Microsoft Access
#mondrian.foodmart.jdbcURL=jdbc:odbc:MondrianFoodMart
Expand Down
8 changes: 4 additions & 4 deletions build.xml
Expand Up @@ -155,7 +155,7 @@ demo/mysql/FoodMartData.sql"/>

<!-- URL of the catalog definition. -->
<property name="mondrian.foodmart.catalogURL"
value="file:///${project.location}/${demo.dir}/FoodMart.xml"/>
value="file:${project.location}/${demo.dir}/FoodMart.xml"/>

<target name="help">
<echo>
Expand Down Expand Up @@ -675,11 +675,11 @@ VERSION.txt"/>
<link href="http://www.junit.org/junit/javadoc/3.8/"/>
<link href="http://java.sun.com/products/servlet/2.2/javadoc/"/>
</javadoc>
<copy file="${java.dir}/mondrian/xom/meta.xml"
<copy file="${java.dir}/mondrian/xom/Meta.xml"
todir="${javadoc.dir}/mondrian/xom"/>
<copy file="${java.dir}/mondrian/resource/resource.xml"
<copy file="${java.dir}/mondrian/resource/Resource.xml"
todir="${javadoc.dir}/mondrian/resource"/>
<copy file="${java.dir}/mondrian/olap/mondrian.xml"
<copy file="${java.dir}/mondrian/olap/Mondrian.xml"
todir="${javadoc.dir}/mondrian/olap"/>
</target>

Expand Down
4 changes: 2 additions & 2 deletions demo/FoodMart.xml
Expand Up @@ -355,7 +355,7 @@ lname
nameColumn="full_name" nullParentValue="0">
<Closure parentColumn="supervisor_id" childColumn="employee_id">
<Table name="employee_closure"/>
</Closure>
</Closure>
<Property name="Marital Status" column="marital_status"/>
<Property name="Position Title" column="position_title"/>
<Property name="Gender" column="gender"/>
Expand Down Expand Up @@ -557,7 +557,7 @@ fname + ' ' + lname
<MemberGrant member="[Store].[USA].[CA]" access="all"/>
<MemberGrant member="[Store].[USA].[CA].[Los Angeles]" access="none"/>
</HierarchyGrant>
<HierarchyGrant hierarchy="[Customers]" access="custom"
<HierarchyGrant hierarchy="[Customers]" access="custom"
topLevel="[Customers].[State Province]" bottomLevel="[Customers].[City]">
<MemberGrant member="[Customers].[USA].[CA]" access="all"/>
<MemberGrant member="[Customers].[USA].[CA].[Los Angeles]" access="none"/>
Expand Down
14 changes: 7 additions & 7 deletions demo/monrg/source/Birthday.java
Expand Up @@ -15,12 +15,12 @@ static void wishHappyBirthday(String name, int age) {
}
public static void main(String[] args) {
wishHappyBirthday("Fred", 33);
try {
wishHappyBirthday("Wilma", -3);
} catch (Throwable e) {
System.out.println("Received " + e);
}
BirthdayResource.setThreadLocale(Locale.FRANCE);
wishHappyBirthday("Pierre", 22);
try {
wishHappyBirthday("Wilma", -3);
} catch (Throwable e) {
System.out.println("Received " + e);
}
BirthdayResource.setThreadLocale(Locale.FRANCE);
wishHappyBirthday("Pierre", 22);
}
}
208 changes: 104 additions & 104 deletions doc/architecture.html

Large diffs are not rendered by default.

108 changes: 54 additions & 54 deletions doc/components.html
Expand Up @@ -26,105 +26,105 @@ <h2>Components</h2>
<i>to be written...</i>

<h2><a name="caching">Caching</a></h2>
<p>The various subsystems of mondrian have different memory requirements. Some
of them require a fixed amount of memory to do their work, whereas others can
exploit extra memory to increase their performance. This is an overview of how
<p>The various subsystems of mondrian have different memory requirements. Some
of them require a fixed amount of memory to do their work, whereas others can
exploit extra memory to increase their performance. This is an overview of how
the various subsystems use memory.</p>
<p><dfn><font face="Verdana">Caching</font></dfn> is a scheme whereby a
component uses extra memory when it is available in order to boost its
performance, and when times are hard, it releases memory with loss of
performance but with no loss of correctness. A cache&nbsp; is the use of extra
<p><dfn><font face="Verdana">Caching</font></dfn> is a scheme whereby a
component uses extra memory when it is available in order to boost its
performance, and when times are hard, it releases memory with loss of
performance but with no loss of correctness. A cache&nbsp; is the use of extra
memory when times are good, use varying amounts of memory.</p>
<p><dfn><font face="Verdana">Garbage collection</font></dfn> is carried out by
the Java VM to reclaim objects which are unreachable from 'live' objects. A
special construct called a <i>soft reference</i> allows objects to be
<p><dfn><font face="Verdana">Garbage collection</font></dfn> is carried out by
the Java VM to reclaim objects which are unreachable from 'live' objects. A
special construct called a <i>soft reference</i> allows objects to be
garbage-collected in hard times.</p>
<p>The garbage collector is not very discriminating in what it chooses to throw
out, so mondrian has its own caching strategy. There are several caches in the
system (described below), but they all of the objects in these caches are
<p>The garbage collector is not very discriminating in what it chooses to throw
out, so mondrian has its own caching strategy. There are several caches in the
system (described below), but they all of the objects in these caches are
registered in the singleton instance of
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.html">
class mondrian.rolap.CachePool</a> (currently there is just a single instance).
The cache pool doesn't actually store the objects, but handles all of the events
related to their life cycle in a cache. It weighs objects' cost (some function
involving their size in bytes and their usefulness, which is based upon how
recently they were used) and their benefit (the effort it would take to
class mondrian.rolap.CachePool</a> (currently there is just a single instance).
The cache pool doesn't actually store the objects, but handles all of the events
related to their life cycle in a cache. It weighs objects' cost (some function
involving their size in bytes and their usefulness, which is based upon how
recently they were used) and their benefit (the effort it would take to
re-compute them).</p>
<p>The cache pool is not infallible &mdash; in particular, it can not adapt to conditions where memory is in short supply &mdash; so uses
soft references, so that
<p>The cache pool is not infallible &mdash; in particular, it can not adapt to conditions where memory is in short supply &mdash; so uses
soft references, so that
the garbage collector can overrule its wisdom.</p>
<p>Cached objects must obey the following contract:</p>
<ol>
<li dir="ltr">
<p dir="ltr">They must implement
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.Cacheable.html">
interface mondrian.rolap.CachePool.Cacheable</a>, which includes methods to
measure objects' cost, benefit, record each time they are used, and tell them
interface mondrian.rolap.CachePool.Cacheable</a>, which includes methods to
measure objects' cost, benefit, record each time they are used, and tell them
to remove themselves from their cache.</li>
<li>They must call
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.html#register(Cacheable)">CachePool.register(Cacheable)</a>
either in their constructor or, in any case, before they are made visible in
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.html#register(Cacheable)">CachePool.register(Cacheable)</a>
either in their constructor or, in any case, before they are made visible in
their cache.</li>
<li>They they must call
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.html#registerDeath">
CachePool.unregister(Cacheable)</a> when they are removed from their cache and
CachePool.unregister(Cacheable)</a> when they are removed from their cache and
in their <code>finalize()</code> method.</li>
<li>They must be despensable: if they disappear, their subsystem will continue
to work correctly, albeit slower. A subsystem can declare an object to be
<li>They must be despensable: if they disappear, their subsystem will continue
to work correctly, albeit slower. A subsystem can declare an object to be
temporarily indispensable by calling
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/CachePool.html#pin(Cacheable,Collection)">CachePool.pin(Cacheable, Collection)</a> and then unpin it a short time later.</li>
<li dir="ltr">
<p dir="ltr">Their cache must reference them via soft references, so that they
<p dir="ltr">Their cache must reference them via soft references, so that they
are available for garbage collection. </li>
<li>Thread safety. Their cache must be thread-safe.</li>
</ol>
<p>If a cached object takes a significant time to initialize, it may not be
possible to construct it, register it, and initialize it within the same
synchronized section without unnacceptably reducing concurrency. If this is the
case, you should use phased construction. First construct and register the
object, but mark it 'under construction'. Then release the lock on the CachePool
and the object's cache, and continue initializing the object. Other threads will
be able to see the object, and should be able to wait until the object is
<p>If a cached object takes a significant time to initialize, it may not be
possible to construct it, register it, and initialize it within the same
synchronized section without unnacceptably reducing concurrency. If this is the
case, you should use phased construction. First construct and register the
object, but mark it 'under construction'. Then release the lock on the CachePool
and the object's cache, and continue initializing the object. Other threads will
be able to see the object, and should be able to wait until the object is
constructed. The method
<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/agg/Segment.html#waitUntilLoaded()">
Segment.waitUntilLoaded()</a> is an example of this.</p>
<p>The following objects are cached.</p>
<h3>1. Segment</h3>
<p>A Segment (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/agg/Segment.html">class
mondrian.rolap.agg.Segment</a>) is a collection of cell values parameterized by
<p>A Segment (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/agg/Segment.html">class
mondrian.rolap.agg.Segment</a>) is a collection of cell values parameterized by
a measure, and a set of (column, value) pairs. An example of a segment is</p>
<blockquote>
<p>(Unit sales, Gender = 'F', State in {'CA','OR'}, Marital Status = <i>
anything</i>)</p>
</blockquote>
<p>All segments over the same set of columns belong to an Aggregation, in this
<p>All segments over the same set of columns belong to an Aggregation, in this
case</p>
<blockquote>
<p>('Sales' Star, Gender, State, Marital Status)</p>
</blockquote>
<p>Note that different measures (in the same Star) occupy the same Aggregation.
<p>Note that different measures (in the same Star) occupy the same Aggregation.
Aggregations belong to the AggregationManager, a singleton.</p>
<p>Segments are pinned during the evaluation of a single MDX query. The query
evaluates the expressions twice. The first pass, it finds which cell values it
needs, pins the segments containing the ones which are already present (one
pin-count for each cell value used), and builds a cell request (<a href="api/mondrian/rolap/CachePool.Cacheable.html">class
mondrian.rolap.agg.CellRequest</a>) for those which are not present. It executes
the cell request to bring the required cell values into the cache, again,
pinned. Then it evalutes the query a second time, knowing that all cell values
<p>Segments are pinned during the evaluation of a single MDX query. The query
evaluates the expressions twice. The first pass, it finds which cell values it
needs, pins the segments containing the ones which are already present (one
pin-count for each cell value used), and builds a cell request (<a href="api/mondrian/rolap/CachePool.Cacheable.html">class
mondrian.rolap.agg.CellRequest</a>) for those which are not present. It executes
the cell request to bring the required cell values into the cache, again,
pinned. Then it evalutes the query a second time, knowing that all cell values
are available. Finally, it releases the pins.</p>
<h3>2. Member set</h3>
<p>A member set (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/SmartMemberReaderChildrenList.html">class
mondrian.rolap.SmartMemberReader.ChildrenList</a>) is a set of children of a
particular member. It belongs to a member reader (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/SmartMemberReader.html">class
<p>A member set (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/SmartMemberReaderChildrenList.html">class
mondrian.rolap.SmartMemberReader.ChildrenList</a>) is a set of children of a
particular member. It belongs to a member reader (<a href="http://mondrian.sourceforge.net/api/mondrian/rolap/SmartMemberReader.html">class
mondrian.rolap.SmartMemberReader</a>).</p>
<h3>3. Schema</h3>
<p>Schemas (<a href="api/mondrian/rolap/RolapSchema.html">class
<p>Schemas (<a href="api/mondrian/rolap/RolapSchema.html">class
mondrian.rolap.RolapSchema</a>) are cached in
<a href="api/mondrian/rolap/RolapStar.Pool.html">class
mondrian.rolap.RolapSchema.Pool</a>, which is a singleton (todo: use soft
<a href="api/mondrian/rolap/RolapStar.Pool.html">class
mondrian.rolap.RolapSchema.Pool</a>, which is a singleton (todo: use soft
references). The cache key is the URL which the schema was loaded from.</p>
<h3>4. Star schemas</h3>
<p>Star schemas (<a href="api/mondrian/rolap/RolapStar.html">class
<p>Star schemas (<a href="api/mondrian/rolap/RolapStar.html">class
mondrian.rolap.RolapStar</a>) are stored in the static member <code>
RolapStar.stars</code> (todo: use soft references), and accessed via <code>
RolapStar.getOrCreateStar(RolapSchema, MondrianDef.Relation)</code>.</p>
Expand All @@ -146,6 +146,6 @@ <h3>4. Star schemas</h3>
</td>
</tr>
</table>

</body>
</html>
2 changes: 1 addition & 1 deletion doc/deployDoc.sh 100644 → 100755
@@ -1,4 +1,4 @@
#!/usr/bin/sh
#!/bin/sh
# $Id$
# This software is subject to the terms of the Common Public License
# Agreement, available at the following URL:
Expand Down
2 changes: 1 addition & 1 deletion doc/design.html
Expand Up @@ -55,6 +55,6 @@ <h3>Caching</h3>
</td>
</tr>
</table>

</body>
</html>

0 comments on commit b5b5168

Please sign in to comment.