I can't reproduce this. What version of the cassandra deb are you using, exactly, and why are you symlinking or copying jna.jar into /usr/share/cassandra?  The initscript should be adding /usr/sahre/java/jna.jar to the classpath, and that should be all you need.

The failure you see with o.a.c.cache.FreeableMemory is not because the jre can't find the class, it's just that it can't initialize the class (because it needs JNA, and it can't find JNA).

p

On Wed, Nov 2, 2011 at 4:42 AM, Peter Tillotson <slatemine@yahoo.co.uk> wrote:
see below
 * JAVA_HOME=/usr/lib/jvm/java-6-openjdk 
works
--
Reading the documentation over at Datastax
“The Debian and RPM packages of Cassandra install JNA automatically”

And indeed the Debian package depends on jna, and the /etc/init.d/cassandra looks as though in adds /usr/share/java/jna.jar to the classpath, and here is the but. 

If I copy or symlink jna.jar into:
 * /usr/share/cassandra
 * /usr/share/cassandra/lib
Whenever a column family initialises I get:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.cassandra.cache.FreeableMemory

This suggests to me that:
 1) By default, for me at least, in Debian jna.jar is not on the classpath
 2) There is an additional classpath issue
     jar -tf apache-cassandra.jar | grep "FreeableMemory" succeeds

I'm running on: 
 * Ubuntu 10.04 x64
 * JAVA_HOME=/usr/lib/jvm/java-6-sun

Full stack traces:
java.lang.NoClassDefFoundError: Could not initialize class com.sun.jna.Native
        at com.sun.jna.Pointer.<clinit>(Pointer.java:42)
        at org.apache.cassandra.cache.SerializingCache.serialize(SerializingCache.java:92)
        at org.apache.cassandra.cache.SerializingCache.put(SerializingCache.java:154)
        at org.apache.cassandra.cache.InstrumentingCache.put(InstrumentingCache.java:63)
        at org.apache.cassandra.db.ColumnFamilyStore.cacheRow(ColumnFamilyStore.java:1150)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1174)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1131)
        at org.apache.cassandra.db.Table.getRow(Table.java:378)
        at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:61)
        at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:797)
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1265)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
 INFO [pool-1-thread-1] 2011-11-02 10:26:46,738 Memtable.java (line 177) CFS(Keyspace='BigSet', ColumnFamily='theKeys') liveRatio is 18.20062753783684 (just-counted was 16.960966424636872).  calculation took 408ms for 8169 columns
ERROR [ReadStage:33] 2011-11-02 10:26:56,599 AbstractCassandraDaemon.java (line 133) Fatal exception in thread Thread[ReadStage:33,5,main]
java.lang.NoClassDefFoundError: Could not initialize class org.apache.cassandra.cache.FreeableMemory
        at org.apache.cassandra.cache.SerializingCache.serialize(SerializingCache.java:92)
        at org.apache.cassandra.cache.SerializingCache.put(SerializingCache.java:154)
        at org.apache.cassandra.cache.InstrumentingCache.put(InstrumentingCache.java:63)
        at org.apache.cassandra.db.ColumnFamilyStore.cacheRow(ColumnFamilyStore.java:1150)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1174)
        at org.apache.cassandra.db.ColumnFamilyStore.getColumnFamily(ColumnFamilyStore.java:1131)
        at org.apache.cassandra.db.Table.getRow(Table.java:378)
        at org.apache.cassandra.db.SliceFromReadCommand.getRow(SliceFromReadCommand.java:61)
        at org.apache.cassandra.service.StorageProxy$LocalReadRunnable.runMayThrow(StorageProxy.java:797)
        at org.apache.cassandra.service.StorageProxy$DroppableRunnable.run(StorageProxy.java:1265)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)