minor edits

This commit is contained in:
jboner 2009-08-05 15:47:08 +02:00
parent e11fa7bf33
commit 59fa40b0a1
6 changed files with 349 additions and 583 deletions

296
akka.iws
View file

@ -6,17 +6,12 @@
</component> </component>
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="212ccd86-01aa-4780-a2f0-0d130be5abd2" name="Test" comment="Test"> <list default="true" id="212ccd86-01aa-4780-a2f0-0d130be5abd2" name="Test" comment="Test">
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/akka-kernel.iml" afterPath="$PROJECT_DIR$/kernel/akka-kernel.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/config/akka-reference.conf" afterPath="$PROJECT_DIR$/config/akka-reference.conf" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/akka-fun-test-java.iml" afterPath="$PROJECT_DIR$/fun-test-java/akka-fun-test-java.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/pom.xml" afterPath="$PROJECT_DIR$/kernel/pom.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/Kernel.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/Kernel.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/samples-scala/akka-samples-scala.iml" afterPath="$PROJECT_DIR$/samples-scala/akka-samples-scala.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/cassandra-0.4.0-dev.jar" afterPath="$PROJECT_DIR$/lib/cassandra-0.4.0-dev.jar" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/samples-lift/akka-samples-lift.iml" afterPath="$PROJECT_DIR$/samples-lift/akka-samples-lift.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/embedded-repo/org/apache/cassandra/cassandra/0.4.0-dev/cassandra-0.4.0-dev.jar" afterPath="$PROJECT_DIR$/embedded-repo/org/apache/cassandra/cassandra/0.4.0-dev/cassandra-0.4.0-dev.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/akka.ipr" afterPath="$PROJECT_DIR$/akka.ipr" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/samples-scala/src/main/scala/SimpleService.scala" afterPath="$PROJECT_DIR$/samples-scala/src/main/scala/SimpleService.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/akka.iws" afterPath="$PROJECT_DIR$/akka.iws" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/akka.iws" afterPath="$PROJECT_DIR$/akka.iws" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/Pool.scala" />
</list> </list>
<list readonly="true" id="6e842704-fac6-40e9-8a67-d02385f87db9" name="Default" comment="&#10;# Brief commit desciption here&#10;&#10;# Full commit description here (comment lines starting with '#' will not be included)&#10;&#10;" /> <list readonly="true" id="6e842704-fac6-40e9-8a67-d02385f87db9" name="Default" comment="&#10;# Brief commit desciption here&#10;&#10;# Full commit description here (comment lines starting with '#' will not be included)&#10;&#10;" />
<ignored path=".idea/workspace.xml" /> <ignored path=".idea/workspace.xml" />
@ -152,93 +147,10 @@
<component name="FileColors" enabled="false" enabledForTabs="false" /> <component name="FileColors" enabled="false" enabledForTabs="false" />
<component name="FileEditorManager"> <component name="FileEditorManager">
<leaf> <leaf>
<file leaf-file-name="SimpleService.scala" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="CassandraStorage.scala" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/samples-scala/src/main/scala/SimpleService.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="1" column="0" selection-start="4" selection-end="4" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="akka-reference.conf" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/config/akka-reference.conf">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="3" selection-start="474" selection-end="474" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ActiveObject.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="226" column="65" selection-start="11072" selection-end="11072" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Kernel.scala" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/Kernel.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="133" column="0" selection-start="5539" selection-end="5539" vertical-scroll-proportion="0.3678161">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ClassLoader.class" pinned="false" current="false" current-in-tab="false">
<entry file="jar:///System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/../Classes/classes.jar!/java/lang/ClassLoader.class">
<provider selected="true" editor-type-id="text-editor">
<state line="117" column="31" selection-start="6805" selection-end="6805" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="CassandraStorage.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="28" column="7" selection-start="779" selection-end="779" vertical-scroll-proportion="0.0"> <state line="298" column="128" selection-start="13007" selection-end="13007" vertical-scroll-proportion="0.5060729">
<folding>
<marker date="1249477860000" expanded="true" signature="106:114" placeholder="..." />
</folding>
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Configgy.class" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$MAVEN_REPOSITORY$/net/lag/configgy/1.3/configgy-1.3.jar!/net/lag/configgy/Configgy.class">
<provider selected="true" editor-type-id="text-editor">
<state line="17" column="27" selection-start="1329" selection-end="1350" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Boot.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/Boot.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="24" column="31" selection-start="741" selection-end="757" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Reactor.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/reactor/Reactor.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="0" selection-start="1056" selection-end="1056" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="ActiveObjectGuiceConfiguratorTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="23" column="77" selection-start="822" selection-end="822" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
@ -258,7 +170,6 @@
<option name="changedFiles"> <option name="changedFiles">
<list> <list>
<option value="$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializable.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializable.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/reactor/MessageDispatcherBase.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/reactor/MessageDispatcherBase.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala" /> <option value="$PROJECT_DIR$/kernel/src/test/scala/EventBasedThreadPoolDispatcherTest.scala" />
@ -273,6 +184,7 @@
<option value="$PROJECT_DIR$/config/akka-reference.conf" /> <option value="$PROJECT_DIR$/config/akka-reference.conf" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/Kernel.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/Kernel.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala" />
</list> </list>
</option> </option>
</component> </component>
@ -496,184 +408,6 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="aspectwerkz-nodeps-jdk5-2.1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="aspectwerkz-nodeps-jdk5-2.1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="proxy" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="aspectwerkz-nodeps-jdk5-2.1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="proxy" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Proxy" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="aspectwerkz-nodeps-jdk5-2.1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="aspectwerkz" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: net.lag:configgy:1.3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="configgy-1.3.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: net.lag:configgy:1.3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="configgy-1.3.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="configgy" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="akka" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="akka-kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Maven: net.lag:configgy:1.3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="configgy-1.3.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="lag" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="akka" /> <option name="myItemId" value="akka" />
@ -2439,15 +2173,6 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="28" column="7" selection-start="779" selection-end="779" vertical-scroll-proportion="0.0">
<folding>
<marker date="1249477860000" expanded="true" signature="106:114" placeholder="..." />
</folding>
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/samples-scala/src/main/scala/SimpleService.scala"> <entry file="file://$PROJECT_DIR$/samples-scala/src/main/scala/SimpleService.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="1" column="0" selection-start="4" selection-end="4" vertical-scroll-proportion="0.0"> <state line="1" column="0" selection-start="4" selection-end="4" vertical-scroll-proportion="0.0">
@ -2490,6 +2215,13 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraStorage.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="298" column="128" selection-start="13007" selection-end="13007" vertical-scroll-proportion="0.5060729">
<folding />
</state>
</provider>
</entry>
</component> </component>
<component name="masterDetails"> <component name="masterDetails">
<option name="states"> <option name="states">

View file

@ -45,6 +45,7 @@
<orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" /> <orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" />
<orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" /> <orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" /> <orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" />

View file

@ -48,11 +48,6 @@
<orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" /> <orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" />
<orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" /> <orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging-api:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.6" level="project" />
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" /> <orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-core-asl:1.1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-core-asl:1.1.0" level="project" />
@ -66,6 +61,7 @@
<orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" /> <orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" />
<orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" />
@ -82,6 +78,10 @@
<orderEntry type="library" exported="" name="Maven: com.sun.jersey:jersey-json:1.1.1-ea" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.jersey:jersey-json:1.1.1-ea" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: stax:stax-api:1.0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.12" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" /> <orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" />

View file

@ -9,6 +9,7 @@ import java.io.{File, Flushable, Closeable}
import kernel.util.Logging import kernel.util.Logging
import serialization.{Serializer, Serializable, SerializationProtocol} import serialization.{Serializer, Serializable, SerializationProtocol}
import org.apache.cassandra.db._
import org.apache.cassandra.config.DatabaseDescriptor import org.apache.cassandra.config.DatabaseDescriptor
import org.apache.cassandra.service._ import org.apache.cassandra.service._
@ -32,6 +33,8 @@ object CassandraStorage extends Logging {
val VECTOR_COLUMN_FAMILY = "vector" val VECTOR_COLUMN_FAMILY = "vector"
val REF_COLUMN_FAMILY = "ref:item" val REF_COLUMN_FAMILY = "ref:item"
val DEFAULT_CONSISTENCY_LEVEL = 10 //What should the default be?
val IS_ASCENDING = true val IS_ASCENDING = true
import kernel.Kernel.config import kernel.Kernel.config
@ -39,7 +42,7 @@ object CassandraStorage extends Logging {
val CASSANDRA_SERVER_HOSTNAME = config.getString("akka.storage.cassandra.hostname", "localhost") val CASSANDRA_SERVER_HOSTNAME = config.getString("akka.storage.cassandra.hostname", "localhost")
val CASSANDRA_SERVER_PORT = config.getInt("akka.storage.cassandra.port", 9160) val CASSANDRA_SERVER_PORT = config.getInt("akka.storage.cassandra.port", 9160)
val BLOCKING_CALL = if (config.getBool("akka.storage.cassandra.blocking", true)) 0 val BLOCKING_CALL = if (config.getBool("akka.storage.cassandra.blocking", true)) 0
else 1 else 1
@volatile private[this] var isRunning = false @volatile private[this] var isRunning = false
private[this] val protocol: Protocol = { private[this] val protocol: Protocol = {
@ -51,13 +54,13 @@ object CassandraStorage extends Logging {
} }
} }
private[this] var sessions: Option[CassandraSessionPool[_]] = None private[this] var sessions: Option[CassandraSessionPool[_]] = None
def start = synchronized { def start = synchronized {
if (!isRunning) { if (!isRunning) {
try { try {
sessions = Some(new CassandraSessionPool(StackPool(SocketProvider(CASSANDRA_SERVER_HOSTNAME, CASSANDRA_SERVER_PORT)), protocol)) sessions = Some(new CassandraSessionPool(StackPool(SocketProvider(CASSANDRA_SERVER_HOSTNAME, CASSANDRA_SERVER_PORT)), protocol, DEFAULT_CONSISTENCY_LEVEL))
log.info("Cassandra persistent storage has started up successfully"); log.info("Cassandra persistent storage has started up successfully");
} catch { } catch {
case e => case e =>
@ -67,21 +70,21 @@ object CassandraStorage extends Logging {
isRunning isRunning
} }
} }
def stop = synchronized { def stop = synchronized {
if (isRunning && sessions.isDefined) sessions.get.close if (isRunning && sessions.isDefined) sessions.get.close
} }
//implicit def strToBytes(s: String) = s.getBytes("UTF-8") //implicit def strToBytes(s: String) = s.getBytes("UTF-8")
/* /*
def insertRefStorageFor(name: String, element: AnyRef) = sessions.withSession { session => { def insertRefStorageFor(name: String, element: AnyRef) = sessions.withSession { session => {
val user_id = "1" val user_id = "1"
session ++| ("users", user_id, "base_attributes:name", "Lord Foo Bar", false) session ++| ("users", user_id, "base_attributes:name", "Lord Foo Bar", false)
session ++| ("users", user_id, "base_attributes:age", "24", false) session ++| ("users", user_id, "base_attributes:age", "24", false)
for( i <- session / ("users", user_id, "base_attributes", None, None).toList) println(i) for( i <- session / ("users", user_id, "base_attributes", None, None).toList) println(i)
}} }}
*/ */
// =============================================================== // ===============================================================
// For Ref // For Ref
// =============================================================== // ===============================================================
@ -89,23 +92,23 @@ object CassandraStorage extends Logging {
def insertRefStorageFor(name: String, element: String) = if (sessions.isDefined) { def insertRefStorageFor(name: String, element: String) = if (sessions.isDefined) {
sessions.get.withSession { sessions.get.withSession {
_ ++| ( _ ++| (
TABLE_NAME, TABLE_NAME,
name, name,
REF_COLUMN_FAMILY, REF_COLUMN_FAMILY,
element, element,
System.currentTimeMillis, System.currentTimeMillis,
BLOCKING_CALL) BLOCKING_CALL)
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getRefStorageFor(name: String): Option[String] = if (sessions.isDefined) { def getRefStorageFor(name: String): Option[String] = if (sessions.isDefined) {
try { try {
val column = sessions.get.withSession { _ | (TABLE_NAME, name, REF_COLUMN_FAMILY) } val column = sessions.get.withSession {_ | (TABLE_NAME, name, REF_COLUMN_FAMILY)}
Some(column.value) Some(column.value)
} catch { } catch {
case e => case e =>
e.printStackTrace e.printStackTrace
None None
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
@ -116,32 +119,32 @@ object CassandraStorage extends Logging {
def insertVectorStorageEntryFor(name: String, element: String) = if (sessions.isDefined) { def insertVectorStorageEntryFor(name: String, element: String) = if (sessions.isDefined) {
sessions.get.withSession { sessions.get.withSession {
_ ++| ( _ ++| (
TABLE_NAME, TABLE_NAME,
name, name,
VECTOR_COLUMN_FAMILY + ":" + getVectorStorageSizeFor(name), VECTOR_COLUMN_FAMILY + ":" + getVectorStorageSizeFor(name),
element, element,
System.currentTimeMillis, System.currentTimeMillis,
BLOCKING_CALL) BLOCKING_CALL)
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getVectorStorageEntryFor(name: String, index: Int): String = if (sessions.isDefined) { def getVectorStorageEntryFor(name: String, index: Int): String = if (sessions.isDefined) {
try { try {
val column = sessions.get.withSession { _ | (TABLE_NAME, name, VECTOR_COLUMN_FAMILY + ":" + index) } val column = sessions.get.withSession {_ | (TABLE_NAME, name, VECTOR_COLUMN_FAMILY + ":" + index)}
column.value column.value
} catch { } catch {
case e => case e =>
e.printStackTrace e.printStackTrace
throw new NoSuchElementException(e.getMessage) throw new NoSuchElementException(e.getMessage)
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getVectorStorageRangeFor(name: String, start: Int, count: Int): List[String] = if (sessions.isDefined) { def getVectorStorageRangeFor(name: String, start: Int, count: Int): List[String] = if (sessions.isDefined) {
sessions.get.withSession { _ / (TABLE_NAME, name, VECTOR_COLUMN_FAMILY, IS_ASCENDING, count) }.map(_.value) sessions.get.withSession {_ / (TABLE_NAME, name, VECTOR_COLUMN_FAMILY, IS_ASCENDING, count)}.map(_.value)
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getVectorStorageSizeFor(name: String): Int = if (sessions.isDefined) { def getVectorStorageSizeFor(name: String): Int = if (sessions.isDefined) {
sessions.get.withSession { _ |# (TABLE_NAME, name, VECTOR_COLUMN_FAMILY) } sessions.get.withSession {_ |# (TABLE_NAME, name, VECTOR_COLUMN_FAMILY)}
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
// =============================================================== // ===============================================================
@ -151,12 +154,12 @@ object CassandraStorage extends Logging {
def insertMapStorageEntryFor(name: String, key: String, value: String) = if (sessions.isDefined) { def insertMapStorageEntryFor(name: String, key: String, value: String) = if (sessions.isDefined) {
sessions.get.withSession { sessions.get.withSession {
_ ++| ( _ ++| (
TABLE_NAME, TABLE_NAME,
name, name,
MAP_COLUMN_FAMILY + ":" + key, MAP_COLUMN_FAMILY + ":" + key,
value, value,
System.currentTimeMillis, System.currentTimeMillis,
BLOCKING_CALL) BLOCKING_CALL)
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
@ -170,17 +173,17 @@ object CassandraStorage extends Logging {
} }
sessions.get.withSession { sessions.get.withSession {
_ ++| ( _ ++| (
new batch_mutation_t( new batch_mutation_t(
TABLE_NAME, TABLE_NAME,
name, name,
columns), columns),
BLOCKING_CALL) BLOCKING_CALL)
} }
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getMapStorageEntryFor(name: String, key: String): Option[String] = if (sessions.isDefined) { def getMapStorageEntryFor(name: String, key: String): Option[String] = if (sessions.isDefined) {
try { try {
val column = sessions.get.withSession { _ | (TABLE_NAME, name, MAP_COLUMN_FAMILY + ":" + key) } val column = sessions.get.withSession {_ | (TABLE_NAME, name, MAP_COLUMN_FAMILY + ":" + key)}
Some(column.value) Some(column.value)
} catch { } catch {
case e => case e =>
@ -201,15 +204,15 @@ object CassandraStorage extends Logging {
*/ */
def getMapStorageSizeFor(name: String): Int = if (sessions.isDefined) { def getMapStorageSizeFor(name: String): Int = if (sessions.isDefined) {
sessions.get.withSession { _ |# (TABLE_NAME, name, MAP_COLUMN_FAMILY) } sessions.get.withSession {_ |# (TABLE_NAME, name, MAP_COLUMN_FAMILY)}
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def removeMapStorageFor(name: String) = if (sessions.isDefined) { def removeMapStorageFor(name: String) = if (sessions.isDefined) {
sessions.get.withSession { _ -- (TABLE_NAME, name, MAP_COLUMN_FAMILY, System.currentTimeMillis, BLOCKING_CALL) } sessions.get.withSession {_ -- (TABLE_NAME, name, MAP_COLUMN_FAMILY, System.currentTimeMillis, BLOCKING_CALL)}
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
def getMapStorageRangeFor(name: String, start: Int, count: Int): List[Tuple2[String, String]] = if (sessions.isDefined) { def getMapStorageRangeFor(name: String, start: Int, count: Int): List[Tuple2[String, String]] = if (sessions.isDefined) {
sessions.get.withSession { _ / (TABLE_NAME, name, MAP_COLUMN_FAMILY, IS_ASCENDING, count) }.toArray.toList.asInstanceOf[List[Tuple2[String, String]]] sessions.get.withSession {_ / (TABLE_NAME, name, MAP_COLUMN_FAMILY, IS_ASCENDING, count)}.toArray.toList.asInstanceOf[List[Tuple2[String, String]]]
} else throw new IllegalStateException("CassandraStorage is not started") } else throw new IllegalStateException("CassandraStorage is not started")
} }
@ -217,80 +220,113 @@ trait CassandraSession extends Closeable with Flushable {
import scala.collection.jcl.Conversions._ import scala.collection.jcl.Conversions._
import org.scala_tools.javautils.Imports._ import org.scala_tools.javautils.Imports._
private implicit def null2Option[T](t: T): Option[T] = if(t != null) Some(t) else None private implicit def null2Option[T](t: T): Option[T] = if (t != null) Some(t) else None
protected val client: Cassandra.Client protected val client: Cassandra.Client
val obtainedAt: Long val obtainedAt: Long
val consistencyLevel: Int
def /(tableName: String, key: String, columnParent: String, start: Option[Int],end: Option[Int]): List[column_t] =
client.get_slice(tableName, key, columnParent, start.getOrElse(-1),end.getOrElse(-1)).toList
def /(tableName: String, key: String, columnParent: String, colNames: List[String]): List[column_t] =
client.get_slice_by_names(tableName, key, columnParent, colNames.asJava ).toList
def |(tableName: String, key: String, colPath: String): Option[column_t] = def /(keyspace: String, key: String, columnParent: ColumnParent, start: Array[Byte], end: Array[Byte], ascending: Boolean, count: Int): List[Column] =
client.get_column(tableName, key, colPath) /(keyspace, key, columnParent, start, end, ascending, count, consistencyLevel)
def |#(tableName: String, key: String, columnParent: String): Int =
client.get_column_count(tableName, key, columnParent)
def ++|(tableName: String, key: String, columnPath: String, cellData: Array[Byte], timestamp: Long, block: Int) =
client.insert(tableName, key, columnPath, cellData,timestamp,block)
def ++|(tableName: String, key: String, columnPath: String, cellData: Array[Byte], block: Int) =
client.insert(tableName,key,columnPath,cellData,obtainedAt,block)
def ++|(batch: batch_mutation_t, block: Int) =
client.batch_insert(batch, block)
def --(tableName: String, key: String, columnPathOrParent: String, timestamp: Long, block: Int) =
client.remove(tableName, key, columnPathOrParent, timestamp, block)
def --(tableName: String, key: String, columnPathOrParent: String, block: Int) =
client.remove(tableName, key, columnPathOrParent, obtainedAt, block)
def /@(tableName: String, key: String, columnParent: String, timestamp: Long): List[column_t] =
client.get_columns_since(tableName, key, columnParent, timestamp).toList
def /^(tableName: String, key: String, columnFamily: String, start: Option[Int], end: Option[Int], count: Int ): List[superColumn_t] =
client.get_slice_super(tableName, key,columnFamily, start.getOrElse(-1), end.getOrElse(-1)).toList //TODO upgrade thrift interface to support count
def /^(tableName: String, key: String, columnFamily: String, superColNames: List[String]): List[superColumn_t] = def /(keyspace: String, key: String, columnParent: ColumnParent, start: Array[Byte], end: Array[Byte], ascending: Boolean, count: Int, consistencyLevel: Int): List[Column] =
client.get_slice_super_by_names(tableName, key, columnFamily, superColNames.asJava).toList client.get_slice(keyspace, key, columnParent, start, end, ascending, count, consistencyLevel).toList
def |^(tableName: String, key: String, superColumnPath: String): Option[superColumn_t] = def /(keyspace: String, key: String, columnParent: ColumnParent, colNames: List[Array[Byte]]): List[Column] =
client.get_superColumn(tableName,key,superColumnPath) /(keyspace, key, columnParent, colNames, consistencyLevel)
def ++|^ (batch: batch_mutation_super_t, block: Int) = def /(keyspace: String, key: String, columnParent: ColumnParent, colNames: List[Array[Byte]], consistencyLevel: Int): List[Column] =
client.batch_insert_superColumn(batch, block) client.get_slice_by_names(keyspace, key, columnParent, colNames.asJava, consistencyLevel).toList
def keys(tableName: String, startsWith: String, stopsAt: String, maxResults: Option[Int]): List[String] = def |(keyspace: String, key: String, colPath: ColumnPath): Option[Column] =
client.get_key_range(tableName, startsWith, stopsAt, maxResults.getOrElse(-1)).toList |(keyspace, key, colPath, consistencyLevel)
def property(name: String): String = client.getStringProperty(name) def |(keyspace: String, key: String, colPath: ColumnPath, consistencyLevel: Int): Option[Column] =
def properties(name: String): List[String] = client.getStringListProperty(name).toList client.get_column(keyspace, key, colPath, consistencyLevel)
def describeTable(tableName: String) = client.describeTable(tableName)
def |#(keyspace: String, key: String, columnParent: ColumnParent): Int =
def ?(query: String) = client.executeQuery(query) |#(keyspace, key, columnParent, consistencyLevel)
def |#(keyspace: String, key: String, columnParent: ColumnParent, consistencyLevel: Int): Int =
client.get_column_count(keyspace, key, columnParent, consistencyLevel)
def ++|(keyspace: String, key: String, columnPath: ColumnPath, value: Array[Byte]): Unit =
++|(keyspace, key, columnPath, value, obtainedAt, consistencyLevel)
def ++|(keyspace: String, key: String, columnPath: ColumnPath, value: Array[Byte], timestamp: Long): Unit =
++|(keyspace, key, columnPath, value, timestamp, consistencyLevel)
def ++|(keyspace: String, key: String, columnPath: ColumnPath, value: Array[Byte], timestamp: Long, consistencyLevel: Int) =
client.insert(keyspace, key, columnPath, value, timestamp, consistencyLevel)
def ++|(keyspace: String, batch: BatchMutation): Unit =
++|(keyspace, batch, consistencyLevel)
def ++|(keyspace: String, batch: BatchMutation, consistencyLevel: Int): Unit =
client.batch_insert(keyspace, batch, consistencyLevel)
def --(keyspace: String, key: String, columnPathOrParent: ColumnPathOrParent, timestamp: Long): Unit =
--(keyspace, key, columnPathOrParent, timestamp, consistencyLevel)
def --(keyspace: String, key: String, columnPathOrParent: ColumnPathOrParent, timestamp: Long, consistencyLevel: Int): Unit =
client.remove(keyspace, key, columnPathOrParent, timestamp, consistencyLevel)
def /^(keyspace: String, key: String, columnFamily: String, start: Array[Byte], end: Array[Byte], ascending: Boolean, count: Int): List[SuperColumn] =
/^(keyspace, key, columnFamily, start, end, ascending, count, consistencyLevel)
def /^(keyspace: String, key: String, columnFamily: String, start: Array[Byte], end: Array[Byte], ascending: Boolean, count: Int, consistencyLevel: Int): List[SuperColumn] =
client.get_slice_super(keyspace, key, columnFamily, start, end, ascending, count, consistencyLevel).toList
def /^(keyspace: String, key: String, columnFamily: String, superColNames: List[Array[Byte]]): List[SuperColumn] =
/^(keyspace, key, columnFamily, superColNames, consistencyLevel)
def /^(keyspace: String, key: String, columnFamily: String, superColNames: List[Array[Byte]], consistencyLevel: Int): List[SuperColumn] =
client.get_slice_super_by_names(keyspace, key, columnFamily, superColNames.asJava, consistencyLevel).toList
def |^(keyspace: String, key: String, superColumnPath: SuperColumnPath): Option[SuperColumn] =
|^(keyspace, key, superColumnPath, consistencyLevel)
def |^(keyspace: String, key: String, superColumnPath: SuperColumnPath, consistencyLevel: Int): Option[SuperColumn] =
client.get_super_column(keyspace, key, superColumnPath, consistencyLevel)
def ++|^(keyspace: String, batch: BatchMutationSuper): Unit =
++|^(keyspace, batch, consistencyLevel)
def ++|^(keyspace: String, batch: BatchMutationSuper, consistencyLevel: Int): Unit =
client.batch_insert_super_column(keyspace, batch, consistencyLevel)
def keys(keyspace: String, columnFamily: String, startsWith: String, stopsAt: String, maxResults: Option[Int]): List[String] =
client.get_key_range(keyspace, columnFamily, startsWith, stopsAt, maxResults.getOrElse(-1)).toList
def property(name: String): String = client.get_string_property(name)
def properties(name: String): List[String] = client.get_string_list_property(name).toList
def describeTable(keyspace: String) = client.describe_keyspace(keyspace)
def ?(query: String) = client.execute_query(query)
} }
class CassandraSessionPool[T <: TTransport](transportPool: Pool[T], inputProtocol: Protocol, outputProtocol: Protocol) extends Closeable { class CassandraSessionPool[T <: TTransport](transportPool: Pool[T], inputProtocol: Protocol, outputProtocol: Protocol, defConsistencyLvl: Int) extends Closeable {
def this(transportPool: Pool[T], ioProtocol: Protocol) = this(transportPool,ioProtocol,ioProtocol) def this(transportPool: Pool[T], ioProtocol: Protocol, defConsistencyLvl: Int) = this (transportPool, ioProtocol, ioProtocol, defConsistencyLvl)
def newSession: CassandraSession = { def newSession: CassandraSession = newSession(defConsistencyLvl)
def newSession(consistencyLvl: Int): CassandraSession = {
val t = transportPool.borrowObject val t = transportPool.borrowObject
val c = new Cassandra.Client(inputProtocol(t),outputProtocol(t)) val c = new Cassandra.Client(inputProtocol(t), outputProtocol(t))
new CassandraSession { new CassandraSession {
val client = c val client = c
val obtainedAt = System.currentTimeMillis val obtainedAt = System.currentTimeMillis
val consistencyLevel = consistencyLvl
def flush = t.flush def flush = t.flush
def close = transportPool.returnObject(t) def close = transportPool.returnObject(t)
} }
} }
def withSession[R](body: CassandraSession => R) = { def withSession[R](body: CassandraSession => R) = {
val session = newSession val session = newSession(defConsistencyLvl)
try { try {
val result = body(session) val result = body(session)
session.flush session.flush
@ -299,7 +335,7 @@ class CassandraSessionPool[T <: TTransport](transportPool: Pool[T], inputProtoco
session.close session.close
} }
} }
def close = transportPool.close def close = transportPool.close
} }
@ -320,221 +356,217 @@ object Protocol {
* <p/> * <p/>
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
* *
object EmbeddedCassandraStorage extends Logging { object EmbeddedCassandraStorage extends Logging {
val TABLE_NAME = "akka" val TABLE_NAME = "akka"
val MAP_COLUMN_FAMILY = "map" val MAP_COLUMN_FAMILY = "map"
val VECTOR_COLUMN_FAMILY = "vector" val VECTOR_COLUMN_FAMILY = "vector"
val REF_COLUMN_FAMILY = "ref:item" val REF_COLUMN_FAMILY = "ref:item"
val IS_ASCENDING = true val IS_ASCENDING = true
val RUN_THRIFT_SERVICE = kernel.Kernel.config.getBool("akka.storage.cassandra.thrift-server.service", false) val RUN_THRIFT_SERVICE = kernel.Kernel.config.getBool("akka.storage.cassandra.thrift-server.service", false)
val BLOCKING_CALL = { val BLOCKING_CALL = {
if (kernel.Kernel.config.getBool("akka.storage.cassandra.blocking", true)) 0 if (kernel.Kernel.config.getBool("akka.storage.cassandra.blocking", true)) 0
else 1 else 1 }
}
@volatile private[this] var isRunning = false @volatile private[this] var isRunning = false
private[this] val serializer: Serializer = { private[this] val serializer: Serializer = {
kernel.Kernel.config.getString("akka.storage.cassandra.storage-format", "java") match { kernel.Kernel.config.getString("akka.storage.cassandra.storage-format", "java") match {
case "scala-json" => Serializer.ScalaJSON case "scala-json" => Serializer.ScalaJSON
case "java-json" => Serializer.JavaJSON case "java-json" => Serializer.JavaJSON
case "protobuf" => Serializer.Protobuf case "protobuf" => Serializer.Protobuf
case "java" => Serializer.Java case "java" => Serializer.Java
case "sbinary" => throw new UnsupportedOperationException("SBinary serialization protocol is not yet supported for storage") case "sbinary" => throw new UnsupportedOperationException("SBinary serialization protocol is not yet supported for storage")
case "avro" => throw new UnsupportedOperationException("Avro serialization protocol is not yet supported for storage") case "avro" => throw new UnsupportedOperationException("Avro serialization protocol is not yet supported for storage")
case unknown => throw new UnsupportedOperationException("Unknown storage serialization protocol [" + unknown + "]") case unknown => throw new UnsupportedOperationException("Unknown storage serialization protocol [" + unknown + "]")
} }
} }
// TODO: is this server thread-safe or needed to be wrapped up in an actor?
private[this] val server = classOf[CassandraServer].newInstance.asInstanceOf[CassandraServer]
private[this] var thriftServer: CassandraThriftServer = _ // TODO: is this server thread-safe or needed to be wrapped up in an actor?
private[this] val server = classOf[CassandraServer].newInstance.asInstanceOf[CassandraServer]
def start = synchronized {
if (!isRunning) {
try {
server.start
log.info("Cassandra persistent storage has started up successfully");
} catch {
case e =>
log.error("Could not start up Cassandra persistent storage")
throw e
}
if (RUN_THRIFT_SERVICE) {
thriftServer = new CassandraThriftServer(server)
thriftServer.start
}
isRunning
}
}
def stop = if (isRunning) { private[this] var thriftServer: CassandraThriftServer = _
//server.storageService.shutdown
if (RUN_THRIFT_SERVICE) thriftServer.stop
}
// =============================================================== def start = synchronized {
// For Ref if (!isRunning) {
// =============================================================== try {
server.start
log.info("Cassandra persistent storage has started up successfully");
} catch {
case e =>
log.error("Could not start up Cassandra persistent storage")
throw e
}
if (RUN_THRIFT_SERVICE) {
thriftServer = new CassandraThriftServer(server)
thriftServer.start
}
isRunning
}
}
def insertRefStorageFor(name: String, element: AnyRef) = { def stop = if (isRunning) {
server.insert( //server.storageService.shutdown
TABLE_NAME, if (RUN_THRIFT_SERVICE) thriftServer.stop
name, }
REF_COLUMN_FAMILY,
element,
System.currentTimeMillis,
BLOCKING_CALL)
}
def getRefStorageFor(name: String): Option[AnyRef] = { // ===============================================================
try { // For Ref
val column = server.get_column(TABLE_NAME, name, REF_COLUMN_FAMILY) // ===============================================================
Some(serializer.in(column.value, None))
} catch {
case e =>
e.printStackTrace
None
}
}
// =============================================================== def insertRefStorageFor(name: String, element: AnyRef) = {
// For Vector server.insert(
// =============================================================== TABLE_NAME,
name,
REF_COLUMN_FAMILY,
element,
System.currentTimeMillis,
BLOCKING_CALL)
}
def insertVectorStorageEntryFor(name: String, element: AnyRef) = { def getRefStorageFor(name: String): Option[AnyRef] = {
server.insert( try {
TABLE_NAME, val column = server.get_column(TABLE_NAME, name, REF_COLUMN_FAMILY)
name, Some(serializer.in(column.value, None))
VECTOR_COLUMN_FAMILY + ":" + getVectorStorageSizeFor(name), } catch {
element, case e =>
System.currentTimeMillis, e.printStackTrace
BLOCKING_CALL) None }
} }
def getVectorStorageEntryFor(name: String, index: Int): AnyRef = { // ===============================================================
try { // For Vector
val column = server.get_column(TABLE_NAME, name, VECTOR_COLUMN_FAMILY + ":" + index) // ===============================================================
serializer.in(column.value, None)
} catch {
case e =>
e.printStackTrace
throw new Predef.NoSuchElementException(e.getMessage)
}
}
def getVectorStorageRangeFor(name: String, start: Int, count: Int): List[AnyRef] = def insertVectorStorageEntryFor(name: String, element: AnyRef) = {
server.get_slice(TABLE_NAME, name, VECTOR_COLUMN_FAMILY, IS_ASCENDING, count) server.insert(
.toArray.toList.asInstanceOf[List[Tuple2[String, AnyRef]]].map(tuple => tuple._2) TABLE_NAME,
name,
VECTOR_COLUMN_FAMILY + ":" + getVectorStorageSizeFor(name),
element,
System.currentTimeMillis,
BLOCKING_CALL)
}
def getVectorStorageSizeFor(name: String): Int = def getVectorStorageEntryFor(name: String, index: Int): AnyRef = {
server.get_column_count(TABLE_NAME, name, VECTOR_COLUMN_FAMILY) try {
val column = server.get_column(TABLE_NAME, name, VECTOR_COLUMN_FAMILY + ":" + index)
serializer.in(column.value, None)
} catch {
case e =>
e.printStackTrace
throw new Predef.NoSuchElementException(e.getMessage)
}
}
// =============================================================== def getVectorStorageRangeFor(name: String, start: Int, count: Int): List[AnyRef] =
// For Map server.get_slice(TABLE_NAME, name, VECTOR_COLUMN_FAMILY, IS_ASCENDING, count)
// =============================================================== .toArray.toList.asInstanceOf[List[Tuple2[String, AnyRef]]].map(tuple => tuple._2)
def insertMapStorageEntryFor(name: String, key: String, value: AnyRef) = { def getVectorStorageSizeFor(name: String): Int =
server.insert( server.get_column_count(TABLE_NAME, name, VECTOR_COLUMN_FAMILY)
TABLE_NAME,
name,
MAP_COLUMN_FAMILY + ":" + key,
serializer.out(value),
System.currentTimeMillis,
BLOCKING_CALL)
}
def insertMapStorageEntriesFor(name: String, entries: List[Tuple2[String, AnyRef]]) = { // ===============================================================
import java.util.{Map, HashMap, List, ArrayList} // For Map
val columns: Map[String, List[column_t]] = new HashMap // ===============================================================
for (entry <- entries) {
val cls: List[column_t] = new ArrayList
cls.add(new column_t(entry._1, serializer.out(entry._2), System.currentTimeMillis))
columns.put(MAP_COLUMN_FAMILY, cls)
}
server.batch_insert(new batch_mutation_t(
TABLE_NAME,
name,
columns),
BLOCKING_CALL)
}
def getMapStorageEntryFor(name: String, key: AnyRef): Option[AnyRef] = { def insertMapStorageEntryFor(name: String, key: String, value: AnyRef) = {
try { server.insert(
val column = server.get_column(TABLE_NAME, name, MAP_COLUMN_FAMILY + ":" + key) TABLE_NAME, name,
Some(serializer.in(column.value, None)) MAP_COLUMN_FAMILY + ":" + key,
} catch { serializer.out(value),
case e => System.currentTimeMillis,
e.printStackTrace BLOCKING_CALL)
None }
}
}
def getMapStorageFor(name: String): List[Tuple2[String, AnyRef]] = { def insertMapStorageEntriesFor(name: String, entries: List[Tuple2[String, AnyRef]]) = {
val columns = server.get_columns_since(TABLE_NAME, name, MAP_COLUMN_FAMILY, -1) import java.util.{ Map, HashMap, List, ArrayList }
.toArray.toList.asInstanceOf[List[org.apache.cassandra.service.column_t]] val columns: Map[String, List[column_t]] = new HashMap
for { for (entry <- entries) {
column <- columns val cls: List[column_t] = new ArrayList
col = (column.columnName, serializer.in(column.value, None)) cls.add(new column_t(entry._1, serializer.out(entry._2), System.currentTimeMillis))
} yield col columns.put(MAP_COLUMN_FAMILY, cls)
} }
server.batch_insert(new batch_mutation_t(
def getMapStorageSizeFor(name: String): Int = TABLE_NAME, name,
server.get_column_count(TABLE_NAME, name, MAP_COLUMN_FAMILY) columns),
BLOCKING_CALL)
}
def removeMapStorageFor(name: String) = def getMapStorageEntryFor(name: String, key: AnyRef): Option[AnyRef] = {
server.remove(TABLE_NAME, name, MAP_COLUMN_FAMILY, System.currentTimeMillis, BLOCKING_CALL) try {
val column = server.get_column(TABLE_NAME, name, MAP_COLUMN_FAMILY + ":" + key)
Some(serializer.in(column.value, None))
} catch {
case e =>
e.printStackTrace
None
}
}
def getMapStorageRangeFor(name: String, start: Int, count: Int): List[Tuple2[String, AnyRef]] = { def getMapStorageFor(name: String): List[Tuple2[String, AnyRef]] = {
server.get_slice(TABLE_NAME, name, MAP_COLUMN_FAMILY, IS_ASCENDING, count) val columns = server.get_columns_since(TABLE_NAME, name, MAP_COLUMN_FAMILY, -1)
.toArray.toList.asInstanceOf[List[Tuple2[String, AnyRef]]] .toArray.toList.asInstanceOf[List[org.apache.cassandra.service.column_t]]
} for {
column <- columns
col = (column.columnName, serializer.in(column.value, None))
} yield col
}
def getMapStorageSizeFor(name: String): Int =
server.get_column_count(TABLE_NAME, name, MAP_COLUMN_FAMILY)
def removeMapStorageFor(name: String) =
server.remove(TABLE_NAME, name, MAP_COLUMN_FAMILY, System.currentTimeMillis, BLOCKING_CALL)
def getMapStorageRangeFor(name: String, start: Int, count: Int): List[Tuple2[String, AnyRef]] = {
server.get_slice(TABLE_NAME, name, MAP_COLUMN_FAMILY, IS_ASCENDING, count)
.toArray.toList.asInstanceOf[List[Tuple2[String, AnyRef]]]
}
} }
class CassandraThriftServer(server: CassandraServer) extends Logging { class CassandraThriftServer(server: CassandraServer) extends Logging {
case object Start case object Start
case object Stop case object Stop
private[this] val serverEngine: TThreadPoolServer = try { private[this] val serverEngine: TThreadPoolServer = try {
val pidFile = kernel.Kernel.config.getString("akka.storage.cassandra.thrift-server.pidfile", "akka.pid") val pidFile = kernel.Kernel.config.getString("akka.storage.cassandra.thrift-server.pidfile", "akka.pid")
if (pidFile != null) new File(pidFile).deleteOnExit(); if (pidFile != null) new File(pidFile).deleteOnExit();
val listenPort = DatabaseDescriptor.getThriftPort val listenPort = DatabaseDescriptor.getThriftPort
val processor = new Cassandra.Processor(server) val processor = new Cassandra.Processor(server)
val tServerSocket = new TServerSocket(listenPort) val tServerSocket = new TServerSocket(listenPort)
val tProtocolFactory = new TBinaryProtocol.Factory val tProtocolFactory = new TBinaryProtocol.Factory
val options = new TThreadPoolServer.Options val options = new TThreadPoolServer.Options
options.minWorkerThreads = 64 options.minWorkerThreads = 64
new TThreadPoolServer(new TProcessorFactory(processor), new TThreadPoolServer(new TProcessorFactory(processor),
tServerSocket, tServerSocket,
new TTransportFactory, new TTransportFactory,
new TTransportFactory, new TTransportFactory,
tProtocolFactory, tProtocolFactory,
tProtocolFactory, tProtocolFactory,
options) options)
} catch { } catch {
case e => case e =>
log.error("Could not start up Cassandra thrift service") log.error("Could not start up Cassandra thrift service")
throw e throw e
}
import scala.actors.Actor._
private[this] val serverDaemon = actor {
receive {
case Start =>
serverEngine.serve
log.info("Cassandra thrift service has starting up successfully")
case Stop =>
log.info("Cassandra thrift service is shutting down...")
serverEngine.stop
}
}
def start = serverDaemon ! Start
def stop = serverDaemon ! Stop
} }
*/
import scala.actors.Actor._
private[this] val serverDaemon = actor {
receive {
case Start =>
serverEngine.serve
log.info("Cassandra thrift service has starting up successfully")
case Stop =>
log.info("Cassandra thrift service is shutting down...")
serverEngine.stop
}
}
def start = serverDaemon ! Start
def stop = serverDaemon ! Stop
}
*/

View file

@ -39,11 +39,6 @@
<orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" /> <orderEntry type="library" exported="" name="Maven: asm:asm:3.1" level="project" />
<orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: aopalliance:aopalliance:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" /> <orderEntry type="library" exported="" name="Maven: org.apache.camel:camel-core:2.0-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-logging:commons-logging-api:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.6" level="project" />
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" /> <orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" />
<orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: org.apache:zookeeper:3.1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-core-asl:1.1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-core-asl:1.1.0" level="project" />
@ -57,6 +52,7 @@
<orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" /> <orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" />
<orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" />
@ -73,6 +69,10 @@
<orderEntry type="library" exported="" name="Maven: com.sun.jersey:jersey-json:1.1.1-ea" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.jersey:jersey-json:1.1.1-ea" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jettison:jettison:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: stax:stax-api:1.0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: stax:stax-api:1.0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.12" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.bind:jaxb-api:2.1" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
<orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" /> <orderEntry type="library" exported="" name="Maven: org.codehaus.jackson:jackson-asl:0.9.4" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.jersey.contribs:jersey-scala:1.1.2-ea-SNAPSHOT" level="project" />
<orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" /> <orderEntry type="library" exported="" name="Maven: org.atmosphere:atmosphere-core:0.3" level="project" />

View file

@ -50,6 +50,7 @@
<orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" /> <orderEntry type="library" exported="" name="Maven: high-scale-lib:high-scale-lib:1.0" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" /> <orderEntry type="library" exported="" name="Maven: commons-lang:commons-lang:2.4" level="project" />
<orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" /> <orderEntry type="library" exported="" name="Maven: se.foldleft:cassidy:0.1" level="project" />
<orderEntry type="library" exported="" name="Maven: commons-pool:commons-pool:1.5.1" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-comet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.8.6.3" level="project" />
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" /> <orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.8.6.3" level="project" />