completed remote active objects (1:st iteration) - left todo are: TX semantics, supervision and remote references + tests
This commit is contained in:
parent
8ff45daddc
commit
47abc143a4
22 changed files with 1228 additions and 314 deletions
22
akka.ipr
22
akka.ipr
|
|
@ -747,17 +747,6 @@
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/sun/xml/bind/jaxb-impl/2.1.10/jaxb-impl-2.1.10-sources.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/com/sun/xml/bind/jaxb-impl/2.1.10/jaxb-impl-2.1.10-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
</library>
|
</library>
|
||||||
<library name="Maven: org.jboss.netty:netty:3.1.0.BETA2">
|
|
||||||
<CLASSES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.BETA2/netty-3.1.0.BETA2.jar!/" />
|
|
||||||
</CLASSES>
|
|
||||||
<JAVADOC>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.BETA2/netty-3.1.0.BETA2-javadoc.jar!/" />
|
|
||||||
</JAVADOC>
|
|
||||||
<SOURCES>
|
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.BETA2/netty-3.1.0.BETA2-sources.jar!/" />
|
|
||||||
</SOURCES>
|
|
||||||
</library>
|
|
||||||
<library name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9">
|
<library name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9">
|
||||||
<CLASSES>
|
<CLASSES>
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/sun/grizzly/grizzly-servlet-webserver/1.9.9/grizzly-servlet-webserver-1.9.9.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/com/sun/grizzly/grizzly-servlet-webserver/1.9.9/grizzly-servlet-webserver-1.9.9.jar!/" />
|
||||||
|
|
@ -1187,6 +1176,17 @@
|
||||||
<root url="jar://$MAVEN_REPOSITORY$/com/jteigen/scalatest/junit4runner/1.0/junit4runner-1.0-sources.jar!/" />
|
<root url="jar://$MAVEN_REPOSITORY$/com/jteigen/scalatest/junit4runner/1.0/junit4runner-1.0-sources.jar!/" />
|
||||||
</SOURCES>
|
</SOURCES>
|
||||||
</library>
|
</library>
|
||||||
|
<library name="Maven: org.jboss.netty:netty:3.1.0.CR1">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1-javadoc.jar!/" />
|
||||||
|
</JAVADOC>
|
||||||
|
<SOURCES>
|
||||||
|
<root url="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1-sources.jar!/" />
|
||||||
|
</SOURCES>
|
||||||
|
</library>
|
||||||
</component>
|
</component>
|
||||||
<UsedPathMacros>
|
<UsedPathMacros>
|
||||||
<macro name="MAVEN_REPOSITORY" description="Maven Local Repostiry" />
|
<macro name="MAVEN_REPOSITORY" description="Maven Local Repostiry" />
|
||||||
|
|
|
||||||
730
akka.iws
730
akka.iws
|
|
@ -1,14 +1,33 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project relativePaths="false" version="4">
|
<project relativePaths="false" version="4">
|
||||||
<component name="BookmarkManager">
|
<component name="BookmarkManager">
|
||||||
|
<editor_bookmark url="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala" line="67" description="val args = request.message.asInstanceOf[Array[Obje..." />
|
||||||
|
<editor_bookmark url="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala" line="44" description="def newReplyWithException(error: Throwable) = new ..." />
|
||||||
<editor_bookmark url="file://$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" line="106" description="trait TransactionalMapGuard[K, V] extends Transact..." />
|
<editor_bookmark url="file://$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" line="106" description="trait TransactionalMapGuard[K, V] extends Transact..." />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="3fdd9c0e-800d-4bc5-af37-bdf2de209fbd" name="Test" comment="">
|
<list default="true" id="3fdd9c0e-800d-4bc5-af37-bdf2de209fbd" name="Test" comment="">
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java" />
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/akka-kernel.iml" afterPath="$PROJECT_DIR$/kernel/akka-kernel.iml" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyClient.java" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyServer.java" />
|
||||||
|
<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$/kernel/src/main/scala/nio/ProxyServer.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/ProxyServer.scala" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/akka-funtest-java.iml" afterPath="$PROJECT_DIR$/fun-test-java/akka-funtest-java.iml" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala" />
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java" />
|
||||||
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateful.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateful.java" />
|
<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/stm/Transaction.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/stm/Transaction.scala" />
|
||||||
|
<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$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NioTest.java" />
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/lib/aspectwerkz-nodeps-jdk5-2.1.jar" afterPath="$PROJECT_DIR$/lib/aspectwerkz-nodeps-jdk5-2.1.jar" />
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyServer.scala" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/stm/ChangeSet.scala" />
|
||||||
|
<change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala" />
|
||||||
|
<change type="MODIFICATION" beforePath="$PROJECT_DIR$/kernel/src/main/scala/reactor/Reactor.scala" afterPath="$PROJECT_DIR$/kernel/src/main/scala/reactor/Reactor.scala" />
|
||||||
</list>
|
</list>
|
||||||
<list readonly="true" id="38db01c1-9b0f-438f-8f52-f1210d903e0c" name="Default" comment=" # Brief commit desciption here # Full commit description here (comment lines starting with '#' will not be included) ">
|
<list readonly="true" id="38db01c1-9b0f-438f-8f52-f1210d903e0c" name="Default" comment=" # Brief commit desciption here # Full commit description here (comment lines starting with '#' will not be included) ">
|
||||||
<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" />
|
||||||
|
|
@ -31,7 +50,7 @@
|
||||||
</component>
|
</component>
|
||||||
<component name="DebuggerManager">
|
<component name="DebuggerManager">
|
||||||
<line_breakpoints>
|
<line_breakpoints>
|
||||||
<breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala" line="174" class="Class at ActiveObject.scala:174" package="">
|
<breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala" line="208" class="Class at ActiveObject.scala:208" 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" />
|
||||||
|
|
@ -44,7 +63,33 @@
|
||||||
<option name="CONDITION" value="" />
|
<option name="CONDITION" value="" />
|
||||||
<option name="LOG_MESSAGE" value="" />
|
<option name="LOG_MESSAGE" value="" />
|
||||||
</breakpoint>
|
</breakpoint>
|
||||||
<breakpoint url="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java" line="40" class="se.scalablesolutions.akka.api.InMemoryStateTest" package="se.scalablesolutions.akka.api">
|
<breakpoint url="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala" line="104" class="Class at NettyClient.scala:105" 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$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java" line="43" class="se.scalablesolutions.akka.api.InMemoryStateTest" package="se.scalablesolutions.akka.api">
|
||||||
|
<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/NettyServer.scala" line="90" class="Class at NettyServer.scala:90" 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" />
|
||||||
|
|
@ -116,97 +161,37 @@
|
||||||
<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="Actor.scala" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="NettyServer.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/nio/NettyServer.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="126" column="6" selection-start="4456" selection-end="4456" vertical-scroll-proportion="0.0">
|
<state line="112" column="55" selection-start="4823" selection-end="4844" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="ActiveObjectGuiceConfiguratorTest.java" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="InMemoryStateTest.java" pinned="false" current="false" current-in-tab="false">
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java">
|
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="87" column="0" selection-start="2976" selection-end="2976" vertical-scroll-proportion="0.0">
|
<state line="38" column="14" selection-start="1571" selection-end="1571" vertical-scroll-proportion="0.0">
|
||||||
<folding>
|
|
||||||
<element signature="imports" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="State.scala" pinned="false" current="true" current-in-tab="true">
|
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/State.scala">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="71" column="62" selection-start="2761" selection-end="2761" vertical-scroll-proportion="1.9059305">
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="ActorTest.scala" pinned="false" current="false" current-in-tab="false">
|
<file leaf-file-name="NettyClient.scala" pinned="false" current="true" current-in-tab="true">
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala">
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="16" column="2" selection-start="401" selection-end="401" vertical-scroll-proportion="0.0">
|
<state line="112" column="95" selection-start="4311" selection-end="4311" vertical-scroll-proportion="0.8636364">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
</file>
|
</file>
|
||||||
<file leaf-file-name="CassandraNode.scala" pinned="false" current="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="27" column="33" selection-start="736" selection-end="736" vertical-scroll-proportion="0.0">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="PersistentStateful.java" 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">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="10" column="44" selection-start="580" selection-end="580" vertical-scroll-proportion="0.0">
|
|
||||||
<folding>
|
|
||||||
<element signature="imports" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="JerseyFoo.java" pinned="false" current="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/JerseyFoo.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="7" column="13" selection-start="146" selection-end="146" vertical-scroll-proportion="0.0">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="RestTest.java" pinned="false" current="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="62" column="23" selection-start="1977" selection-end="1977" vertical-scroll-proportion="0.0">
|
|
||||||
<folding>
|
|
||||||
<element signature="imports" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="ActiveObject.scala" pinned="false" current="false" current-in-tab="false">
|
<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">
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="185" column="59" selection-start="6123" selection-end="6123" vertical-scroll-proportion="0.0">
|
<state line="131" column="35" selection-start="4725" selection-end="4725" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
</file>
|
|
||||||
<file leaf-file-name="JerseySpec.scala" pinned="false" current="false" current-in-tab="false">
|
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="54" column="2" selection-start="1620" selection-end="1620" vertical-scroll-proportion="0.0">
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
|
@ -225,22 +210,22 @@
|
||||||
<component name="IdeDocumentHistory">
|
<component name="IdeDocumentHistory">
|
||||||
<option name="changedFiles">
|
<option name="changedFiles">
|
||||||
<list>
|
<list>
|
||||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentClasher.java" />
|
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java" />
|
||||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java" />
|
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NioTest.java" />
|
||||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateTest.java" />
|
<option value="$PROJECT_DIR$/kernel/pom.xml" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/reactor/Reactor.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/ProxyServer.scala" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/test/scala/SupervisorSpec.scala" />
|
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyServer.java" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/actor/Supervisor.scala" />
|
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyClient.java" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/config/ActiveObjectGuiceConfigurator.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/config/ActiveObjectGuiceConfigurator.scala" />
|
||||||
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/stm/ActiveObject.scala" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/stm/Transaction.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/stm/Transaction.scala" />
|
||||||
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/stm/ChangeSet.scala" />
|
||||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java" />
|
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java" />
|
||||||
<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$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.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/actor/Actor.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyServer.scala" />
|
||||||
<option value="$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala" />
|
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala" />
|
||||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateful.java" />
|
|
||||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/state/State.scala" />
|
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|
@ -313,11 +298,11 @@
|
||||||
<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.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
|
<option name="myItemId" value="Maven: org.jboss.netty:netty:3.1.0.CR1" />
|
||||||
<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="aspectwerkz-nodeps-jdk5-2.1.jar" />
|
<option name="myItemId" value="netty-3.1.0.CR1.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>
|
||||||
|
|
@ -335,15 +320,41 @@
|
||||||
<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.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
|
<option name="myItemId" value="Maven: org.jboss.netty:netty:3.1.0.CR1" />
|
||||||
<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="aspectwerkz-nodeps-jdk5-2.1.jar" />
|
<option name="myItemId" value="netty-3.1.0.CR1.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_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="intercept" />
|
<option name="myItemId" value="frame" />
|
||||||
|
<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" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
|
|
@ -391,33 +402,7 @@
|
||||||
<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>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="inlining" />
|
<option name="myItemId" value="impl" />
|
||||||
<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="aspectwerkz 2.1" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="aspectwerkz-nodeps-jdk5-2.1.jar" />
|
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
|
||||||
</PATH_ELEMENT>
|
|
||||||
<PATH_ELEMENT>
|
|
||||||
<option name="myItemId" value="management" />
|
|
||||||
<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>
|
||||||
|
|
@ -452,8 +437,26 @@
|
||||||
<option name="myItemId" value="src" />
|
<option name="myItemId" value="src" />
|
||||||
<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_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="test" />
|
<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" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
|
|
@ -486,6 +489,10 @@
|
||||||
<option name="myItemId" value="scala" />
|
<option name="myItemId" value="scala" />
|
||||||
<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="util" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
<PATH>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
|
|
@ -577,6 +584,36 @@
|
||||||
<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="nio" />
|
||||||
|
<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" />
|
||||||
|
|
@ -633,7 +670,7 @@
|
||||||
<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>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="camel" />
|
<option name="myItemId" value="collection" />
|
||||||
<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>
|
||||||
|
|
@ -743,7 +780,41 @@
|
||||||
<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>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="RestTest" />
|
<option name="myItemId" value="NettyServer" />
|
||||||
|
<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-funtest-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="NettyClient" />
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
|
|
@ -807,7 +878,75 @@
|
||||||
<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>
|
<PATH_ELEMENT>
|
||||||
<option name="myItemId" value="PersistentStateful" />
|
<option name="myItemId" value="NioTest" />
|
||||||
|
<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-funtest-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="InMemoryStateTest" />
|
||||||
|
<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-funtest-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="InMemStateful" />
|
||||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ClassTreeNode" />
|
||||||
</PATH_ELEMENT>
|
</PATH_ELEMENT>
|
||||||
</PATH>
|
</PATH>
|
||||||
|
|
@ -820,6 +959,118 @@
|
||||||
<option name="myItemId" value="akka" />
|
<option name="myItemId" value="akka" />
|
||||||
<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_ELEMENT>
|
||||||
|
<option name="myItemId" value="< 1.6 >" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
||||||
|
</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" />
|
||||||
|
<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="< 1.6 >" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="classes.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" />
|
||||||
|
<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="< 1.6 >" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="classes.jar" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="lang" />
|
||||||
|
<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" />
|
||||||
|
<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="< 1.6 >" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="classes.jar" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="lang" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="Class" />
|
||||||
|
<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" />
|
||||||
|
<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="< 1.6 >" />
|
||||||
|
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.NamedLibraryElementNode" />
|
||||||
|
</PATH_ELEMENT>
|
||||||
|
<PATH_ELEMENT>
|
||||||
|
<option name="myItemId" value="classes.jar" />
|
||||||
|
<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>
|
<PATH>
|
||||||
<PATH_ELEMENT>
|
<PATH_ELEMENT>
|
||||||
|
|
@ -966,12 +1217,12 @@
|
||||||
<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="FileHistory.git4idea.history.GitHistoryProvider_treeWidth0" value="213" />
|
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeWidth0" value="213" />
|
||||||
<property name="options.lastSelected" value="reference.settingsdialog.IDE.editor.colors.Scala" />
|
<property name="options.lastSelected" value="editing.templates" />
|
||||||
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder3" value="3" />
|
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder3" value="3" />
|
||||||
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
|
<property name="GoToClass.toSaveIncludeLibraries" value="false" />
|
||||||
<property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
|
<property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
|
||||||
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder0" value="0" />
|
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder0" value="0" />
|
||||||
<property name="project.structure.last.edited" value="JDKs" />
|
<property name="project.structure.last.edited" value="Modules" />
|
||||||
<property name="options.searchVisible" value="true" />
|
<property name="options.searchVisible" value="true" />
|
||||||
<property name="MemberChooser.sorted" value="false" />
|
<property name="MemberChooser.sorted" value="false" />
|
||||||
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder1" value="1" />
|
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder1" value="1" />
|
||||||
|
|
@ -987,10 +1238,11 @@
|
||||||
<recent name="se.scalablesolutions.akka.api" />
|
<recent name="se.scalablesolutions.akka.api" />
|
||||||
</key>
|
</key>
|
||||||
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
|
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
|
||||||
|
<recent name="stm" />
|
||||||
<recent name="actor" />
|
<recent name="actor" />
|
||||||
</key>
|
</key>
|
||||||
</component>
|
</component>
|
||||||
<component name="RunManager" selected="JUnit.PersistentStateTest">
|
<component name="RunManager" selected="JUnit.InMemoryStateTest">
|
||||||
<configuration default="true" type="Remote" factoryName="Remote">
|
<configuration default="true" type="Remote" factoryName="Remote">
|
||||||
<option name="USE_SOCKET_TRANSPORT" value="true" />
|
<option name="USE_SOCKET_TRANSPORT" value="true" />
|
||||||
<option name="SERVER_MODE" value="false" />
|
<option name="SERVER_MODE" value="false" />
|
||||||
|
|
@ -1135,6 +1387,52 @@
|
||||||
<option name="Maven.BeforeRunTask" enabled="false" />
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration default="false" name="NettyClient" type="Application" factoryName="Application" enabled="false" merge="false" sample_coverage="true" runner="emma">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="se.scalablesolutions.akka.api.NettyClient" />
|
||||||
|
<option name="VM_PARAMETERS" value="" />
|
||||||
|
<option name="PROGRAM_PARAMETERS" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH" value="" />
|
||||||
|
<option name="ENABLE_SWING_INSPECTOR" value="false" />
|
||||||
|
<option name="ENV_VARIABLES" />
|
||||||
|
<option name="PASS_PARENT_ENVS" value="true" />
|
||||||
|
<module name="akka-funtest-java" />
|
||||||
|
<envs />
|
||||||
|
<RunnerSettings RunnerId="Run" />
|
||||||
|
<ConfigurationWrapper RunnerId="Run" />
|
||||||
|
<method>
|
||||||
|
<option name="AntTarget" enabled="false" />
|
||||||
|
<option name="Make" enabled="false" />
|
||||||
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
|
<configuration default="false" name="NettyServer" type="Application" factoryName="Application" enabled="false" merge="false" sample_coverage="true" runner="emma">
|
||||||
|
<option name="MAIN_CLASS_NAME" value="se.scalablesolutions.akka.api.NettyServer" />
|
||||||
|
<option name="VM_PARAMETERS" value="" />
|
||||||
|
<option name="PROGRAM_PARAMETERS" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH" value="" />
|
||||||
|
<option name="ENABLE_SWING_INSPECTOR" value="false" />
|
||||||
|
<option name="ENV_VARIABLES" />
|
||||||
|
<option name="PASS_PARENT_ENVS" value="true" />
|
||||||
|
<module name="akka-funtest-java" />
|
||||||
|
<envs />
|
||||||
|
<RunnerSettings RunnerId="Debug">
|
||||||
|
<option name="DEBUG_PORT" value="63601" />
|
||||||
|
<option name="TRANSPORT" value="0" />
|
||||||
|
<option name="LOCAL" value="true" />
|
||||||
|
</RunnerSettings>
|
||||||
|
<RunnerSettings RunnerId="Run" />
|
||||||
|
<ConfigurationWrapper RunnerId="Debug" />
|
||||||
|
<ConfigurationWrapper RunnerId="Run" />
|
||||||
|
<method>
|
||||||
|
<option name="AntTarget" enabled="false" />
|
||||||
|
<option name="Make" enabled="false" />
|
||||||
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
<configuration default="false" name="CamelSpec" type="JUnit" factoryName="JUnit" enabled="false" merge="false" sample_coverage="true" runner="emma">
|
<configuration default="false" name="CamelSpec" type="JUnit" factoryName="JUnit" enabled="false" merge="false" sample_coverage="true" runner="emma">
|
||||||
<module name="akka-kernel" />
|
<module name="akka-kernel" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||||
|
|
@ -1405,6 +1703,32 @@
|
||||||
<option name="Maven.BeforeRunTask" enabled="false" />
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
|
<configuration default="false" name="NioTest" type="JUnit" factoryName="JUnit" enabled="false" merge="false" sample_coverage="true" runner="emma">
|
||||||
|
<module name="akka-funtest-java" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||||
|
<option name="ALTERNATIVE_JRE_PATH" value="" />
|
||||||
|
<option name="PACKAGE_NAME" value="se.scalablesolutions.akka.api" />
|
||||||
|
<option name="MAIN_CLASS_NAME" value="se.scalablesolutions.akka.api.NioTest" />
|
||||||
|
<option name="METHOD_NAME" value="" />
|
||||||
|
<option name="TEST_OBJECT" value="class" />
|
||||||
|
<option name="VM_PARAMETERS" value="" />
|
||||||
|
<option name="PARAMETERS" value="" />
|
||||||
|
<option name="WORKING_DIRECTORY" value="file://$PROJECT_DIR$" />
|
||||||
|
<option name="ENV_VARIABLES" />
|
||||||
|
<option name="PASS_PARENT_ENVS" value="true" />
|
||||||
|
<option name="ADDITIONAL_CLASS_PATH" />
|
||||||
|
<option name="TEST_SEARCH_SCOPE">
|
||||||
|
<value defaultName="moduleWithDependencies" />
|
||||||
|
</option>
|
||||||
|
<envs />
|
||||||
|
<RunnerSettings RunnerId="Run" />
|
||||||
|
<ConfigurationWrapper RunnerId="Run" />
|
||||||
|
<method>
|
||||||
|
<option name="AntTarget" enabled="false" />
|
||||||
|
<option name="Make" enabled="true" />
|
||||||
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
|
</method>
|
||||||
|
</configuration>
|
||||||
<configuration default="false" name="Scala Console" type="ScalaScriptConsoleRunConfiguration" factoryName="Scala Console">
|
<configuration default="false" name="Scala Console" type="ScalaScriptConsoleRunConfiguration" factoryName="Scala Console">
|
||||||
<module name="" />
|
<module name="" />
|
||||||
<setting name="vmparams" value="" />
|
<setting name="vmparams" value="" />
|
||||||
|
|
@ -1417,18 +1741,21 @@
|
||||||
<option name="Maven.BeforeRunTask" enabled="false" />
|
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||||
</method>
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
<list size="11">
|
<list size="14">
|
||||||
<item index="0" class="java.lang.String" itemvalue="Application.Kernel" />
|
<item index="0" class="java.lang.String" itemvalue="Application.Kernel" />
|
||||||
<item index="1" class="java.lang.String" itemvalue="JUnit.CamelSpec" />
|
<item index="1" class="java.lang.String" itemvalue="Application.NettyClient" />
|
||||||
<item index="2" class="java.lang.String" itemvalue="JUnit.InMemoryStateTest" />
|
<item index="2" class="java.lang.String" itemvalue="Application.NettyServer" />
|
||||||
<item index="3" class="java.lang.String" itemvalue="JUnit.PersistentStateTest" />
|
<item index="3" class="java.lang.String" itemvalue="JUnit.CamelSpec" />
|
||||||
<item index="4" class="java.lang.String" itemvalue="JUnit.ActiveObjectGuiceConfiguratorTest" />
|
<item index="4" class="java.lang.String" itemvalue="JUnit.InMemoryStateTest" />
|
||||||
<item index="5" class="java.lang.String" itemvalue="JUnit.JerseySpec" />
|
<item index="5" class="java.lang.String" itemvalue="JUnit.PersistentStateTest" />
|
||||||
<item index="6" class="java.lang.String" itemvalue="JUnit.REST" />
|
<item index="6" class="java.lang.String" itemvalue="JUnit.ActiveObjectGuiceConfiguratorTest" />
|
||||||
<item index="7" class="java.lang.String" itemvalue="JUnit.ThreadBasedDispatcherTest" />
|
<item index="7" class="java.lang.String" itemvalue="JUnit.JerseySpec" />
|
||||||
<item index="8" class="java.lang.String" itemvalue="JUnit.SupervisorSpec" />
|
<item index="8" class="java.lang.String" itemvalue="JUnit.REST" />
|
||||||
<item index="9" class="java.lang.String" itemvalue="JUnit.ActorTest" />
|
<item index="9" class="java.lang.String" itemvalue="JUnit.ThreadBasedDispatcherTest" />
|
||||||
<item index="10" class="java.lang.String" itemvalue="Scala Console.Scala Console" />
|
<item index="10" class="java.lang.String" itemvalue="JUnit.SupervisorSpec" />
|
||||||
|
<item index="11" class="java.lang.String" itemvalue="JUnit.ActorTest" />
|
||||||
|
<item index="12" class="java.lang.String" itemvalue="JUnit.NioTest" />
|
||||||
|
<item index="13" class="java.lang.String" itemvalue="Scala Console.Scala Console" />
|
||||||
</list>
|
</list>
|
||||||
<configuration name="<template>" type="WebApp" default="true" selected="false">
|
<configuration name="<template>" type="WebApp" default="true" selected="false">
|
||||||
<Host>localhost</Host>
|
<Host>localhost</Host>
|
||||||
|
|
@ -1459,7 +1786,6 @@
|
||||||
<ChangeListInfo id="38db01c1-9b0f-438f-8f52-f1210d903e0c" name="Default" comment=" # Brief commit desciption here # Full commit description here (comment lines starting with '#' will not be included) " />
|
<ChangeListInfo id="38db01c1-9b0f-438f-8f52-f1210d903e0c" name="Default" comment=" # Brief commit desciption here # Full commit description here (comment lines starting with '#' will not be included) " />
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
<option name="updated" value="1245605624442" />
|
|
||||||
</task>
|
</task>
|
||||||
<task id="LOCAL-00001" summary="Test">
|
<task id="LOCAL-00001" summary="Test">
|
||||||
<option name="active" value="true" />
|
<option name="active" value="true" />
|
||||||
|
|
@ -1470,7 +1796,7 @@
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
<option name="created" value="1245605473871" />
|
<option name="created" value="1245605473871" />
|
||||||
<option name="updated" value="1245605624477" />
|
<option name="updated" value="1245845012370" />
|
||||||
</task>
|
</task>
|
||||||
</list>
|
</list>
|
||||||
</option>
|
</option>
|
||||||
|
|
@ -1497,35 +1823,35 @@
|
||||||
</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="true" />
|
||||||
<layout>
|
<layout>
|
||||||
<window_info id="Web Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="15" side_tool="false" />
|
<window_info id="Web Preview" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="16" side_tool="false" />
|
||||||
<window_info id="Maven Projects" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32876712" sideWeight="0.69260204" 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.32876712" sideWeight="0.69260204" order="5" side_tool="false" />
|
||||||
<window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.59183675" order="4" side_tool="false" />
|
<window_info id="IDEtalk" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.59183675" order="4" side_tool="false" />
|
||||||
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.26479077" sideWeight="0.24617347" order="2" side_tool="true" />
|
<window_info id="Web" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.26479077" sideWeight="0.24617347" order="2" side_tool="true" />
|
||||||
<window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32780612" 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.32780612" 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.26479077" sideWeight="0.7028061" order="1" side_tool="false" />
|
<window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.19667739" sideWeight="0.78136533" order="1" side_tool="false" />
|
||||||
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32380074" sideWeight="0.5" order="1" side_tool="false" />
|
|
||||||
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.18673396" sideWeight="0.7742347" order="0" side_tool="true" />
|
<window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.18673396" sideWeight="0.7742347" order="0" side_tool="true" />
|
||||||
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2130102" sideWeight="0.5" order="13" side_tool="false" />
|
<window_info id="Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.21217713" sideWeight="0.5" order="14" 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="14" 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.24945927" sideWeight="0.6875" 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.24945927" sideWeight="0.6875" 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.32780612" sideWeight="0.5" order="8" side_tool="false" />
|
<window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32780612" 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="true" weight="0.28826532" sideWeight="0.5" 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.28597787" sideWeight="0.5" order="2" side_tool="false" x="4" y="22" width="1436" height="878" />
|
||||||
<window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33163264" 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.3311808" sideWeight="0.5" order="3" side_tool="false" />
|
||||||
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.39989322" sideWeight="0.75" order="0" side_tool="false" />
|
<window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3997114" sideWeight="0.75" order="0" side_tool="false" />
|
||||||
<window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="10" side_tool="false" />
|
<window_info id="IDEtalk Messages" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="11" side_tool="false" />
|
||||||
<window_info id="Tapestry" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
|
<window_info id="Tapestry" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="7" side_tool="false" />
|
||||||
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32780612" sideWeight="0.5" order="12" side_tool="false" />
|
<window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32780612" sideWeight="0.5" order="13" side_tool="false" />
|
||||||
<window_info id="Dataflow to this" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="16" side_tool="false" />
|
<window_info id="Dataflow to this" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="17" side_tool="false" />
|
||||||
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" />
|
<window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" />
|
||||||
<window_info id="REST Client" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="9" side_tool="false" />
|
<window_info id="REST Client" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="10" side_tool="false" />
|
||||||
<window_info id="Clojure REPL" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="7" side_tool="false" />
|
<window_info id="Clojure REPL" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32908162" sideWeight="0.5" order="8" side_tool="false" />
|
||||||
<window_info id="Data Sources" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.6875" order="3" side_tool="false" />
|
<window_info id="Data Sources" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3294881" sideWeight="0.6875" order="3" side_tool="false" />
|
||||||
|
<window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32380074" sideWeight="0.5" order="1" side_tool="false" />
|
||||||
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" />
|
<window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" />
|
||||||
<window_info id="FindBugs-IDEA" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32976654" sideWeight="0.5" order="11" side_tool="false" />
|
<window_info id="FindBugs-IDEA" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32976654" sideWeight="0.5" order="12" side_tool="false" />
|
||||||
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
|
<window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" />
|
||||||
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24965987" sideWeight="0.5" order="2" side_tool="false" />
|
<window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.24965987" sideWeight="0.5" order="2" side_tool="false" />
|
||||||
</layout>
|
</layout>
|
||||||
|
|
@ -1572,74 +1898,58 @@
|
||||||
</buildFile>
|
</buildFile>
|
||||||
</component>
|
</component>
|
||||||
<component name="editorHistoryManager">
|
<component name="editorHistoryManager">
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/stm/Transaction.scala">
|
<entry file="jar://$MAVEN_REPOSITORY$/org/jboss/netty/netty/3.1.0.CR1/netty-3.1.0.CR1.jar!/org/jboss/netty/channel/ChannelEvent.class">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="61" column="0" selection-start="2011" selection-end="2011" vertical-scroll-proportion="0.0">
|
<state line="7" column="27" selection-start="211" selection-end="211" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala">
|
<entry file="jar:///System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/../Classes/classes.jar!/java/util/List.class">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="12" column="6" selection-start="401" selection-end="401" vertical-scroll-proportion="0.0">
|
|
||||||
<folding />
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java">
|
<entry file="jar://$PROJECT_DIR$/../../../bin/scala-2.7.3.final/src/scala-library-src.jar!/scala/Iterable.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="70" column="14" selection-start="3446" selection-end="3446" vertical-scroll-proportion="0.0">
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateTest.java">
|
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemStateful.java">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="65" column="14" selection-start="2993" selection-end="2993" vertical-scroll-proportion="0.0">
|
<state line="43" column="13" selection-start="1161" selection-end="1165" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java">
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Supervisor.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="87" column="0" selection-start="2976" selection-end="2976" vertical-scroll-proportion="0.0">
|
<state line="19" column="11" selection-start="521" selection-end="521" vertical-scroll-proportion="0.0">
|
||||||
<folding>
|
|
||||||
<element signature="imports" expanded="true" />
|
|
||||||
</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="126" column="6" selection-start="4456" selection-end="4456" vertical-scroll-proportion="0.0">
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala">
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="27" column="33" selection-start="736" selection-end="736" vertical-scroll-proportion="0.0">
|
<state line="17" column="10" selection-start="471" selection-end="471" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala">
|
<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">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="16" column="2" selection-start="401" selection-end="401" vertical-scroll-proportion="0.0">
|
<state line="4" column="25" selection-start="95" selection-end="95" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/JerseyFoo.java">
|
<entry file="jar://$PROJECT_DIR$/lib/aspectwerkz-nodeps-jdk5-2.1.jar!/org/codehaus/aspectwerkz/joinpoint/impl/MethodRttiImpl.class">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="7" column="13" selection-start="146" selection-end="146" vertical-scroll-proportion="0.0">
|
<state line="21" column="34" selection-start="1052" selection-end="1052" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
|
@ -1651,41 +1961,51 @@
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/JerseySpec.scala">
|
<entry file="jar:///System/Library/Frameworks/JavaVM.framework/Versions/1.6.0/Home/../Classes/classes.jar!/java/lang/Class.class">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="54" column="2" selection-start="1620" selection-end="1620" vertical-scroll-proportion="0.0">
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/RestTest.java">
|
<entry file="jar://$PROJECT_DIR$/../../../bin/scala-2.7.3.final/src/scala-library-src.jar!/scala/Predef.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="62" column="23" selection-start="1977" selection-end="1977" vertical-scroll-proportion="0.0">
|
<state line="43" column="36" selection-start="1685" selection-end="1685" vertical-scroll-proportion="0.0">
|
||||||
<folding>
|
<folding />
|
||||||
<element signature="imports" expanded="true" />
|
</state>
|
||||||
</folding>
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyServer.scala">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="112" column="55" selection-start="4823" selection-end="4844" vertical-scroll-proportion="0.0">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyClient.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="0" column="0" selection-start="0" selection-end="0" vertical-scroll-proportion="0.0">
|
||||||
|
<folding />
|
||||||
|
</state>
|
||||||
|
</provider>
|
||||||
|
</entry>
|
||||||
|
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemoryStateTest.java">
|
||||||
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
|
<state line="38" column="14" selection-start="1571" selection-end="1571" vertical-scroll-proportion="0.0">
|
||||||
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
|
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="185" column="59" selection-start="6123" selection-end="6123" vertical-scroll-proportion="0.0">
|
<state line="131" column="35" selection-start="4725" selection-end="4725" vertical-scroll-proportion="0.0">
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
</entry>
|
</entry>
|
||||||
<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/NettyClient.scala">
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
<provider selected="true" editor-type-id="text-editor">
|
||||||
<state line="10" column="44" selection-start="580" selection-end="580" vertical-scroll-proportion="0.0">
|
<state line="112" column="95" selection-start="4311" selection-end="4311" vertical-scroll-proportion="0.8636364">
|
||||||
<folding>
|
|
||||||
<element signature="imports" expanded="true" />
|
|
||||||
</folding>
|
|
||||||
</state>
|
|
||||||
</provider>
|
|
||||||
</entry>
|
|
||||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/state/State.scala">
|
|
||||||
<provider selected="true" editor-type-id="text-editor">
|
|
||||||
<state line="71" column="62" selection-start="2761" selection-end="2761" vertical-scroll-proportion="1.9059305">
|
|
||||||
<folding />
|
<folding />
|
||||||
</state>
|
</state>
|
||||||
</provider>
|
</provider>
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,6 @@
|
||||||
<output url="file://$MODULE_DIR$/target/classes" />
|
<output url="file://$MODULE_DIR$/target/classes" />
|
||||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||||
<content url="file://$MODULE_DIR$">
|
<content url="file://$MODULE_DIR$">
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||||
</content>
|
</content>
|
||||||
|
|
@ -21,10 +20,6 @@
|
||||||
</orderEntry>
|
</orderEntry>
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guiceyfruit-core:2.0-beta-7" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guiceyfruit-core:2.0-beta-7" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-all:2.0-beta-7" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-all:2.0-beta-7" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.10" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.jmock:jmock:2.4.0" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.1" level="project" />
|
|
||||||
<orderEntry type="library" name="Maven: org.hamcrest:hamcrest-library:1.1" level="project" />
|
|
||||||
<orderEntry type="module" module-name="akka-kernel" exported="" />
|
<orderEntry type="module" module-name="akka-kernel" exported="" />
|
||||||
<orderEntry type="module" module-name="akka-util-java" exported="" />
|
<orderEntry type="module" module-name="akka-util-java" exported="" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.guiceyfruit:guice-core:2.0-beta-4" level="project" />
|
||||||
|
|
@ -52,7 +47,7 @@
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.10" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.10" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.BETA2" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" />
|
||||||
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-framework:1.9.9" level="project" />
|
<orderEntry type="library" name="Maven: com.sun.grizzly:grizzly-framework:1.9.9" level="project" />
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
package se.scalablesolutions.akka.api;
|
package se.scalablesolutions.akka.api;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
public class InMemFailer {
|
public class InMemFailer {
|
||||||
public void fail() {
|
public void fail() {
|
||||||
throw new RuntimeException("expected");
|
throw new RuntimeException("expected");
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,10 @@ import se.scalablesolutions.akka.annotation.transactional;
|
||||||
import se.scalablesolutions.akka.kernel.state.*;
|
import se.scalablesolutions.akka.kernel.state.*;
|
||||||
|
|
||||||
public class InMemStateful {
|
public class InMemStateful {
|
||||||
@state private TransactionalMap<String, String> mapState = new InMemoryTransactionalMap<String, String>();
|
private TransactionalState factory = new TransactionalState();
|
||||||
@state private TransactionalVector<String> vectorState = new InMemoryTransactionalVector<String>();
|
private TransactionalMap mapState = factory.newMap(new InMemoryMapConfig());
|
||||||
@state private TransactionalRef<String> refState = new TransactionalRef<String>();
|
private TransactionalVector vectorState = factory.newVector(new InMemoryVectorConfig());;
|
||||||
|
private TransactionalRef refState = factory.newRef(new InMemoryRefConfig());
|
||||||
|
|
||||||
@transactional
|
@transactional
|
||||||
public String getMapState(String key) {
|
public String getMapState(String key) {
|
||||||
|
|
@ -47,11 +48,12 @@ public class InMemStateful {
|
||||||
}
|
}
|
||||||
|
|
||||||
@transactional
|
@transactional
|
||||||
public void failure(String key, String msg, InMemFailer failer) {
|
public String failure(String key, String msg, InMemFailer failer) {
|
||||||
mapState.put(key, msg);
|
mapState.put(key, msg);
|
||||||
vectorState.add(msg);
|
vectorState.add(msg);
|
||||||
refState.swap(msg);
|
refState.swap(msg);
|
||||||
failer.fail();
|
failer.fail();
|
||||||
|
return msg;
|
||||||
}
|
}
|
||||||
|
|
||||||
@transactional
|
@transactional
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,6 @@ public class InMemoryStateTest extends TestCase {
|
||||||
} // expected
|
} // expected
|
||||||
assertEquals("init", stateful.getRefState()); // check that state is == init state
|
assertEquals("init", stateful.getRefState()); // check that state is == init state
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
public void testNestedNonTransactionalMethodHangs() {
|
public void testNestedNonTransactionalMethodHangs() {
|
||||||
InMemStateful stateful = conf.getActiveObject(InMemStateful.class);
|
InMemStateful stateful = conf.getActiveObject(InMemStateful.class);
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package se.scalablesolutions.akka.api;
|
||||||
|
|
||||||
|
public class NettyClient {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new se.scalablesolutions.akka.kernel.nio.NettyClient();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
package se.scalablesolutions.akka.api;
|
||||||
|
|
||||||
|
public class NettyServer {
|
||||||
|
public static void main(String[] args) {
|
||||||
|
new se.scalablesolutions.akka.kernel.nio.NettyServer();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.api;
|
||||||
|
|
||||||
|
import org.junit.*;
|
||||||
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
|
import junit.framework.TestSuite;
|
||||||
|
import se.scalablesolutions.akka.kernel.nio.ProxyServer;
|
||||||
|
|
||||||
|
public class NioTest extends TestSuite {
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void initialize() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void cleanup() {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void simpleRequestReply() {
|
||||||
|
ProxyServer server = new ProxyServer();
|
||||||
|
server.start();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -116,7 +116,7 @@
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
<orderEntry type="library" exported="" name="Maven: javax.xml.stream:stax-api:1.0-2" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
|
<orderEntry type="library" exported="" name="Maven: javax.activation:activation:1.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.6" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.6" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.BETA2" level="project" />
|
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.CR1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-servlet-webserver:1.9.9" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-http:1.9.9" level="project" />
|
||||||
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-framework:1.9.9" level="project" />
|
<orderEntry type="library" exported="" name="Maven: com.sun.grizzly:grizzly-framework:1.9.9" level="project" />
|
||||||
|
|
|
||||||
2
kernel/pom.xml
Executable file → Normal file
2
kernel/pom.xml
Executable file → Normal file
|
|
@ -58,7 +58,7 @@
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.jboss.netty</groupId>
|
<groupId>org.jboss.netty</groupId>
|
||||||
<artifactId>netty</artifactId>
|
<artifactId>netty</artifactId>
|
||||||
<version>3.1.0.BETA2</version>
|
<version>3.1.0.CR1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!-- For Jersey -->
|
<!-- For Jersey -->
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,11 @@ import java.lang.annotation.Annotation
|
||||||
import kernel.config.ActiveObjectGuiceConfigurator
|
import kernel.config.ActiveObjectGuiceConfigurator
|
||||||
import kernel.config.ScalaConfig._
|
import kernel.config.ScalaConfig._
|
||||||
import kernel.camel.{MessageDriven, ActiveObjectProducer}
|
import kernel.camel.{MessageDriven, ActiveObjectProducer}
|
||||||
|
import kernel.nio.{RemoteRequest, NettyClient}
|
||||||
|
import kernel.stm.{ChangeSet, Transaction}
|
||||||
import kernel.util.Helpers.ReadWriteLock
|
import kernel.util.Helpers.ReadWriteLock
|
||||||
import kernel.util.{HashCode, ResultOrFailure}
|
import kernel.util.{HashCode, ResultOrFailure}
|
||||||
import kernel.state.{Transactional, TransactionalMap, TransactionalRef, TransactionalVector}
|
import kernel.state.{Transactional, TransactionalMap, TransactionalRef, TransactionalVector}
|
||||||
import kernel.stm.Transaction
|
|
||||||
|
|
||||||
import org.codehaus.aspectwerkz.intercept.{Advisable, AroundAdvice}
|
import org.codehaus.aspectwerkz.intercept.{Advisable, AroundAdvice}
|
||||||
import org.codehaus.aspectwerkz.joinpoint.{MethodRtti, JoinPoint}
|
import org.codehaus.aspectwerkz.joinpoint.{MethodRtti, JoinPoint}
|
||||||
|
|
@ -61,6 +62,8 @@ class ActiveObjectFactory {
|
||||||
object ActiveObject {
|
object ActiveObject {
|
||||||
val AKKA_CAMEL_ROUTING_SCHEME = "akka"
|
val AKKA_CAMEL_ROUTING_SCHEME = "akka"
|
||||||
|
|
||||||
|
val RemoteClient = new NettyClient
|
||||||
|
|
||||||
private[kernel] val threadBoundTx: ThreadLocal[Option[Transaction]] = {
|
private[kernel] val threadBoundTx: ThreadLocal[Option[Transaction]] = {
|
||||||
val tl = new ThreadLocal[Option[Transaction]]
|
val tl = new ThreadLocal[Option[Transaction]]
|
||||||
tl.set(None)
|
tl.set(None)
|
||||||
|
|
@ -95,7 +98,7 @@ object ActiveObject {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// FIXME: STM that allows concurrent updates, detects collision, rolls back and restarts
|
// FIXME: STM that allows concurrent updates, detects collision, rolls back and restarts
|
||||||
sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstance: AnyRef, actor: Actor) extends AroundAdvice {
|
@serializable sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstance: AnyRef, actor: Actor) extends AroundAdvice {
|
||||||
private val changeSet = new ChangeSet(target.getName)
|
private val changeSet = new ChangeSet(target.getName)
|
||||||
|
|
||||||
private val (maps, vectors, refs) = getTransactionalItemsFor(targetInstance)
|
private val (maps, vectors, refs) = getTransactionalItemsFor(targetInstance)
|
||||||
|
|
@ -116,31 +119,60 @@ sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstanc
|
||||||
val rtti = joinpoint.getRtti.asInstanceOf[MethodRtti]
|
val rtti = joinpoint.getRtti.asInstanceOf[MethodRtti]
|
||||||
val method = rtti.getMethod
|
val method = rtti.getMethod
|
||||||
|
|
||||||
tryToCommitTransaction
|
val remoteCall = true
|
||||||
|
val isOneWay = rtti.getMethod.getReturnType == java.lang.Void.TYPE
|
||||||
|
val result: AnyRef =
|
||||||
|
if (remoteCall) {
|
||||||
|
// FIXME: Make part of TX semantics??
|
||||||
|
val future = ActiveObject.RemoteClient.send(new RemoteRequest(false, rtti.getParameterValues, rtti.getMethod.getName, target.getName, isOneWay))
|
||||||
|
if (isOneWay) null // for void methods
|
||||||
|
else {
|
||||||
|
future.await_?
|
||||||
|
val resultOrFailure = getResultOrThrowException(future)
|
||||||
|
handleResult(resultOrFailure)
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// FIXME join TX with same id, do not COMMIT
|
||||||
|
tryToCommitTransaction
|
||||||
if (isInExistingTransaction) {
|
if (isInExistingTransaction) {
|
||||||
joinExistingTransaction
|
joinExistingTransaction
|
||||||
} else {
|
} else {
|
||||||
if (method.isAnnotationPresent(Annotations.transactional)) startNewTransaction
|
if (method.isAnnotationPresent(Annotations.transactional)) startNewTransaction
|
||||||
}
|
}
|
||||||
|
try {
|
||||||
val result: AnyRef = try {
|
|
||||||
incrementTransaction
|
incrementTransaction
|
||||||
// if (rtti.getMethod.isAnnotationPresent(Annotations.oneway)) sendOneWay(joinpoint) // FIXME put in 2 different aspects
|
if (isOneWay) actor ! Invocation(joinpoint, activeTx)
|
||||||
// else handleResult(sendAndReceiveEventually(joinpoint))
|
else {
|
||||||
val result = actor !! Invocation(joinpoint, activeTx)
|
val result = actor !! Invocation(joinpoint, activeTx)
|
||||||
val resultOrFailure =
|
val resultOrFailure =
|
||||||
if (result.isDefined) result.get.asInstanceOf[ResultOrFailure[AnyRef]]
|
if (result.isDefined) result.get.asInstanceOf[ResultOrFailure[AnyRef]]
|
||||||
else throw new ActiveObjectInvocationTimeoutException("TIMED OUT")
|
else throw new ActiveObjectInvocationTimeoutException("TIMED OUT")
|
||||||
handleResult(resultOrFailure)
|
handleResult(resultOrFailure)
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
decrementTransaction
|
decrementTransaction
|
||||||
if (isTransactionAborted) removeTransactionIfTopLevel
|
if (isTransactionAborted) removeTransactionIfTopLevel
|
||||||
else tryToPrecommitTransaction
|
else tryToPrecommitTransaction
|
||||||
}
|
}
|
||||||
|
}
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: create a method setCallee/setCaller to the joinpoint interface and compiler
|
||||||
|
private def nullOutTransientFieldsInJoinpoint(joinpoint: JoinPoint) = {
|
||||||
|
val clazz = joinpoint.getClass
|
||||||
|
val callee = clazz.getDeclaredField("CALLEE")
|
||||||
|
callee.setAccessible(true)
|
||||||
|
callee.set(joinpoint, null)
|
||||||
|
val caller = clazz.getDeclaredField("CALLER")
|
||||||
|
caller.setAccessible(true)
|
||||||
|
caller.set(joinpoint, null)
|
||||||
|
val interceptors = clazz.getDeclaredField("AROUND_INTERCEPTORS")
|
||||||
|
interceptors.setAccessible(true)
|
||||||
|
interceptors.set(joinpoint, null)
|
||||||
|
}
|
||||||
|
|
||||||
private def startNewTransaction = {
|
private def startNewTransaction = {
|
||||||
val newTx = new Transaction
|
val newTx = new Transaction
|
||||||
newTx.begin(changeSet)
|
newTx.begin(changeSet)
|
||||||
|
|
@ -167,6 +199,8 @@ sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstanc
|
||||||
true
|
true
|
||||||
} else false
|
} else false
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private def handleResult(result: ResultOrFailure[AnyRef]): AnyRef = {
|
private def handleResult(result: ResultOrFailure[AnyRef]): AnyRef = {
|
||||||
try {
|
try {
|
||||||
result()
|
result()
|
||||||
|
|
@ -265,41 +299,6 @@ sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstanc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ChangeSet(val id: String) {
|
|
||||||
private val lock = new ReadWriteLock
|
|
||||||
|
|
||||||
private[kernel] def full: List[Transactional] = lock.withReadLock {
|
|
||||||
_maps ::: _vectors ::: _refs
|
|
||||||
}
|
|
||||||
|
|
||||||
// TX Maps
|
|
||||||
private[kernel] var _maps: List[TransactionalMap[_, _]] = Nil
|
|
||||||
private[kernel] def maps_=(maps: List[TransactionalMap[_, _]]) = lock.withWriteLock {
|
|
||||||
_maps = maps
|
|
||||||
}
|
|
||||||
private[kernel] def maps: List[TransactionalMap[_, _]] = lock.withReadLock {
|
|
||||||
_maps
|
|
||||||
}
|
|
||||||
|
|
||||||
// TX Vectors
|
|
||||||
private[kernel] var _vectors: List[TransactionalVector[_]] = Nil
|
|
||||||
private[kernel] def vectors_=(vectors: List[TransactionalVector[_]]) = lock.withWriteLock {
|
|
||||||
_vectors = vectors
|
|
||||||
}
|
|
||||||
private[kernel] def vectors: List[TransactionalVector[_]] = lock.withReadLock {
|
|
||||||
_vectors
|
|
||||||
}
|
|
||||||
|
|
||||||
// TX Refs
|
|
||||||
private[kernel] var _refs: List[TransactionalRef[_]] = Nil
|
|
||||||
private[kernel] def refs_=(refs: List[TransactionalRef[_]]) = lock.withWriteLock {
|
|
||||||
_refs = refs
|
|
||||||
}
|
|
||||||
private[kernel] def refs: List[TransactionalRef[_]] = lock.withReadLock {
|
|
||||||
_refs
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Represents a snapshot of the current invocation.
|
* Represents a snapshot of the current invocation.
|
||||||
*
|
*
|
||||||
|
|
@ -333,6 +332,11 @@ class ChangeSet(val id: String) {
|
||||||
*/
|
*/
|
||||||
private[kernel] class Dispatcher(val targetName: String) extends Actor {
|
private[kernel] class Dispatcher(val targetName: String) extends Actor {
|
||||||
id = targetName
|
id = targetName
|
||||||
|
|
||||||
|
// FIXME implement the pre/post restart methods and call annotated methods on the POJO
|
||||||
|
|
||||||
|
// FIXME create new POJO on creation and swap POJO at restart - joinpoint.setTarget(new POJO)
|
||||||
|
|
||||||
override def receive: PartialFunction[Any, Unit] = {
|
override def receive: PartialFunction[Any, Unit] = {
|
||||||
|
|
||||||
case Invocation(joinpoint: JoinPoint, tx: Option[Transaction]) =>
|
case Invocation(joinpoint: JoinPoint, tx: Option[Transaction]) =>
|
||||||
|
|
|
||||||
129
kernel/src/main/scala/nio/NettyClient.scala
Normal file
129
kernel/src/main/scala/nio/NettyClient.scala
Normal file
|
|
@ -0,0 +1,129 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.nio
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress
|
||||||
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
import java.util.concurrent.{Executors, ConcurrentMap, ConcurrentHashMap}
|
||||||
|
|
||||||
|
import kernel.reactor.{NullFutureResult, DefaultCompletableFutureResult, CompletableFutureResult}
|
||||||
|
import kernel.util.{HashCode, Logging};
|
||||||
|
|
||||||
|
import org.jboss.netty.handler.codec.serialization.{ObjectEncoder, ObjectDecoder}
|
||||||
|
import org.jboss.netty.bootstrap.ClientBootstrap
|
||||||
|
import org.jboss.netty.channel.socket.nio.NioClientSocketChannelFactory
|
||||||
|
import org.jboss.netty.channel._
|
||||||
|
|
||||||
|
class NettyClient extends Logging {
|
||||||
|
private val HOSTNAME = "localhost"
|
||||||
|
private val PORT = 9999
|
||||||
|
|
||||||
|
private val futures = new ConcurrentHashMap[Long, CompletableFutureResult]
|
||||||
|
|
||||||
|
private val channelFactory = new NioClientSocketChannelFactory(
|
||||||
|
Executors.newCachedThreadPool,
|
||||||
|
Executors.newCachedThreadPool)
|
||||||
|
|
||||||
|
private val bootstrap = new ClientBootstrap(channelFactory)
|
||||||
|
private val handler = new ObjectClientHandler(futures)
|
||||||
|
|
||||||
|
bootstrap.getPipeline.addLast("handler", handler)
|
||||||
|
bootstrap.setOption("tcpNoDelay", true)
|
||||||
|
bootstrap.setOption("keepAlive", true)
|
||||||
|
|
||||||
|
private val connection = bootstrap.connect(new InetSocketAddress(HOSTNAME, PORT))
|
||||||
|
log.info("Starting NIO client at [%s:%s]", HOSTNAME, PORT)
|
||||||
|
|
||||||
|
// Wait until the connection attempt succeeds or fails.
|
||||||
|
connection.awaitUninterruptibly
|
||||||
|
if (!connection.isSuccess) {
|
||||||
|
log.error("Connection has failed due to [%s]", connection.getCause)
|
||||||
|
connection.getCause.printStackTrace
|
||||||
|
}
|
||||||
|
|
||||||
|
def shutdown = {
|
||||||
|
connection.getChannel.getCloseFuture.awaitUninterruptibly
|
||||||
|
channelFactory.releaseExternalResources
|
||||||
|
}
|
||||||
|
|
||||||
|
def send(request: RemoteRequest): CompletableFutureResult = {
|
||||||
|
val escapedRequest = escapeRequest(request)
|
||||||
|
if (escapedRequest.isOneWay) {
|
||||||
|
connection.getChannel.write(escapedRequest)
|
||||||
|
new NullFutureResult
|
||||||
|
} else {
|
||||||
|
futures.synchronized {
|
||||||
|
val futureResult = new DefaultCompletableFutureResult(100000)
|
||||||
|
futures.put(request.id, futureResult)
|
||||||
|
connection.getChannel.write(escapedRequest)
|
||||||
|
futureResult
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def escapeRequest(request: RemoteRequest) = {
|
||||||
|
if (request.message.isInstanceOf[Array[Object]]) {
|
||||||
|
val args = request.message.asInstanceOf[Array[Object]].toList.asInstanceOf[scala.List[Object]]
|
||||||
|
val escapedArgs = for (arg <- args) yield {
|
||||||
|
val clazz = arg.getClass
|
||||||
|
if (clazz.getName.contains("$$ProxiedByAW")) {
|
||||||
|
new ProxyWrapper(clazz.getSuperclass.getName)
|
||||||
|
} else arg
|
||||||
|
}
|
||||||
|
request.cloneWithNewMessage(escapedArgs)
|
||||||
|
} else request
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@ChannelPipelineCoverage { val value = "all" }
|
||||||
|
class ObjectClientHandler(val futures: ConcurrentMap[Long, CompletableFutureResult]) extends SimpleChannelUpstreamHandler with Logging {
|
||||||
|
|
||||||
|
override def handleUpstream(ctx: ChannelHandlerContext, event: ChannelEvent) = {
|
||||||
|
if (event.isInstanceOf[ChannelStateEvent] && event.asInstanceOf[ChannelStateEvent].getState != ChannelState.INTEREST_OPS) {
|
||||||
|
log.debug(event.toString)
|
||||||
|
}
|
||||||
|
super.handleUpstream(ctx, event)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def channelOpen(ctx: ChannelHandlerContext, event: ChannelStateEvent) = {
|
||||||
|
// Add encoder and decoder as soon as a new channel is created so that
|
||||||
|
// a Java object is serialized and deserialized.
|
||||||
|
event.getChannel.getPipeline.addFirst("encoder", new ObjectEncoder)
|
||||||
|
event.getChannel.getPipeline.addFirst("decoder", new ObjectDecoder)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def channelConnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) {
|
||||||
|
// Send the first message if this handler is a client-side handler.
|
||||||
|
// if (!firstMessage.isEmpty) e.getChannel.write(firstMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) {
|
||||||
|
try {
|
||||||
|
val result = event.getMessage
|
||||||
|
if (result.isInstanceOf[RemoteReply]) {
|
||||||
|
val reply = result.asInstanceOf[RemoteReply]
|
||||||
|
val future = futures.get(reply.id)
|
||||||
|
if (reply.successful) {
|
||||||
|
future.completeWithResult(reply.message)
|
||||||
|
} else {
|
||||||
|
future.completeWithException(null, reply.exception)
|
||||||
|
}
|
||||||
|
} else throw new IllegalArgumentException("Unknown message received in NIO client handler: " + result)
|
||||||
|
} catch {
|
||||||
|
case e: Exception => log.error("Unexpected exception in NIO client handler: %s", e); throw e
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override def exceptionCaught(ctx: ChannelHandlerContext, event: ExceptionEvent) {
|
||||||
|
log.error("Unexpected exception from downstream: %s", event.getCause)
|
||||||
|
event.getChannel.close
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object NettyClientRunner {
|
||||||
|
def main(args: Array[String]) = {
|
||||||
|
new NettyClient
|
||||||
|
}
|
||||||
|
}
|
||||||
156
kernel/src/main/scala/nio/NettyServer.scala
Normal file
156
kernel/src/main/scala/nio/NettyServer.scala
Normal file
|
|
@ -0,0 +1,156 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.nio
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException
|
||||||
|
import java.net.InetSocketAddress
|
||||||
|
import java.util.concurrent.{ConcurrentHashMap, Executors}
|
||||||
|
import kernel.actor.{ActiveObjectFactory, Dispatcher, ActiveObject, Invocation}
|
||||||
|
import kernel.util.Logging
|
||||||
|
import java.util.ArrayList
|
||||||
|
import java.util.List
|
||||||
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
import java.util.logging.Level
|
||||||
|
import java.util.logging.Logger
|
||||||
|
|
||||||
|
import org.jboss.netty.bootstrap.ServerBootstrap
|
||||||
|
import org.jboss.netty.channel._
|
||||||
|
import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory
|
||||||
|
import org.jboss.netty.handler.codec.serialization.ObjectDecoder
|
||||||
|
import org.jboss.netty.handler.codec.serialization.ObjectEncoder
|
||||||
|
|
||||||
|
class NettyServer extends Logging {
|
||||||
|
val HOSTNAME = "localhost"
|
||||||
|
val PORT = 9999
|
||||||
|
val CONNECTION_TIMEOUT_MILLIS = 100
|
||||||
|
|
||||||
|
log.info("Starting NIO server at [%s:%s]", HOSTNAME, PORT)
|
||||||
|
|
||||||
|
val factory = new NioServerSocketChannelFactory(
|
||||||
|
Executors.newCachedThreadPool,
|
||||||
|
Executors.newCachedThreadPool)
|
||||||
|
|
||||||
|
val bootstrap = new ServerBootstrap(factory)
|
||||||
|
|
||||||
|
// FIXME provide different codecs (Thrift, Avro, Protobuf, JSON)
|
||||||
|
val handler = new ObjectServerHandler
|
||||||
|
|
||||||
|
bootstrap.getPipeline.addLast("handler", handler)
|
||||||
|
|
||||||
|
bootstrap.setOption("child.tcpNoDelay", true)
|
||||||
|
bootstrap.setOption("child.keepAlive", true)
|
||||||
|
bootstrap.setOption("child.reuseAddress", true)
|
||||||
|
bootstrap.setOption("child.connectTimeoutMillis", CONNECTION_TIMEOUT_MILLIS)
|
||||||
|
|
||||||
|
bootstrap.bind(new InetSocketAddress(HOSTNAME, PORT))
|
||||||
|
}
|
||||||
|
|
||||||
|
@ChannelPipelineCoverage {val value = "all"}
|
||||||
|
class ObjectServerHandler extends SimpleChannelUpstreamHandler with Logging {
|
||||||
|
private val activeObjectFactory = new ActiveObjectFactory
|
||||||
|
private val activeObjects = new ConcurrentHashMap[String, AnyRef]
|
||||||
|
|
||||||
|
override def handleUpstream(ctx: ChannelHandlerContext, event: ChannelEvent) = {
|
||||||
|
if (event.isInstanceOf[ChannelStateEvent] && event.asInstanceOf[ChannelStateEvent].getState != ChannelState.INTEREST_OPS) {
|
||||||
|
log.debug(event.toString)
|
||||||
|
}
|
||||||
|
super.handleUpstream(ctx, event)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def channelOpen(ctx: ChannelHandlerContext, event: ChannelStateEvent) = {
|
||||||
|
event.getChannel.getPipeline.addFirst("encoder", new ObjectEncoder)
|
||||||
|
event.getChannel.getPipeline.addFirst("decoder", new ObjectDecoder)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def channelConnected(ctx: ChannelHandlerContext, event: ChannelStateEvent) = {
|
||||||
|
// Send the first message if this handler is a client-side handler.
|
||||||
|
// if (!firstMessage.isEmpty) e.getChannel.write(firstMessage)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def messageReceived(ctx: ChannelHandlerContext, event: MessageEvent) ={
|
||||||
|
val message = event.getMessage
|
||||||
|
if (message == null) throw new IllegalStateException("Message in MessageEvent is null: " + event)
|
||||||
|
if (message.isInstanceOf[RemoteRequest]) handleRemoteRequest(message.asInstanceOf[RemoteRequest], event.getChannel)
|
||||||
|
}
|
||||||
|
|
||||||
|
override def exceptionCaught(ctx: ChannelHandlerContext, event: ExceptionEvent) = {
|
||||||
|
event.getCause.printStackTrace
|
||||||
|
log.error("Unexpected exception from downstream: %s", event.getCause)
|
||||||
|
event.getChannel.close
|
||||||
|
}
|
||||||
|
|
||||||
|
private def handleRemoteRequest(request: RemoteRequest, channel: Channel) = {
|
||||||
|
try {
|
||||||
|
log.debug(request.toString)
|
||||||
|
if (request.isActor) {
|
||||||
|
log.debug("Dispatching to [receive :: %s]", request.target)
|
||||||
|
throw new UnsupportedOperationException("TODO: remote actors")
|
||||||
|
} else {
|
||||||
|
log.debug("Dispatching to [%s :: %s]", request.method, request.target)
|
||||||
|
val activeObject = createActiveObject(request.target)
|
||||||
|
// val args = request.message.asInstanceOf[scala.List[Object]]
|
||||||
|
// val argClassesList = args.map(_.getClass)
|
||||||
|
// val argClasses = argClassesList.map(_.getClass).toArray
|
||||||
|
// val method = activeObject.getClass.getDeclaredMethod(request.method, argClasses)
|
||||||
|
|
||||||
|
val args = request.message.asInstanceOf[scala.List[AnyRef]]
|
||||||
|
val argClazzes = args.map(_.getClass)//.toArray.asInstanceOf[Array[Class[_]]]
|
||||||
|
val (unescapedArgs, unescapedArgClasses) = unescapeArgs(args, argClazzes)
|
||||||
|
val method = activeObject.getClass.getDeclaredMethod(request.method, unescapedArgClasses)
|
||||||
|
try {
|
||||||
|
if (request.isOneWay) method.invoke(activeObject, unescapedArgs)
|
||||||
|
else {
|
||||||
|
val result = method.invoke(activeObject, unescapedArgs)
|
||||||
|
log.debug("Returning result [%s]", result)
|
||||||
|
channel.write(request.newReplyWithMessage(result))
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
case e: InvocationTargetException =>
|
||||||
|
log.error("Could not invoke remote active object or actor [%s :: %s] due to: %s", request.method, request.target, e.getCause)
|
||||||
|
e.getCause.printStackTrace
|
||||||
|
channel.write(request.newReplyWithException(e.getCause))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch {
|
||||||
|
case e: Exception =>
|
||||||
|
log.error("Could not invoke remote active object or actor [%s :: %s] due to: %s", request.method, request.target, e)
|
||||||
|
e.printStackTrace
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private def unescapeArgs(args: scala.List[AnyRef], argClasses: scala.List[Class[_]]) = {
|
||||||
|
val unescapedArgs = new Array[AnyRef](args.size)
|
||||||
|
val unescapedArgClasses = new Array[Class[_]](args.size)
|
||||||
|
|
||||||
|
val escapedArgs = for (i <- 0 until args.size) {
|
||||||
|
if (args(i).isInstanceOf[ProxyWrapper]) {
|
||||||
|
val proxyName = args(i).asInstanceOf[ProxyWrapper].proxyName
|
||||||
|
val activeObject = createActiveObject(proxyName)
|
||||||
|
unescapedArgs(i) = activeObject
|
||||||
|
unescapedArgClasses(i) = Class.forName(proxyName)
|
||||||
|
} else {
|
||||||
|
unescapedArgs(i) = args(i)
|
||||||
|
unescapedArgClasses(i) = argClasses(i)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
(unescapedArgs, unescapedArgClasses)
|
||||||
|
}
|
||||||
|
|
||||||
|
private def createActiveObject(name: String) = {
|
||||||
|
val activeObjectOrNull = activeObjects.get(name)
|
||||||
|
if (activeObjectOrNull == null) {
|
||||||
|
val clazz = Class.forName(name)
|
||||||
|
val newInstance = clazz.newInstance.asInstanceOf[AnyRef] // activeObjectFactory.newInstance(clazz, new Dispatcher(invocation.target)).asInstanceOf[AnyRef]
|
||||||
|
activeObjects.put(name, newInstance)
|
||||||
|
newInstance
|
||||||
|
} else activeObjectOrNull
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
object NettyServerRunner {
|
||||||
|
def main(args: Array[String]) = {
|
||||||
|
new NettyServer
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,97 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.nio
|
||||||
|
|
||||||
|
import java.io.PrintWriter
|
||||||
|
import java.net.{Socket, InetAddress, InetSocketAddress}
|
||||||
|
|
||||||
|
import java.util.concurrent.Executors
|
||||||
|
import java.util.{HashSet, Date}
|
||||||
|
import java.nio.channels.{Selector, ServerSocketChannel, SelectionKey}
|
||||||
|
import java.nio.channels.spi.SelectorProvider
|
||||||
|
import kernel.actor.Invocation
|
||||||
|
import kernel.reactor.{MessageQueue, MessageDemultiplexer, MessageHandle, MessageDispatcherBase}
|
||||||
|
|
||||||
|
class ProxyServer extends MessageDispatcherBase {
|
||||||
|
val port = 9999
|
||||||
|
val host = InetAddress.getLocalHost
|
||||||
|
|
||||||
|
// Selector for incoming time requests
|
||||||
|
val acceptSelector = SelectorProvider.provider.openSelector
|
||||||
|
|
||||||
|
// Create a new server socket and set to non blocking mode
|
||||||
|
val ssc = ServerSocketChannel.open
|
||||||
|
ssc.configureBlocking(true)
|
||||||
|
|
||||||
|
// Bind the server socket to the local host and port
|
||||||
|
val address = new InetSocketAddress(host, port)
|
||||||
|
ssc.socket.bind(address)
|
||||||
|
|
||||||
|
// Register accepts on the server socket with the selector. This
|
||||||
|
// step tells the selector that the socket wants to be put on the
|
||||||
|
// ready list when accept operations occur, so allowing multiplexed
|
||||||
|
// non-blocking I/O to take place.
|
||||||
|
val acceptKey = ssc.register(acceptSelector, SelectionKey.OP_ACCEPT)
|
||||||
|
|
||||||
|
// FIXME: make configurable using configgy + JMX
|
||||||
|
// FIXME: create one executor per invocation to dispatch(..), grab config settings for specific actor (set in registerHandler)
|
||||||
|
private val threadPoolSize: Int = 100
|
||||||
|
private val handlerExecutor = Executors.newCachedThreadPool()
|
||||||
|
|
||||||
|
def start = if (!active) {
|
||||||
|
active = true
|
||||||
|
selectorThread = new Thread {
|
||||||
|
override def run = {
|
||||||
|
while (active) {
|
||||||
|
try {
|
||||||
|
guard.synchronized { /* empty */ } // prevents risk for deadlock as described in [http://developers.sun.com/learning/javaoneonline/2006/coreplatform/TS-1315.pdf]
|
||||||
|
|
||||||
|
val keysAdded = acceptSelector.select
|
||||||
|
val readyKeys = acceptSelector.selectedKeys
|
||||||
|
val iter = readyKeys.iterator
|
||||||
|
while (iter.hasNext) {
|
||||||
|
val key = iter.next.asInstanceOf[SelectionKey]
|
||||||
|
iter.remove
|
||||||
|
/*
|
||||||
|
if (key.isValid && key.isReadable) {
|
||||||
|
eventHandler.onReadableEvent(key.channel)
|
||||||
|
}
|
||||||
|
if (key.isValid && key.isWritable) {
|
||||||
|
key.interestOps(SelectionKey.OP_READ) // reset to read only
|
||||||
|
eventHandler.onWriteableEvent(key.channel)
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
val channel = key.channel.asInstanceOf[ServerSocketChannel]
|
||||||
|
val socket = channel.accept.socket
|
||||||
|
socket.setKeepAlive(true)
|
||||||
|
|
||||||
|
|
||||||
|
val in = socket.getInputStream
|
||||||
|
val out = new PrintWriter(socket.getOutputStream, true)
|
||||||
|
out.println(new Date)
|
||||||
|
out.close
|
||||||
|
|
||||||
|
/* handlerExecutor.execute(new Runnable {
|
||||||
|
override def run = {
|
||||||
|
try {
|
||||||
|
val result = handle.message.asInstanceOf[Invocation].joinpoint.proceed
|
||||||
|
handle.future.completeWithResult(result)
|
||||||
|
} catch {
|
||||||
|
case e: Exception => handle.future.completeWithException(e)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
selectorThread.start
|
||||||
|
}
|
||||||
|
|
||||||
|
override protected def doShutdown = handlerExecutor.shutdownNow
|
||||||
|
}
|
||||||
76
kernel/src/main/scala/nio/RequestReply.scala
Normal file
76
kernel/src/main/scala/nio/RequestReply.scala
Normal file
|
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.nio
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicLong
|
||||||
|
import kernel.util.HashCode
|
||||||
|
|
||||||
|
object IdFactory {
|
||||||
|
private val id = new AtomicLong
|
||||||
|
def nextId = id.getAndIncrement
|
||||||
|
}
|
||||||
|
|
||||||
|
@serializable class ProxyWrapper(val proxyName: String)
|
||||||
|
|
||||||
|
@serializable class RemoteRequest(val isActor: Boolean, val message: AnyRef, val method: String, val target: String, val isOneWay: Boolean) {
|
||||||
|
private[RemoteRequest] var _id = IdFactory.nextId
|
||||||
|
def id = _id
|
||||||
|
|
||||||
|
override def toString: String = synchronized {
|
||||||
|
"RemoteRequest[isActor: " + isActor + " | message: " + message + " | method: " + method + " | target: " + target + " | isOneWay: " + isOneWay + "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
override def hashCode(): Int = synchronized {
|
||||||
|
var result = HashCode.SEED
|
||||||
|
result = HashCode.hash(result, isActor)
|
||||||
|
result = HashCode.hash(result, message)
|
||||||
|
result = HashCode.hash(result, method)
|
||||||
|
result = HashCode.hash(result, target)
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
override def equals(that: Any): Boolean = synchronized {
|
||||||
|
that != null &&
|
||||||
|
that.isInstanceOf[RemoteRequest] &&
|
||||||
|
that.asInstanceOf[RemoteRequest].isActor == isActor &&
|
||||||
|
that.asInstanceOf[RemoteRequest].message == message &&
|
||||||
|
that.asInstanceOf[RemoteRequest].method == method &&
|
||||||
|
that.asInstanceOf[RemoteRequest].target == target
|
||||||
|
}
|
||||||
|
|
||||||
|
def newReplyWithMessage(message: AnyRef) = synchronized { new RemoteReply(true, id, message, null) }
|
||||||
|
|
||||||
|
def newReplyWithException(error: Throwable) = synchronized { new RemoteReply(false, id, null, error) }
|
||||||
|
|
||||||
|
def cloneWithNewMessage(message: AnyRef) = synchronized {
|
||||||
|
val request = new RemoteRequest(isActor, message, method, target, isOneWay)
|
||||||
|
request._id = id
|
||||||
|
request
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@serializable class RemoteReply(val successful: Boolean, val id: Long, val message: AnyRef, val exception: Throwable) {
|
||||||
|
override def toString: String = synchronized {
|
||||||
|
"RemoteReply[successful: " + successful + " | id: " + id + " | message: " + message + " | exception: " + exception + "]"
|
||||||
|
}
|
||||||
|
|
||||||
|
override def hashCode(): Int = synchronized {
|
||||||
|
var result = HashCode.SEED
|
||||||
|
result = HashCode.hash(result, successful)
|
||||||
|
result = HashCode.hash(result, id)
|
||||||
|
result = HashCode.hash(result, message)
|
||||||
|
result = HashCode.hash(result, exception)
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
override def equals(that: Any): Boolean = synchronized {
|
||||||
|
that != null &&
|
||||||
|
that.isInstanceOf[RemoteReply] &&
|
||||||
|
that.asInstanceOf[RemoteReply].successful == successful &&
|
||||||
|
that.asInstanceOf[RemoteReply].id == id &&
|
||||||
|
that.asInstanceOf[RemoteReply].message == message &&
|
||||||
|
that.asInstanceOf[RemoteReply].exception == exception
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -10,15 +10,29 @@
|
||||||
*/
|
*/
|
||||||
package se.scalablesolutions.akka.kernel.reactor
|
package se.scalablesolutions.akka.kernel.reactor
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.concurrent.{LinkedBlockingQueue, TimeUnit, RejectedExecutionHandler, ThreadPoolExecutor}
|
||||||
|
|
||||||
class EventBasedThreadPoolDispatcher extends MessageDispatcherBase {
|
class EventBasedThreadPoolDispatcher extends MessageDispatcherBase {
|
||||||
import java.util.concurrent.Executors
|
import java.util.concurrent.Executors
|
||||||
import java.util.HashSet
|
import java.util.HashSet
|
||||||
|
|
||||||
// FIXME: make configurable using configgy + JMX
|
// FIXME: make configurable using configgy + JMX
|
||||||
// FIXME: create one executor per invocation to dispatch(..), grab config settings for specific actor (set in registerHandler)
|
|
||||||
private val threadPoolSize: Int = 100
|
|
||||||
private val busyHandlers = new HashSet[AnyRef]
|
private val busyHandlers = new HashSet[AnyRef]
|
||||||
private val handlerExecutor = Executors.newCachedThreadPool()
|
|
||||||
|
private val minNrThreads, maxNrThreads = 10
|
||||||
|
private val timeOut = 1000L // ????
|
||||||
|
private val timeUnit = TimeUnit.MILLISECONDS
|
||||||
|
private val threadFactory = new MonitorableThreadFactory("akka:kernel")
|
||||||
|
private val rejectedExecutionHandler = new RejectedExecutionHandler() {
|
||||||
|
def rejectedExecution(runnable: Runnable, threadPoolExecutor: ThreadPoolExecutor) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
private val queue = new LinkedBlockingQueue[Runnable]
|
||||||
|
private val handlerExecutor = new ThreadPoolExecutor(minNrThreads, maxNrThreads, timeOut, timeUnit, queue, threadFactory, rejectedExecutionHandler)
|
||||||
|
|
||||||
|
//private val handlerExecutor = Executors.newCachedThreadPool()
|
||||||
|
|
||||||
def start = if (!active) {
|
def start = if (!active) {
|
||||||
active = true
|
active = true
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,10 @@
|
||||||
*/
|
*/
|
||||||
package se.scalablesolutions.akka.kernel.reactor
|
package se.scalablesolutions.akka.kernel.reactor
|
||||||
|
|
||||||
|
import java.util.concurrent.atomic.AtomicInteger
|
||||||
|
import java.util.concurrent.ThreadFactory
|
||||||
import java.util.{LinkedList, Queue}
|
import java.util.{LinkedList, Queue}
|
||||||
import kernel.util.HashCode
|
import kernel.util.{Logging, HashCode}
|
||||||
|
|
||||||
trait MessageHandler {
|
trait MessageHandler {
|
||||||
def handle(message: MessageHandle)
|
def handle(message: MessageHandle)
|
||||||
}
|
}
|
||||||
|
|
@ -75,3 +76,34 @@ class MessageQueue {
|
||||||
queue.notifyAll
|
queue.notifyAll
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class MonitorableThreadFactory(val name: String) extends ThreadFactory {
|
||||||
|
def newThread(runnable: Runnable) =
|
||||||
|
//new MonitorableThread(runnable, name)
|
||||||
|
new Thread(runnable)
|
||||||
|
}
|
||||||
|
|
||||||
|
object MonitorableThread {
|
||||||
|
val DEFAULT_NAME = "MonitorableThread"
|
||||||
|
val created = new AtomicInteger
|
||||||
|
val alive = new AtomicInteger
|
||||||
|
@volatile val debugLifecycle = false
|
||||||
|
}
|
||||||
|
class MonitorableThread(runnable: Runnable, name: String)
|
||||||
|
extends Thread(runnable, name + "-" + MonitorableThread.created.incrementAndGet) {//with Logging {
|
||||||
|
setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
|
||||||
|
def uncaughtException(thread: Thread, cause: Throwable) = {} //log.error("UNCAUGHT in thread [%s] cause [%s]", thread.getName, cause)
|
||||||
|
})
|
||||||
|
|
||||||
|
override def run = {
|
||||||
|
val debug = MonitorableThread.debugLifecycle
|
||||||
|
//if (debug) log.debug("Created %s", getName)
|
||||||
|
try {
|
||||||
|
MonitorableThread.alive.incrementAndGet
|
||||||
|
super.run
|
||||||
|
} finally {
|
||||||
|
MonitorableThread.alive.decrementAndGet
|
||||||
|
//if (debug) log.debug("Exiting %s", getName)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,17 +18,17 @@ abstract class TransactionalRefConfig extends TransactionalStateConfig
|
||||||
|
|
||||||
abstract class PersistentStorageConfig extends TransactionalStateConfig
|
abstract class PersistentStorageConfig extends TransactionalStateConfig
|
||||||
case class CassandraStorageConfig extends PersistentStorageConfig
|
case class CassandraStorageConfig extends PersistentStorageConfig
|
||||||
case object TerracottaStorageConfig extends PersistentStorageConfig
|
case class TerracottaStorageConfig extends PersistentStorageConfig
|
||||||
case object TokyoCabinetStorageConfig extends PersistentStorageConfig
|
case class TokyoCabinetStorageConfig extends PersistentStorageConfig
|
||||||
|
|
||||||
case class PersistentMapConfig(storage: PersistentStorageConfig) extends TransactionalMapConfig
|
case class PersistentMapConfig(storage: PersistentStorageConfig) extends TransactionalMapConfig
|
||||||
case object InMemoryMapConfig extends TransactionalMapConfig
|
case class InMemoryMapConfig extends TransactionalMapConfig
|
||||||
|
|
||||||
case class PersistentVectorConfig(storage: PersistentStorageConfig) extends TransactionalVectorConfig
|
case class PersistentVectorConfig(storage: PersistentStorageConfig) extends TransactionalVectorConfig
|
||||||
case object InMemoryVectorConfig extends TransactionalVectorConfig
|
case class InMemoryVectorConfig extends TransactionalVectorConfig
|
||||||
|
|
||||||
case class PersistentRefConfig(storage: PersistentStorageConfig) extends TransactionalRefConfig
|
case class PersistentRefConfig(storage: PersistentStorageConfig) extends TransactionalRefConfig
|
||||||
case object InMemoryRefConfig extends TransactionalRefConfig
|
case class InMemoryRefConfig extends TransactionalRefConfig
|
||||||
|
|
||||||
object TransactionalState extends TransactionalState
|
object TransactionalState extends TransactionalState
|
||||||
class TransactionalState {
|
class TransactionalState {
|
||||||
|
|
@ -39,13 +39,13 @@ class TransactionalState {
|
||||||
* val myMap = TransactionalState.newMap(PersistentMapConfig(CassandraStorageConfig))
|
* val myMap = TransactionalState.newMap(PersistentMapConfig(CassandraStorageConfig))
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
def newMap(config: TransactionalMapConfig): TransactionalMap = config match {
|
def newMap(config: TransactionalMapConfig) = config match {
|
||||||
case PersistentMapConfig(storage) => storage match {
|
case PersistentMapConfig(storage) => storage match {
|
||||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalMap
|
case CassandraStorageConfig() => new CassandraPersistentTransactionalMap
|
||||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
case TerracottaStorageConfig() => throw new UnsupportedOperationException
|
||||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
case TokyoCabinetStorageConfig() => throw new UnsupportedOperationException
|
||||||
}
|
}
|
||||||
case InMemoryMapConfig => new InMemoryTransactionalMap
|
case InMemoryMapConfig() => new InMemoryTransactionalMap
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -54,13 +54,13 @@ class TransactionalState {
|
||||||
* val myVector = TransactionalState.newVector(PersistentVectorConfig(CassandraStorageConfig))
|
* val myVector = TransactionalState.newVector(PersistentVectorConfig(CassandraStorageConfig))
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
def newVector(config: TransactionalVectorConfig): TransactionalVector = config match {
|
def newVector(config: TransactionalVectorConfig) = config match {
|
||||||
case PersistentVectorConfig(storage) => storage match {
|
case PersistentVectorConfig(storage) => storage match {
|
||||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalVector
|
case CassandraStorageConfig() => new CassandraPersistentTransactionalVector
|
||||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
case TerracottaStorageConfig() => throw new UnsupportedOperationException
|
||||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
case TokyoCabinetStorageConfig() => throw new UnsupportedOperationException
|
||||||
}
|
}
|
||||||
case InMemoryVectorConfig => new InMemoryTransactionalVector
|
case InMemoryVectorConfig() => new InMemoryTransactionalVector
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -69,13 +69,13 @@ class TransactionalState {
|
||||||
* val myRef = TransactionalState.newRef(PersistentRefConfig(CassandraStorageConfig))
|
* val myRef = TransactionalState.newRef(PersistentRefConfig(CassandraStorageConfig))
|
||||||
* </pre>
|
* </pre>
|
||||||
*/
|
*/
|
||||||
def newRef(config: TransactionalRefConfig): TransactionalRef = config match {
|
def newRef(config: TransactionalRefConfig) = config match {
|
||||||
case PersistentRefConfig(storage) => storage match {
|
case PersistentRefConfig(storage) => storage match {
|
||||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalRef
|
case CassandraStorageConfig() => new CassandraPersistentTransactionalRef
|
||||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
case TerracottaStorageConfig() => throw new UnsupportedOperationException
|
||||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
case TokyoCabinetStorageConfig() => throw new UnsupportedOperationException
|
||||||
}
|
}
|
||||||
case InMemoryRefConfig => new TransactionalRef
|
case InMemoryRefConfig() => new TransactionalRef
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
44
kernel/src/main/scala/stm/ChangeSet.scala
Normal file
44
kernel/src/main/scala/stm/ChangeSet.scala
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
/**
|
||||||
|
* Copyright (C) 2009 Scalable Solutions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package se.scalablesolutions.akka.kernel.stm
|
||||||
|
|
||||||
|
import kernel.state.{Transactional, TransactionalMap, TransactionalVector, TransactionalRef}
|
||||||
|
import kernel.util.Helpers.ReadWriteLock
|
||||||
|
|
||||||
|
class ChangeSet(val id: String) {
|
||||||
|
private val lock = new ReadWriteLock
|
||||||
|
|
||||||
|
private[kernel] def full: List[Transactional] = lock.withReadLock {
|
||||||
|
_maps ::: _vectors ::: _refs
|
||||||
|
}
|
||||||
|
|
||||||
|
// TX Maps
|
||||||
|
private[kernel] var _maps: List[TransactionalMap[_, _]] = Nil
|
||||||
|
private[kernel] def maps_=(maps: List[TransactionalMap[_, _]]) = lock.withWriteLock {
|
||||||
|
_maps = maps
|
||||||
|
}
|
||||||
|
private[kernel] def maps: List[TransactionalMap[_, _]] = lock.withReadLock {
|
||||||
|
_maps
|
||||||
|
}
|
||||||
|
|
||||||
|
// TX Vectors
|
||||||
|
private[kernel] var _vectors: List[TransactionalVector[_]] = Nil
|
||||||
|
private[kernel] def vectors_=(vectors: List[TransactionalVector[_]]) = lock.withWriteLock {
|
||||||
|
_vectors = vectors
|
||||||
|
}
|
||||||
|
private[kernel] def vectors: List[TransactionalVector[_]] = lock.withReadLock {
|
||||||
|
_vectors
|
||||||
|
}
|
||||||
|
|
||||||
|
// TX Refs
|
||||||
|
private[kernel] var _refs: List[TransactionalRef[_]] = Nil
|
||||||
|
private[kernel] def refs_=(refs: List[TransactionalRef[_]]) = lock.withWriteLock {
|
||||||
|
_refs = refs
|
||||||
|
}
|
||||||
|
private[kernel] def refs: List[TransactionalRef[_]] = lock.withReadLock {
|
||||||
|
_refs
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -5,7 +5,6 @@
|
||||||
package se.scalablesolutions.akka.kernel.stm
|
package se.scalablesolutions.akka.kernel.stm
|
||||||
|
|
||||||
import java.util.concurrent.atomic.{AtomicInteger, AtomicLong}
|
import java.util.concurrent.atomic.{AtomicInteger, AtomicLong}
|
||||||
import kernel.actor.ChangeSet
|
|
||||||
import kernel.util.Logging
|
import kernel.util.Logging
|
||||||
import scala.collection.mutable.{HashSet, HashMap}
|
import scala.collection.mutable.{HashSet, HashMap}
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue