completed scala binary serialization'

This commit is contained in:
jboner 2009-07-27 21:21:28 +02:00
parent 2aca074b84
commit 7473afd9c4
10 changed files with 997 additions and 876 deletions

732
akka.iws
View file

@ -6,47 +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$/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$/.gitignore" afterPath="$PROJECT_DIR$/.gitignore" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/akka-util-java-0.5.jar" afterPath="$PROJECT_DIR$/lib/akka-util-java-0.5.jar" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/scala-json-1.0.jar" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializable.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/akka.ipr" afterPath="$PROJECT_DIR$/akka.ipr" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/LICENSE" afterPath="$PROJECT_DIR$/LICENSE" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/bin/start-akka-server.sh" afterPath="$PROJECT_DIR$/bin/start-akka-server.sh" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" />
<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/actor/ActiveObject.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/util-java/pom.xml" afterPath="$PROJECT_DIR$/util-java/pom.xml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala" />
<change type="DELETED" beforePath="$PROJECT_DIR$/lib/protobuf-java-2.0.3.jar" afterPath="" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala" />
<change type="DELETED" beforePath="$PROJECT_DIR$/kernel/src/main/scala/util/Serializer.scala" afterPath="" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializer.scala" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/sbinary-0.3.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentFailer.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentFailer.java" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/PersistentActorSpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/PersistentActorSpec.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/akka-kernel.iml" afterPath="$PROJECT_DIR$/kernel/akka-kernel.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/akka-kernel-0.5.jar" afterPath="$PROJECT_DIR$/lib/akka-kernel-0.5.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/RemoteActorSpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/RemoteActorSpec.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$/kernel/src/main/scala/nio/RequestReply.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteProtocolBuilder.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/serialization/Binary.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/InMemoryActorSpec.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/InMemoryActorSpec.scala" /> <change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/Messages.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/Messages.scala" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/util-java/akka-util-java.iml" afterPath="$PROJECT_DIR$/util-java/akka-util-java.iml" />
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/lib/protobuf-java-2.1.0.jar" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.proto" afterPath="$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.proto" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/samples-java/akka-samples-java.iml" afterPath="$PROJECT_DIR$/samples-java/akka-samples-java.iml" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/README.textile" afterPath="$PROJECT_DIR$/README.textile" />
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/util/Helpers.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/util/Helpers.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" />
@ -67,20 +32,7 @@
</component> </component>
<component name="DebuggerManager"> <component name="DebuggerManager">
<line_breakpoints> <line_breakpoints>
<breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" line="200" class="Class at RemoteServer.scala:200" package=""> <breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/serialization/Binary.scala" line="10" class="Class at Binary.scala:10" package="">
<option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" />
<option name="SUSPEND_POLICY" value="SuspendAll" />
<option name="COUNT_FILTER_ENABLED" value="false" />
<option name="COUNT_FILTER" value="0" />
<option name="CONDITION_ENABLED" value="false" />
<option name="CLASS_FILTERS_ENABLED" value="false" />
<option name="INSTANCE_FILTERS_ENABLED" value="false" />
<option name="CONDITION" value="" />
<option name="LOG_MESSAGE" value="" />
</breakpoint>
<breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" line="201" class="Class at RemoteServer.scala:201" package="">
<option name="ENABLED" value="true" /> <option name="ENABLED" value="true" />
<option name="LOG_ENABLED" value="false" /> <option name="LOG_ENABLED" value="false" />
<option name="LOG_EXPRESSION_ENABLED" value="false" /> <option name="LOG_EXPRESSION_ENABLED" value="false" />
@ -156,91 +108,73 @@
<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="RemoteInMemoryStateTest.java" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RemoteInMemoryStateTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="30" column="14" selection-start="951" selection-end="951" 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="290" column="36" selection-start="13641" selection-end="13641" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
</file>
<file leaf-file-name="Actor.scala" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Actor.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="18" column="0" selection-start="601" selection-end="601" vertical-scroll-proportion="-9.846154"> <state line="414" column="33" selection-start="14988" selection-end="14988" vertical-scroll-proportion="-24.615385">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="JerseySpec.scala" pinned="false" current="true" current-in-tab="true"> <file leaf-file-name="RemoteProtocolBuilder.scala" pinned="false" current="true" current-in-tab="true">
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteProtocolBuilder.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="24" column="7" selection-start="690" selection-end="690" vertical-scroll-proportion="-0.541384"> <state line="14" column="0" selection-start="410" selection-end="410" vertical-scroll-proportion="0.18181819">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="RemoteClient.scala" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="RemoteSupervisorSpec.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="172" column="41" selection-start="7225" selection-end="7225" vertical-scroll-proportion="0.0"> <state line="638" column="28" selection-start="16462" selection-end="16462" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="DefaultChannelPipeline.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Messages.scala" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1-sources.jar!/org/jboss/netty/channel/DefaultChannelPipeline.java"> <entry file="file://$PROJECT_DIR$/kernel/src/test/scala/Messages.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="568" column="0" selection-start="17716" selection-end="17716" vertical-scroll-proportion="0.0"> <state line="19" column="33" selection-start="564" selection-end="564" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="Range.scala" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="RemoteActorSpec.scala" pinned="false" current="false" current-in-tab="false">
<entry file="jar://$MAVEN_REPOSITORY$/org/scala-lang/scala-library/2.7.5/scala-library-2.7.5-sources.jar!/scala/Range.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/test/scala/RemoteActorSpec.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="43" column="0" selection-start="1575" selection-end="1575" vertical-scroll-proportion="0.0"> <state line="27" column="6" selection-start="652" selection-end="652" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="RemoteProtocol.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Serializable.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.java"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializable.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="81" column="0" selection-start="3337" selection-end="3337" vertical-scroll-proportion="0.0"> <state line="12" column="1" selection-start="340" selection-end="340" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="RemotePersistentStateTest.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="Binary.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RemotePersistentStateTest.java"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/serialization/Binary.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="39" column="14" selection-start="1538" selection-end="1538" vertical-scroll-proportion="0.0"> <state line="12" column="63" selection-start="429" selection-end="429" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
</file> </file>
<file leaf-file-name="PersistentStateful.java" pinned="false" current="false" current-in-tab="false"> <file leaf-file-name="RemoteServer.scala" pinned="false" current="false" current-in-tab="false">
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateful.java"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="55" column="64" selection-start="1440" selection-end="1456" vertical-scroll-proportion="0.0"> <state line="117" column="45" selection-start="4575" selection-end="4575" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
@ -259,9 +193,6 @@
<component name="IdeDocumentHistory"> <component name="IdeDocumentHistory">
<option name="changedFiles"> <option name="changedFiles">
<list> <list>
<option value="$PROJECT_DIR$/kernel/src/test/scala/InMemoryActorSpec.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/PersistentActorSpec.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteProtocolBuilder.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteProtocolBuilder.scala" />
<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/serialization/Serializer.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializer.scala" />
@ -270,11 +201,14 @@
<option value="$PROJECT_DIR$/config/akka-reference.conf" /> <option value="$PROJECT_DIR$/config/akka-reference.conf" />
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentFailer.java" /> <option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentFailer.java" />
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java" /> <option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" />
<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/actor/Actor.scala" /> <option value="$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala" /> <option value="$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala" />
<option value="$PROJECT_DIR$/kernel/src/test/scala/Messages.scala" />
<option value="$PROJECT_DIR$/kernel/src/main/scala/serialization/Binary.scala" />
</list> </list>
</option> </option>
</component> </component>
@ -339,6 +273,88 @@
<option name="myItemId" value="akka-util-java" /> <option name="myItemId" value="akka-util-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="Libraries" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
</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-util-java" />
<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: com.google.protobuf:protobuf-java:2.1.0" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="protobuf-java-2.1.0.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-util-java" />
<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: com.google.protobuf:protobuf-java:2.1.0" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="protobuf-java-2.1.0.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="protobuf" />
<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-util-java" />
<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: com.google.protobuf:protobuf-java:2.1.0" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="protobuf-java-2.1.0.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="protobuf" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="ByteString" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
</PATH_ELEMENT>
</PATH> </PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
@ -488,11 +504,15 @@
<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_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="Maven: org.scala-lang:scala-library:2.7.5" /> <option name="myItemId" value="Maven: sbinary:sbinary:0.3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="scala-library-2.7.5.jar" /> <option name="myItemId" value="sbinary-0.3.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="sbinary" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
</PATH> </PATH>
@ -510,70 +530,14 @@
<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_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="Maven: org.jboss.netty:netty:3.1.0.CR1" /> <option name="myItemId" value="Maven: sbinary:sbinary:0.3" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="netty-3.1.0.CR1.jar" /> <option name="myItemId" value="sbinary-0.3.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</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.jboss.netty:netty:3.1.0.CR1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="netty-3.1.0.CR1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="channel" />
<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.jboss.netty:netty:3.1.0.CR1" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="netty-3.1.0.CR1.jar" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="channel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="DefaultChannelPipeline" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
</PATH_ELEMENT>
</PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
<option name="myItemId" value="akka" /> <option name="myItemId" value="akka" />
@ -640,66 +604,6 @@
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</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="kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="main" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="scala" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="util" />
<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="kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="main" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="scala" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="state" />
<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" />
@ -781,226 +685,6 @@
<option name="myItemId" value="main" /> <option name="myItemId" value="main" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" /> <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT> </PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="scala" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="actor" />
<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="kernel" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="main" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="api" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="api" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="RemotePersistentStateTest" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="api" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="RemoteInMemoryStateTest" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="api" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="PersistentStateful" />
<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-fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="fun-test-java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="src" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="test" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="java" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="api" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="PersistentFailer" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
</PATH_ELEMENT>
</PATH> </PATH>
<PATH> <PATH>
<PATH_ELEMENT> <PATH_ELEMENT>
@ -1077,7 +761,7 @@
<property name="dynamic.classpath" value="false" /> <property name="dynamic.classpath" value="false" />
<property name="MemberChooser.showClasses" value="true" /> <property name="MemberChooser.showClasses" value="true" />
<property name="project.structure.side.proportion" value="0.2" /> <property name="project.structure.side.proportion" value="0.2" />
<property name="options.lastSelected" value="editor.preferences.import" /> <property name="options.lastSelected" value="preferences.pluginManager" />
<property name="GoToClass.toSaveIncludeLibraries" value="false" /> <property name="GoToClass.toSaveIncludeLibraries" value="false" />
<property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" /> <property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
</component> </component>
@ -1093,7 +777,7 @@
<recent name="stm" /> <recent name="stm" />
</key> </key>
</component> </component>
<component name="RunManager" selected="JUnit.RemoteInMemoryStateTest"> <component name="RunManager" selected="JUnit.RemoteSupervisorSpec">
<configuration default="false" name="InMemoryStateTest.testRefShouldRollbackStateForStatefulServerInCaseOfFailure" type="JUnit" factoryName="JUnit" temporary="true" enabled="false" merge="false" sample_coverage="true" runner="emma"> <configuration default="false" name="InMemoryStateTest.testRefShouldRollbackStateForStatefulServerInCaseOfFailure" type="JUnit" factoryName="JUnit" temporary="true" enabled="false" merge="false" sample_coverage="true" runner="emma">
<pattern> <pattern>
<option name="PATTERN" value="se.scalablesolutions.akka.api.*" /> <option name="PATTERN" value="se.scalablesolutions.akka.api.*" />
@ -2259,18 +1943,18 @@
</todo-panel> </todo-panel>
</component> </component>
<component name="ToolWindowManager"> <component name="ToolWindowManager">
<frame x="4" y="22" width="1436" height="878" extended-state="6" /> <frame x="4" y="22" width="1916" height="1178" extended-state="6" />
<editor active="true" /> <editor active="false" />
<layout> <layout>
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.5212177" order="5" side_tool="false" /> <window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.5212177" order="5" side_tool="false" />
<window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="15" side_tool="false" /> <window_info id="Dependency Viewer" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="15" side_tool="false" />
<window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" /> <window_info id="Palette" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" />
<window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24906267" sideWeight="0.5212177" order="1" side_tool="false" /> <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24906267" sideWeight="0.5212177" order="1" side_tool="false" />
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32749078" sideWeight="0.5" order="9" side_tool="false" /> <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32749078" sideWeight="0.5" order="9" side_tool="false" />
<window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4362245" sideWeight="0.0" order="2" side_tool="false" x="4" y="22" width="1436" height="878" /> <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.43542436" sideWeight="0.0" order="2" side_tool="false" x="4" y="22" width="1436" height="878" />
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32749078" sideWeight="0.5" order="6" side_tool="false" /> <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32749078" sideWeight="0.5" order="6" side_tool="false" />
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.23576063" sideWeight="0.55484694" order="1" side_tool="false" /> <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1751473" sideWeight="0.59594095" order="1" side_tool="false" />
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39795917" sideWeight="0.5" order="3" side_tool="false" /> <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3976015" sideWeight="0.5" order="3" side_tool="false" />
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.16818425" sideWeight="0.24354243" order="0" side_tool="true" x="1609" y="144" width="252" height="862" /> <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.16818425" sideWeight="0.24354243" order="0" side_tool="true" x="1609" y="144" width="252" height="862" />
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3265306" sideWeight="0.5" order="13" side_tool="false" /> <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3265306" sideWeight="0.5" order="13" side_tool="false" />
<window_info id="Web Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32822478" sideWeight="0.5" order="16" side_tool="false" /> <window_info id="Web Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32822478" sideWeight="0.5" order="16" side_tool="false" />
@ -2326,83 +2010,6 @@
<option name="FILTER_TARGETS" value="false" /> <option name="FILTER_TARGETS" value="false" />
</component> </component>
<component name="editorHistoryManager"> <component name="editorHistoryManager">
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/InMemoryActorSpec.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="109" column="6" selection-start="3712" selection-end="3712" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/config/akka-reference.conf">
<provider selected="true" editor-type-id="text-editor">
<state line="55" column="24" selection-start="2115" selection-end="2115" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentFailer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="61" selection-start="81" selection-end="101" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java">
<provider selected="true" editor-type-id="text-editor">
<state line="2" column="56" selection-start="96" selection-end="96" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="172" column="41" selection-start="7225" selection-end="7225" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="170" column="0" selection-start="7273" selection-end="7273" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RemoteInMemoryStateTest.java">
<provider selected="true" editor-type-id="text-editor">
<state line="30" column="14" selection-start="951" selection-end="951" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="172" column="41" selection-start="7225" selection-end="7225" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1-sources.jar!/org/jboss/netty/channel/DefaultChannelPipeline.java">
<provider selected="true" editor-type-id="text-editor">
<state line="568" column="0" selection-start="17716" selection-end="17716" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/org/scala-lang/scala-library/2.7.5/scala-library-2.7.5-sources.jar!/scala/Range.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="43" column="0" selection-start="1575" selection-end="1575" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.java">
<provider selected="true" editor-type-id="text-editor">
<state line="81" column="0" selection-start="3337" selection-end="3337" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RemotePersistentStateTest.java"> <entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RemotePersistentStateTest.java">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="39" column="14" selection-start="1538" selection-end="1538" vertical-scroll-proportion="0.0"> <state line="39" column="14" selection-start="1538" selection-end="1538" vertical-scroll-proportion="0.0">
@ -2424,16 +2031,93 @@
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="18" column="0" selection-start="601" selection-end="601" vertical-scroll-proportion="-9.846154"> <state line="24" column="7" selection-start="690" selection-end="690" vertical-scroll-proportion="0.0">
<folding /> <folding />
</state> </state>
</provider> </provider>
</entry> </entry>
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala"> <entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteClient.scala">
<provider selected="true" editor-type-id="text-editor"> <provider selected="true" editor-type-id="text-editor">
<state line="24" column="7" selection-start="690" selection-end="690" vertical-scroll-proportion="-0.541384"> <state line="75" column="75" selection-start="2766" selection-end="2766" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="414" column="33" selection-start="14988" selection-end="14988" vertical-scroll-proportion="-24.615385">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/RemoteActorSpec.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="27" column="6" selection-start="652" selection-end="652" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/com/google/protobuf/protobuf-java/2.1.0/protobuf-java-2.1.0-sources.jar!/com/google/protobuf/ByteString.java">
<provider selected="true" editor-type-id="text-editor">
<state line="153" column="0" selection-start="4874" selection-end="4874" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="jar://$MAVEN_REPOSITORY$/sbinary/sbinary/0.3/sbinary-0.3.jar!/sbinary/DefaultProtocol.class">
<provider selected="true" editor-type-id="text-editor">
<state line="3" column="0" selection-start="147" selection-end="147" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/util-java/src/main/java/se/scalablesolutions/akka/kernel/nio/protobuf/RemoteProtocol.java">
<provider selected="true" editor-type-id="text-editor">
<state line="53" column="0" selection-start="2074" selection-end="2074" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/RemoteSupervisorSpec.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="638" column="28" selection-start="16462" selection-end="16462" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/Messages.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="19" column="33" selection-start="564" selection-end="564" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/serialization/Serializable.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="1" selection-start="340" selection-end="340" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteServer.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="117" column="45" selection-start="4575" selection-end="4575" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/serialization/Binary.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="12" column="63" selection-start="429" selection-end="429" vertical-scroll-proportion="0.0">
<folding />
</state>
</provider>
</entry>
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RemoteProtocolBuilder.scala">
<provider selected="true" editor-type-id="text-editor">
<state line="14" column="0" selection-start="410" selection-end="410" vertical-scroll-proportion="0.18181819">
<folding /> <folding />
</state> </state>
</provider> </provider>

View file

@ -3,9 +3,10 @@ package se.scalablesolutions.akka.api;
import com.google.inject.Inject; import com.google.inject.Inject;
import se.scalablesolutions.akka.annotation.oneway; import se.scalablesolutions.akka.annotation.oneway;
public class Foo { public class Foo extends se.scalablesolutions.akka.serialization.Serializable.JavaJSON<Foo> {
@Inject @Inject
private Bar bar; private Bar bar;
public Foo body() { return this; }
public Bar getBar() { public Bar getBar() {
return bar; return bar;
} }

View file

@ -207,7 +207,7 @@
<configuration> <configuration>
<args> <args>
<arg>-target:jvm-1.5</arg> <arg>-target:jvm-1.5</arg>
<arg>-unchecked</arg> <!--arg>-unchecked</arg-->
</args> </args>
<scalaVersion>${scala.version}</scalaVersion> <scalaVersion>${scala.version}</scalaVersion>
<vscaladocVersion>1.1</vscaladocVersion> <vscaladocVersion>1.1</vscaladocVersion>

View file

@ -108,6 +108,9 @@ class RemoteClient(hostname: String, port: Int) extends Logging {
def deregisterSupervisorWithUuid(uuid: String) = supervisors.remove(uuid) def deregisterSupervisorWithUuid(uuid: String) = supervisors.remove(uuid)
} }
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
class RemoteClientPipelineFactory(futures: ConcurrentMap[Long, CompletableFutureResult], class RemoteClientPipelineFactory(futures: ConcurrentMap[Long, CompletableFutureResult],
supervisors: ConcurrentMap[String, Actor]) extends ChannelPipelineFactory { supervisors: ConcurrentMap[String, Actor]) extends ChannelPipelineFactory {
def getPipeline: ChannelPipeline = { def getPipeline: ChannelPipeline = {
@ -121,6 +124,9 @@ class RemoteClientPipelineFactory(futures: ConcurrentMap[Long, CompletableFuture
} }
} }
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
@ChannelPipelineCoverage { val value = "all" } @ChannelPipelineCoverage { val value = "all" }
class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResult], class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResult],
val supervisors: ConcurrentMap[String, Actor]) val supervisors: ConcurrentMap[String, Actor])
@ -170,7 +176,6 @@ class RemoteClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResu
private def parseException(reply: RemoteReply) = { private def parseException(reply: RemoteReply) = {
val exception = reply.getException val exception = reply.getException
println("-------------- " + exception)
val exceptionType = Class.forName(exception.substring(0, exception.indexOf('$'))) val exceptionType = Class.forName(exception.substring(0, exception.indexOf('$')))
val exceptionMessage = exception.substring(exception.indexOf('$') + 1, exception.length) val exceptionMessage = exception.substring(exception.indexOf('$') + 1, exception.length)
exceptionType exceptionType

View file

@ -14,7 +14,7 @@ object RemoteProtocolBuilder {
def getMessage(request: RemoteRequest): AnyRef = { def getMessage(request: RemoteRequest): AnyRef = {
request.getProtocol match { request.getProtocol match {
case SerializationProtocol.SBINARY => case SerializationProtocol.SBINARY =>
val renderer = Class.forName(new String(request.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary] val renderer = Class.forName(new String(request.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]]
renderer.fromBytes(request.getMessage.toByteArray) renderer.fromBytes(request.getMessage.toByteArray)
case SerializationProtocol.SCALA_JSON => case SerializationProtocol.SCALA_JSON =>
val manifest = Serializer.Java.in(request.getMessageManifest.toByteArray, None).asInstanceOf[String] val manifest = Serializer.Java.in(request.getMessageManifest.toByteArray, None).asInstanceOf[String]
@ -35,7 +35,7 @@ object RemoteProtocolBuilder {
def getMessage(reply: RemoteReply): AnyRef = { def getMessage(reply: RemoteReply): AnyRef = {
reply.getProtocol match { reply.getProtocol match {
case SerializationProtocol.SBINARY => case SerializationProtocol.SBINARY =>
val renderer = Class.forName(new String(reply.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary] val renderer = Class.forName(new String(reply.getMessageManifest.toByteArray)).newInstance.asInstanceOf[SBinary[_ <: AnyRef]]
renderer.fromBytes(reply.getMessage.toByteArray) renderer.fromBytes(reply.getMessage.toByteArray)
case SerializationProtocol.SCALA_JSON => case SerializationProtocol.SCALA_JSON =>
val manifest = Serializer.Java.in(reply.getMessageManifest.toByteArray, None).asInstanceOf[String] val manifest = Serializer.Java.in(reply.getMessageManifest.toByteArray, None).asInstanceOf[String]
@ -54,8 +54,8 @@ object RemoteProtocolBuilder {
} }
def setMessage(message: AnyRef, builder: RemoteRequest.Builder) = { def setMessage(message: AnyRef, builder: RemoteRequest.Builder) = {
if (message.isInstanceOf[Serializable.SBinary]) { if (message.isInstanceOf[Serializable.SBinary[_]]) {
val serializable = message.asInstanceOf[Serializable.SBinary] val serializable = message.asInstanceOf[Serializable.SBinary[_ <: AnyRef]]
builder.setProtocol(SerializationProtocol.SBINARY) builder.setProtocol(SerializationProtocol.SBINARY)
builder.setMessage(ByteString.copyFrom(serializable.toBytes)) builder.setMessage(ByteString.copyFrom(serializable.toBytes))
builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes)) builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes))
@ -82,8 +82,8 @@ object RemoteProtocolBuilder {
} }
def setMessage(message: AnyRef, builder: RemoteReply.Builder) = { def setMessage(message: AnyRef, builder: RemoteReply.Builder) = {
if (message.isInstanceOf[Serializable.SBinary]) { if (message.isInstanceOf[Serializable.SBinary[_]]) {
val serializable = message.asInstanceOf[Serializable.SBinary] val serializable = message.asInstanceOf[Serializable.SBinary[_ <: AnyRef]]
builder.setProtocol(SerializationProtocol.SBINARY) builder.setProtocol(SerializationProtocol.SBINARY)
builder.setMessage(ByteString.copyFrom(serializable.toBytes)) builder.setMessage(ByteString.copyFrom(serializable.toBytes))
builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes)) builder.setMessageManifest(ByteString.copyFrom(serializable.getClass.getName.getBytes))

View file

@ -62,6 +62,9 @@ object RemoteServer extends Logging {
} }
} }
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
class RemoteServerPipelineFactory extends ChannelPipelineFactory { class RemoteServerPipelineFactory extends ChannelPipelineFactory {
def getPipeline: ChannelPipeline = { def getPipeline: ChannelPipeline = {
val p = Channels.pipeline() val p = Channels.pipeline()
@ -74,6 +77,9 @@ class RemoteServerPipelineFactory extends ChannelPipelineFactory {
} }
} }
/**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
@ChannelPipelineCoverage { val value = "all" } @ChannelPipelineCoverage { val value = "all" }
class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging { class RemoteServerHandler extends SimpleChannelUpstreamHandler with Logging {
private val activeObjectFactory = new ActiveObjectFactory private val activeObjectFactory = new ActiveObjectFactory

View file

@ -0,0 +1,375 @@
/**
* Copyright (C) 2009 Scalable Solutions.
*/
package se.scalablesolutions.akka.serialization
// --- PRIMITIVES ---
case class BinaryString(val value: String) extends Serializable.SBinary[BinaryString] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]): BinaryString = BinaryString(fromByteArray[String](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigInt(val value: BigInt) extends Serializable.SBinary[BinaryBigInt] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigInt(fromByteArray[BigInt](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimal(val value: BigDecimal) extends Serializable.SBinary[BinaryBigDecimal] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimal(fromByteArray[BigDecimal](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLong(val value: Long) extends Serializable.SBinary[BinaryLong] {
import sbinary.DefaultProtocol._
def this() = this(0L)
def fromBytes(bytes: Array[Byte]) = BinaryLong(fromByteArray[Long](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryInt(val value: Int) extends Serializable.SBinary[BinaryInt] {
import sbinary.DefaultProtocol._
def this() = this(0)
def fromBytes(bytes: Array[Byte]) = BinaryInt(fromByteArray[Int](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryDouble(val value: Double) extends Serializable.SBinary[BinaryDouble] {
import sbinary.DefaultProtocol._
def this() = this(0.0D)
def fromBytes(bytes: Array[Byte]) = BinaryDouble(fromByteArray[Double](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryFloat(val value: Float) extends Serializable.SBinary[BinaryFloat] {
import sbinary.DefaultProtocol._
def this() = this(0.0F)
def fromBytes(bytes: Array[Byte]) = BinaryFloat(fromByteArray[Float](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBoolean(val value: Boolean) extends Serializable.SBinary[BinaryBoolean] {
import sbinary.DefaultProtocol._
def this() = this(true)
def fromBytes(bytes: Array[Byte]) = BinaryBoolean(fromByteArray[Boolean](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryByte(val value: Byte) extends Serializable.SBinary[BinaryByte] {
import sbinary.DefaultProtocol._
def this() = this(0x00)
def fromBytes(bytes: Array[Byte]) = BinaryByte(fromByteArray[Byte](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryChar(val value: Char) extends Serializable.SBinary[BinaryChar] {
import sbinary.DefaultProtocol._
def this() = this(' ')
def fromBytes(bytes: Array[Byte]) = BinaryChar(fromByteArray[Char](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
// --- ARRAYS ---
case class BinaryStringArray(val value: Array[String]) extends Serializable.SBinary[BinaryStringArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringArray(fromByteArray[Array[String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigIntArray(val value: Array[BigInt]) extends Serializable.SBinary[BinaryBigIntArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigIntArray(fromByteArray[Array[BigInt]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimalArray(val value: Array[BigDecimal]) extends Serializable.SBinary[BinaryBigDecimalArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimalArray(fromByteArray[Array[BigDecimal]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryIntArray(val value: Array[Int]) extends Serializable.SBinary[BinaryIntArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryIntArray(fromByteArray[Array[Int]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLongArray(val value: Array[Long]) extends Serializable.SBinary[BinaryLongArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryLongArray(fromByteArray[Array[Long]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryDoubleArray(val value: Array[Double]) extends Serializable.SBinary[BinaryDoubleArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryDoubleArray(fromByteArray[Array[Double]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryFloatArray(val value: Array[Float]) extends Serializable.SBinary[BinaryFloatArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryFloatArray(fromByteArray[Array[Float]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBooleanArray(val value: Array[Boolean]) extends Serializable.SBinary[BinaryBooleanArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBooleanArray(fromByteArray[Array[Boolean]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryByteArray(val value: Array[Byte]) extends Serializable.SBinary[BinaryByteArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryByteArray(fromByteArray[Array[Byte]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryClassArray(val value: Array[Class[_]]) extends Serializable.SBinary[BinaryClassArray] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryClassArray(fromByteArray[Array[Class[_]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
// --- LISTS ---
case class BinaryStringList(val value: List[String]) extends Serializable.SBinary[BinaryStringList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringList(fromByteArray[List[String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigIntList(val value: List[BigInt]) extends Serializable.SBinary[BinaryBigIntList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigIntList(fromByteArray[List[BigInt]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimalList(val value: List[BigDecimal]) extends Serializable.SBinary[BinaryBigDecimalList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimalList(fromByteArray[List[BigDecimal]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLongList(val value: List[Long]) extends Serializable.SBinary[BinaryLongList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryLongList(fromByteArray[List[Long]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryIntList(val value: List[Int]) extends Serializable.SBinary[BinaryIntList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryIntList(fromByteArray[List[Int]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryDoubleList(val value: List[Double]) extends Serializable.SBinary[BinaryDoubleList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryDoubleList(fromByteArray[List[Double]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryFloatList(val value: List[Float]) extends Serializable.SBinary[BinaryFloatList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryFloatList(fromByteArray[List[Float]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBooleanList(val value: List[Boolean]) extends Serializable.SBinary[BinaryBooleanList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBooleanList(fromByteArray[List[Boolean]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryClassList(val value: List[Class[_]]) extends Serializable.SBinary[BinaryClassList] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryClassList(fromByteArray[List[Class[_]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
// --- TUPLES ---
case class BinaryStringStringTuple(val value: Tuple2[String, String]) extends Serializable.SBinary[BinaryStringStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringStringTuple(fromByteArray[Tuple2[String, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigIntBigIntTuple(val value: Tuple2[BigInt, BigInt]) extends Serializable.SBinary[BinaryBigIntBigIntTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigIntBigIntTuple(fromByteArray[Tuple2[BigInt, BigInt]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimalBigDecimalTuple(val value: Tuple2[BigDecimal, BigDecimal]) extends Serializable.SBinary[BinaryBigDecimalBigDecimalTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimalBigDecimalTuple(fromByteArray[Tuple2[BigDecimal, BigDecimal]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLongLongTuple(val value: Tuple2[Long, Long]) extends Serializable.SBinary[BinaryLongLongTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryLongLongTuple(fromByteArray[Tuple2[Long, Long]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryIntIntTuple(val value: Tuple2[Int, Int]) extends Serializable.SBinary[BinaryIntIntTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryIntIntTuple(fromByteArray[Tuple2[Int, Int]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryDoubleDoubleTuple(val value: Tuple2[Double, Double]) extends Serializable.SBinary[BinaryDoubleDoubleTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryDoubleDoubleTuple(fromByteArray[Tuple2[Double, Double]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryFloatFloatTuple(val value: Tuple2[Float, Float]) extends Serializable.SBinary[BinaryFloatFloatTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryFloatFloatTuple(fromByteArray[Tuple2[Float, Float]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBooleanBooleanTuple(val value: Tuple2[Boolean, Boolean]) extends Serializable.SBinary[BinaryBooleanBooleanTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBooleanBooleanTuple(fromByteArray[Tuple2[Boolean, Boolean]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryClassClassTuple(val value: Tuple2[Class[_], Class[_]]) extends Serializable.SBinary[BinaryClassClassTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryClassClassTuple(fromByteArray[Tuple2[Class[_], Class[_]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryByteArrayByteArrayTuple(val value: Tuple2[Array[Byte], Array[Byte]]) extends Serializable.SBinary[BinaryByteArrayByteArrayTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryByteArrayByteArrayTuple(fromByteArray[Tuple2[Array[Byte], Array[Byte]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigIntStringTuple(val value: Tuple2[BigInt, String]) extends Serializable.SBinary[BinaryBigIntStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigIntStringTuple(fromByteArray[Tuple2[BigInt, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimalStringTuple(val value: Tuple2[BigDecimal, String]) extends Serializable.SBinary[BinaryBigDecimalStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimalStringTuple(fromByteArray[Tuple2[BigDecimal, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLongStringTuple(val value: Tuple2[Long, String]) extends Serializable.SBinary[BinaryLongStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryLongStringTuple(fromByteArray[Tuple2[Long, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryIntStringTuple(val value: Tuple2[Int, String]) extends Serializable.SBinary[BinaryIntStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryIntStringTuple(fromByteArray[Tuple2[Int, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryDoubleStringTuple(val value: Tuple2[Double, String]) extends Serializable.SBinary[BinaryDoubleStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryDoubleStringTuple(fromByteArray[Tuple2[Double, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryFloatStringTuple(val value: Tuple2[Float, String]) extends Serializable.SBinary[BinaryFloatStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryFloatStringTuple(fromByteArray[Tuple2[Float, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBooleanStringTuple(val value: Tuple2[Boolean, String]) extends Serializable.SBinary[BinaryBooleanStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBooleanStringTuple(fromByteArray[Tuple2[Boolean, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryClassStringTuple(val value: Tuple2[Class[_], String]) extends Serializable.SBinary[BinaryClassStringTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryClassStringTuple(fromByteArray[Tuple2[Class[_], String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringByteArrayTuple(val value: Tuple2[String, Array[Byte]]) extends Serializable.SBinary[BinaryStringByteArrayTuple] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringByteArrayTuple(fromByteArray[Tuple2[String, Array[Byte]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
// --- MAPS ---
case class BinaryStringStringMap(val value: Map[String, String]) extends Serializable.SBinary[BinaryStringStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringStringMap(fromByteArray[Map[String, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigIntStringMap(val value: Map[BigInt, String]) extends Serializable.SBinary[BinaryBigIntStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigIntStringMap(fromByteArray[Map[BigInt, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryBigDecimalStringMap(val value: Map[BigDecimal, String]) extends Serializable.SBinary[BinaryBigDecimalStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryBigDecimalStringMap(fromByteArray[Map[BigDecimal, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryLongStringMap(val value: Map[Long, String]) extends Serializable.SBinary[BinaryLongStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryLongStringMap(fromByteArray[Map[Long, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryIntStringMap(val value: Map[Int, String]) extends Serializable.SBinary[BinaryIntStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryIntStringMap(fromByteArray[Map[Int, String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryClassStringMap(val value: Map[Class[_], String]) extends Serializable.SBinary[BinaryClassStringMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryClassStringMap(fromByteArray[Map[Class[_], String]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringBigIntMap(val value: Map[String, BigInt]) extends Serializable.SBinary[BinaryStringBigIntMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringBigIntMap(fromByteArray[Map[String, BigInt]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringBigDecimalMap(val value: Map[String, BigDecimal]) extends Serializable.SBinary[BinaryStringBigDecimalMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringBigDecimalMap(fromByteArray[Map[String, BigDecimal]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringLongMap(val value: Map[String, Long]) extends Serializable.SBinary[BinaryStringLongMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringLongMap(fromByteArray[Map[String, Long]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringIntMap(val value: Map[String, Int]) extends Serializable.SBinary[BinaryStringIntMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringIntMap(fromByteArray[Map[String, Int]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringClassMap(val value: Map[String, Class[_]]) extends Serializable.SBinary[BinaryStringClassMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringClassMap(fromByteArray[Map[String, Class[_]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}
case class BinaryStringByteArrayMap(val value: Map[String, Array[Byte]]) extends Serializable.SBinary[BinaryStringByteArrayMap] {
import sbinary.DefaultProtocol._
def this() = this(null)
def fromBytes(bytes: Array[Byte]) = BinaryStringByteArrayMap(fromByteArray[Map[String, Array[Byte]]](bytes))
def toBytes: Array[Byte] = toByteArray(value)
}

View file

@ -28,10 +28,43 @@ trait Serializable {
} }
/** /**
* Serialization protocols.
*
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/ */
object Serializable { object Serializable {
/**
* Example on how to use the SBinary serialization protocol:
* <pre>
* case class User(val usernamePassword: Tuple2[String, String],
* val email: String,
* val age: Int)
* extends Serializable.SBinary[User] {
* def this() = this(null, null, 0)
* import sbinary.DefaultProtocol._
* implicit object UserFormat extends Format[User] {
* def reads(in : Input) = User(
* read[Tuple2[String, String]](in),
* read[String](in),
* read[Int](in))
* def writes(out: Output, value: User) = {
* write[Tuple2[String, String]](out, value.usernamePassword)
* write[String](out, value.email)
* write[Int](out, value.age)
* }
* }
* def fromBytes(bytes: Array[Byte]) = fromByteArray[User](bytes)
* def toBytes: Array[Byte] = toByteArray(this)
* }
* </pre>
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
trait SBinary[T <: AnyRef] extends Serializable {
def fromBytes(bytes: Array[Byte]): T
def toBytes: Array[Byte]
}
/** /**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/ */
@ -43,7 +76,7 @@ object Serializable {
/** /**
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a> * @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/ */
trait JavaJSON[T] extends JSON[T]{ abstract class JavaJSON[T] extends JSON[T]{
private val mapper = new ObjectMapper private val mapper = new ObjectMapper
def toJSON: String = { def toJSON: String = {
@ -77,17 +110,4 @@ object Serializable {
def toBytes: Array[Byte] def toBytes: Array[Byte]
def getSchema: Message def getSchema: Message
} }
/**
* <pre>
* import sbinary.DefaultProtocol._
* def fromBytes(bytes: Array[Byte]) = fromByteArray[String](bytes)
* def toBytes: Array[Byte] = toByteArray(body)
* </pre>
* @author <a href="http://jonasboner.com">Jonas Bon&#233;r</a>
*/
trait SBinary extends Serializable {
def fromBytes(bytes: Array[Byte])
def toBytes: Array[Byte]
}
} }

29
kernel/src/test/scala/Messages.scala Executable file → Normal file
View file

@ -4,9 +4,38 @@
package se.scalablesolutions.akka.kernel package se.scalablesolutions.akka.kernel
import akka.serialization.Serializable
sealed abstract class TestMessage sealed abstract class TestMessage
case object Ping extends TestMessage case object Ping extends TestMessage
case object Pong extends TestMessage case object Pong extends TestMessage
case object OneWay extends TestMessage case object OneWay extends TestMessage
case object Die extends TestMessage case object Die extends TestMessage
case object NotifySupervisorExit extends TestMessage case object NotifySupervisorExit extends TestMessage
case class User(val usernamePassword: Tuple2[String, String],
val email: String,
val age: Int)
extends Serializable.SBinary[User] {
def this() = this(null, null, 0)
import sbinary.DefaultProtocol._
implicit object UserFormat extends Format[User] {
def reads(in : Input) = User(
read[Tuple2[String, String]](in),
read[String](in),
read[Int](in))
def writes(out: Output, value: User) = {
write[Tuple2[String, String]](out, value.usernamePassword)
write[String](out, value.email)
write[Int](out, value.age)
}
}
def fromBytes(bytes: Array[Byte]) = fromByteArray[User](bytes)
def toBytes: Array[Byte] = toByteArray(this)
}
case class RemotePing extends TestMessage
case object RemotePong extends TestMessage
case object RemoteOneWay extends TestMessage
case object RemoteDie extends TestMessage
case object RemoteNotifySupervisorExit extends TestMessage

View file

@ -4,6 +4,7 @@
package se.scalablesolutions.akka.kernel package se.scalablesolutions.akka.kernel
import akka.serialization.BinaryString
import kernel.nio.{RemoteClient, RemoteServer} import kernel.nio.{RemoteClient, RemoteServer}
import kernel.actor.{Supervisor, SupervisorFactory, Actor, StartSupervisor} import kernel.actor.{Supervisor, SupervisorFactory, Actor, StartSupervisor}
import kernel.config.ScalaConfig._ import kernel.config.ScalaConfig._
@ -41,7 +42,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
} }
@ -51,7 +52,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 !! Die pingpong1 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
@ -65,21 +66,21 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("ping") { expect("ping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 !! Die pingpong1 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIE") { expect("pingDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIEping") { expect("pingDIEping") {
@ -93,7 +94,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 !! Die pingpong1 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
@ -107,21 +108,21 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("ping") { expect("ping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 !! Die pingpong1 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIE") { expect("pingDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIEping") { expect("pingDIEping") {
@ -135,7 +136,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong3 !! Die pingpong3 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
@ -149,37 +150,37 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 !! Ping).getOrElse("nil") (pingpong2 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 !! Ping).getOrElse("nil") (pingpong3 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingping") { expect("pingpingping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 !! Die pingpong2 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIE") { expect("pingpingpingDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 !! Ping).getOrElse("nil") (pingpong2 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 !! Ping).getOrElse("nil") (pingpong3 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEpingpingping") { expect("pingpingpingDIEpingpingping") {
@ -193,7 +194,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 !! Die pingpong2 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIEDIEDIE") { expect("DIEDIEDIE") {
@ -207,37 +208,37 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 !! Ping).getOrElse("nil") (pingpong2 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 !! Ping).getOrElse("nil") (pingpong3 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingping") { expect("pingpingping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 !! Die pingpong2 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEDIEDIE") { expect("pingpingpingDIEDIEDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 !! Ping).getOrElse("nil") (pingpong1 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 !! Ping).getOrElse("nil") (pingpong2 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 !! Ping).getOrElse("nil") (pingpong3 !! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEDIEDIEpingpingping") { expect("pingpingpingDIEDIEDIEpingpingping") {
@ -251,7 +252,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
val sup = getSingleActorOneForOneSupervisor val sup = getSingleActorOneForOneSupervisor
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
pingpong1 ! Die pingpong1 ! BinaryString("Die")
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
Log.messageLog Log.messageLog
@ -268,7 +269,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
expect("oneway") { expect("oneway") {
Log.oneWayLog Log.oneWayLog
} }
pingpong1 ! Die pingpong1 ! BinaryString("Die")
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
Log.messageLog Log.messageLog
@ -288,7 +289,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 ! Die pingpong1 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
@ -302,21 +303,21 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 ! Ping).getOrElse("nil") (pingpong1 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("ping") { expect("ping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 ! Die pingpong1 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIE") { expect("pingDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 ! Ping).getOrElse("nil") (pingpong1 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingDIEping") { expect("pingDIEping") {
@ -330,7 +331,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong3 ! Die pingpong3 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIE") { expect("DIE") {
@ -344,37 +345,37 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong1 ! Ping).getOrElse("nil") (pingpong1 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 ! Ping).getOrElse("nil") (pingpong2 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 ! Ping).getOrElse("nil") (pingpong3 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingping") { expect("pingpingping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 ! Die pingpong2 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIE") { expect("pingpingpingDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 ! Ping).getOrElse("nil") (pingpong1 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 ! Ping).getOrElse("nil") (pingpong2 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 ! Ping).getOrElse("nil") (pingpong3 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEpingpingping") { expect("pingpingpingDIEpingpingping") {
@ -388,7 +389,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 ! Die pingpong2 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIEDIEDIE") { expect("DIEDIEDIE") {
@ -402,37 +403,37 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
sup ! StartSupervisor sup ! StartSupervisor
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
pingpong1 ! Ping pingpong1 ! BinaryString("Ping")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 ! Ping).getOrElse("nil") (pingpong2 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 ! Ping).getOrElse("nil") (pingpong3 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingping") { expect("pingpingping") {
Log.messageLog Log.messageLog
} }
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong2 ! Die pingpong2 ! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEDIEDIE") { expect("pingpingpingDIEDIEDIE") {
Log.messageLog Log.messageLog
} }
expect("pong") { expect("pong") {
(pingpong1 ! Ping).getOrElse("nil") (pingpong1 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong2 ! Ping).getOrElse("nil") (pingpong2 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pong") { expect("pong") {
(pingpong3 ! Ping).getOrElse("nil") (pingpong3 ! BinaryString("Ping")).getOrElse("nil")
} }
Thread.sleep(500) Thread.sleep(500)
expect("pingpingpingDIEDIEDIEpingpingping") { expect("pingpingpingDIEDIEDIEpingpingping") {
@ -447,7 +448,7 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
val sup = getNestedSupervisorsAllForOneConf val sup = getNestedSupervisorsAllForOneConf
sup ! StartSupervisor sup ! StartSupervisor
intercept(classOf[RuntimeException]) { intercept(classOf[RuntimeException]) {
pingpong1 !! Die pingpong1 !! BinaryString("Die")
} }
Thread.sleep(500) Thread.sleep(500)
expect("DIEDIEDIE") { expect("DIEDIEDIE") {
@ -594,14 +595,14 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
@serializable class RemotePingPong1Actor extends Actor { @serializable class RemotePingPong1Actor extends Actor {
override def receive: PartialFunction[Any, Unit] = { override def receive: PartialFunction[Any, Unit] = {
case Ping => case BinaryString("Ping") =>
Log.messageLog += "ping" Log.messageLog += "ping"
reply("pong") reply("pong")
case OneWay => case OneWay =>
Log.oneWayLog += "oneway" Log.oneWayLog += "oneway"
case Die => case BinaryString("Die") =>
throw new RuntimeException("DIE") throw new RuntimeException("DIE")
} }
override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) { override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) {
@ -611,10 +612,10 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
@serializable class RemotePingPong2Actor extends Actor { @serializable class RemotePingPong2Actor extends Actor {
override def receive: PartialFunction[Any, Unit] = { override def receive: PartialFunction[Any, Unit] = {
case Ping => case BinaryString("Ping") =>
Log.messageLog += "ping" Log.messageLog += "ping"
reply("pong") reply("pong")
case Die => case BinaryString("Die") =>
throw new RuntimeException("DIE") throw new RuntimeException("DIE")
} }
override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) { override protected def postRestart(reason: AnyRef, config: Option[AnyRef]) {
@ -624,10 +625,10 @@ class RemoteSupervisorSpec extends junit.framework.TestCase with Suite {
@serializable class RemotePingPong3Actor extends Actor { @serializable class RemotePingPong3Actor extends Actor {
override def receive: PartialFunction[Any, Unit] = { override def receive: PartialFunction[Any, Unit] = {
case Ping => case BinaryString("Ping") =>
Log.messageLog += "ping" Log.messageLog += "ping"
reply("pong") reply("pong")
case Die => case BinaryString("Die") =>
throw new RuntimeException("DIE") throw new RuntimeException("DIE")
} }