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!/" />
|
||||
</SOURCES>
|
||||
</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">
|
||||
<CLASSES>
|
||||
<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!/" />
|
||||
</SOURCES>
|
||||
</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>
|
||||
<UsedPathMacros>
|
||||
<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"?>
|
||||
<project relativePaths="false" version="4">
|
||||
<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..." />
|
||||
</component>
|
||||
<component name="ChangeListManager">
|
||||
<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/test/scala/ActorTest.scala" afterPath="$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala" />
|
||||
<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/PersistentStateful.java" afterPath="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateful.java" />
|
||||
<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$/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$/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 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" />
|
||||
|
|
@ -31,7 +50,7 @@
|
|||
</component>
|
||||
<component name="DebuggerManager">
|
||||
<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="LOG_ENABLED" value="false" />
|
||||
<option name="LOG_EXPRESSION_ENABLED" value="false" />
|
||||
|
|
@ -44,7 +63,33 @@
|
|||
<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="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="LOG_ENABLED" value="false" />
|
||||
<option name="LOG_EXPRESSION_ENABLED" value="false" />
|
||||
|
|
@ -116,97 +161,37 @@
|
|||
<component name="FileColors" enabled="false" enabledForTabs="false" />
|
||||
<component name="FileEditorManager">
|
||||
<leaf>
|
||||
<file leaf-file-name="Actor.scala" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/Actor.scala">
|
||||
<file leaf-file-name="NettyServer.scala" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyServer.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">
|
||||
<state line="112" column="55" selection-start="4823" selection-end="4844" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="ActiveObjectGuiceConfiguratorTest.java" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/ActiveObjectGuiceConfiguratorTest.java">
|
||||
<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/InMemoryStateTest.java">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="87" column="0" selection-start="2976" selection-end="2976" 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">
|
||||
<state line="38" column="14" selection-start="1571" selection-end="1571" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</file>
|
||||
<file leaf-file-name="ActorTest.scala" pinned="false" current="false" current-in-tab="false">
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/test/scala/ActorTest.scala">
|
||||
<file leaf-file-name="NettyClient.scala" pinned="false" current="true" current-in-tab="true">
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
</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">
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
|
||||
<provider selected="true" editor-type-id="text-editor">
|
||||
<state line="185" column="59" selection-start="6123" selection-end="6123" 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">
|
||||
<state line="131" column="35" selection-start="4725" selection-end="4725" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
|
@ -225,22 +210,22 @@
|
|||
<component name="IdeDocumentHistory">
|
||||
<option name="changedFiles">
|
||||
<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/ActiveObjectGuiceConfiguratorTest.java" />
|
||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/PersistentStateTest.java" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/reactor/Reactor.scala" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/test/scala/SupervisorSpec.scala" />
|
||||
<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/InMemoryStateTest.java" />
|
||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NioTest.java" />
|
||||
<option value="$PROJECT_DIR$/kernel/pom.xml" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/ProxyServer.scala" />
|
||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/NettyServer.java" />
|
||||
<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/stm/ActiveObject.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$/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$/kernel/src/main/scala/actor/Actor.scala" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/state/CassandraNode.scala" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/test/scala/ActorTest.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" />
|
||||
<option value="$PROJECT_DIR$/fun-test-java/src/test/java/se/scalablesolutions/akka/api/InMemFailer.java" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/RequestReply.scala" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyServer.scala" />
|
||||
<option value="$PROJECT_DIR$/kernel/src/main/scala/nio/NettyClient.scala" />
|
||||
</list>
|
||||
</option>
|
||||
</component>
|
||||
|
|
@ -313,11 +298,11 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
|
||||
<option name="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="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" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -335,15 +320,41 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.LibraryGroupNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="Maven: org.codehaus.aspectwerkz:aspectwerkz-nodeps-jdk5:2.1" />
|
||||
<option name="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="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" />
|
||||
</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" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -391,33 +402,7 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="inlining" />
|
||||
<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="myItemId" value="impl" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -452,8 +437,26 @@
|
|||
<option name="myItemId" value="src" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<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" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
|
|
@ -486,6 +489,10 @@
|
|||
<option name="myItemId" value="scala" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="util" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
|
|
@ -577,6 +584,36 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="akka" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="akka-kernel" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="kernel" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="src" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="main" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="scala" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="nio" />
|
||||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
<PATH>
|
||||
<PATH_ELEMENT>
|
||||
<option name="myItemId" value="akka" />
|
||||
|
|
@ -633,7 +670,7 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</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" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -743,7 +780,41 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</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" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -807,7 +878,75 @@
|
|||
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
|
||||
</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" />
|
||||
</PATH_ELEMENT>
|
||||
</PATH>
|
||||
|
|
@ -820,6 +959,118 @@
|
|||
<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>
|
||||
<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_ELEMENT>
|
||||
|
|
@ -966,12 +1217,12 @@
|
|||
<property name="MemberChooser.showClasses" value="true" />
|
||||
<property name="project.structure.side.proportion" value="0.2" />
|
||||
<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="GoToClass.toSaveIncludeLibraries" value="false" />
|
||||
<property name="RunManagerConfig.showSettingsBeforeRunnig" value="false" />
|
||||
<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="MemberChooser.sorted" value="false" />
|
||||
<property name="FileHistory.git4idea.history.GitHistoryProvider_treeOrder1" value="1" />
|
||||
|
|
@ -987,10 +1238,11 @@
|
|||
<recent name="se.scalablesolutions.akka.api" />
|
||||
</key>
|
||||
<key name="MoveClassesOrPackagesDialog.RECENTS_KEY">
|
||||
<recent name="stm" />
|
||||
<recent name="actor" />
|
||||
</key>
|
||||
</component>
|
||||
<component name="RunManager" selected="JUnit.PersistentStateTest">
|
||||
<component name="RunManager" selected="JUnit.InMemoryStateTest">
|
||||
<configuration default="true" type="Remote" factoryName="Remote">
|
||||
<option name="USE_SOCKET_TRANSPORT" value="true" />
|
||||
<option name="SERVER_MODE" value="false" />
|
||||
|
|
@ -1135,6 +1387,52 @@
|
|||
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||
</method>
|
||||
</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">
|
||||
<module name="akka-kernel" />
|
||||
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
|
||||
|
|
@ -1405,6 +1703,32 @@
|
|||
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||
</method>
|
||||
</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">
|
||||
<module name="" />
|
||||
<setting name="vmparams" value="" />
|
||||
|
|
@ -1417,18 +1741,21 @@
|
|||
<option name="Maven.BeforeRunTask" enabled="false" />
|
||||
</method>
|
||||
</configuration>
|
||||
<list size="11">
|
||||
<list size="14">
|
||||
<item index="0" class="java.lang.String" itemvalue="Application.Kernel" />
|
||||
<item index="1" class="java.lang.String" itemvalue="JUnit.CamelSpec" />
|
||||
<item index="2" class="java.lang.String" itemvalue="JUnit.InMemoryStateTest" />
|
||||
<item index="3" class="java.lang.String" itemvalue="JUnit.PersistentStateTest" />
|
||||
<item index="4" class="java.lang.String" itemvalue="JUnit.ActiveObjectGuiceConfiguratorTest" />
|
||||
<item index="5" class="java.lang.String" itemvalue="JUnit.JerseySpec" />
|
||||
<item index="6" class="java.lang.String" itemvalue="JUnit.REST" />
|
||||
<item index="7" class="java.lang.String" itemvalue="JUnit.ThreadBasedDispatcherTest" />
|
||||
<item index="8" class="java.lang.String" itemvalue="JUnit.SupervisorSpec" />
|
||||
<item index="9" class="java.lang.String" itemvalue="JUnit.ActorTest" />
|
||||
<item index="10" class="java.lang.String" itemvalue="Scala Console.Scala Console" />
|
||||
<item index="1" class="java.lang.String" itemvalue="Application.NettyClient" />
|
||||
<item index="2" class="java.lang.String" itemvalue="Application.NettyServer" />
|
||||
<item index="3" class="java.lang.String" itemvalue="JUnit.CamelSpec" />
|
||||
<item index="4" class="java.lang.String" itemvalue="JUnit.InMemoryStateTest" />
|
||||
<item index="5" class="java.lang.String" itemvalue="JUnit.PersistentStateTest" />
|
||||
<item index="6" class="java.lang.String" itemvalue="JUnit.ActiveObjectGuiceConfiguratorTest" />
|
||||
<item index="7" class="java.lang.String" itemvalue="JUnit.JerseySpec" />
|
||||
<item index="8" class="java.lang.String" itemvalue="JUnit.REST" />
|
||||
<item index="9" class="java.lang.String" itemvalue="JUnit.ThreadBasedDispatcherTest" />
|
||||
<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>
|
||||
<configuration name="<template>" type="WebApp" default="true" selected="false">
|
||||
<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) " />
|
||||
</list>
|
||||
</option>
|
||||
<option name="updated" value="1245605624442" />
|
||||
</task>
|
||||
<task id="LOCAL-00001" summary="Test">
|
||||
<option name="active" value="true" />
|
||||
|
|
@ -1470,7 +1796,7 @@
|
|||
</list>
|
||||
</option>
|
||||
<option name="created" value="1245605473871" />
|
||||
<option name="updated" value="1245605624477" />
|
||||
<option name="updated" value="1245845012370" />
|
||||
</task>
|
||||
</list>
|
||||
</option>
|
||||
|
|
@ -1497,35 +1823,35 @@
|
|||
</todo-panel>
|
||||
</component>
|
||||
<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" />
|
||||
<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="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="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="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="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="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="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="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="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="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="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="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="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="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="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="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.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.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="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="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="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="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="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="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="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="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="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="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="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="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>
|
||||
|
|
@ -1572,74 +1898,58 @@
|
|||
</buildFile>
|
||||
</component>
|
||||
<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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/reactor/EventBasedThreadPoolDispatcher.scala">
|
||||
<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">
|
||||
<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="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">
|
||||
<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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<state line="87" column="0" selection-start="2976" selection-end="2976" 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">
|
||||
<state line="19" column="11" selection-start="521" selection-end="521" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
|
|
@ -1651,41 +1961,51 @@
|
|||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<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 />
|
||||
</state>
|
||||
</provider>
|
||||
</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">
|
||||
<state line="62" column="23" selection-start="1977" selection-end="1977" vertical-scroll-proportion="0.0">
|
||||
<folding>
|
||||
<element signature="imports" expanded="true" />
|
||||
</folding>
|
||||
<state line="43" column="36" selection-start="1685" selection-end="1685" vertical-scroll-proportion="0.0">
|
||||
<folding />
|
||||
</state>
|
||||
</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>
|
||||
</provider>
|
||||
</entry>
|
||||
<entry file="file://$PROJECT_DIR$/kernel/src/main/scala/actor/ActiveObject.scala">
|
||||
<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>
|
||||
<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">
|
||||
<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>
|
||||
<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">
|
||||
<state line="112" column="95" selection-start="4311" selection-end="4311" vertical-scroll-proportion="0.8636364">
|
||||
<folding />
|
||||
</state>
|
||||
</provider>
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@
|
|||
<output url="file://$MODULE_DIR$/target/classes" />
|
||||
<output-test url="file://$MODULE_DIR$/target/test-classes" />
|
||||
<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" />
|
||||
<excludeFolder url="file://$MODULE_DIR$/target" />
|
||||
</content>
|
||||
|
|
@ -21,10 +20,6 @@
|
|||
</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: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-util-java" exported="" />
|
||||
<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.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: 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-http: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;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
public class InMemFailer {
|
||||
public void fail() {
|
||||
throw new RuntimeException("expected");
|
||||
|
|
|
|||
|
|
@ -5,9 +5,10 @@ import se.scalablesolutions.akka.annotation.transactional;
|
|||
import se.scalablesolutions.akka.kernel.state.*;
|
||||
|
||||
public class InMemStateful {
|
||||
@state private TransactionalMap<String, String> mapState = new InMemoryTransactionalMap<String, String>();
|
||||
@state private TransactionalVector<String> vectorState = new InMemoryTransactionalVector<String>();
|
||||
@state private TransactionalRef<String> refState = new TransactionalRef<String>();
|
||||
private TransactionalState factory = new TransactionalState();
|
||||
private TransactionalMap mapState = factory.newMap(new InMemoryMapConfig());
|
||||
private TransactionalVector vectorState = factory.newVector(new InMemoryVectorConfig());;
|
||||
private TransactionalRef refState = factory.newRef(new InMemoryRefConfig());
|
||||
|
||||
@transactional
|
||||
public String getMapState(String key) {
|
||||
|
|
@ -47,11 +48,12 @@ public class InMemStateful {
|
|||
}
|
||||
|
||||
@transactional
|
||||
public void failure(String key, String msg, InMemFailer failer) {
|
||||
public String failure(String key, String msg, InMemFailer failer) {
|
||||
mapState.put(key, msg);
|
||||
vectorState.add(msg);
|
||||
refState.swap(msg);
|
||||
failer.fail();
|
||||
return msg;
|
||||
}
|
||||
|
||||
@transactional
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class InMemoryStateTest extends TestCase {
|
|||
//new Component("inmem-clasher", InMemClasher.class, InMemClasherImpl.class, new LifeCycle(new Permanent(), 1000), 100000)
|
||||
}).inject().supervise();
|
||||
}
|
||||
|
||||
|
||||
protected void tearDown() {
|
||||
conf.stop();
|
||||
}
|
||||
|
|
@ -87,7 +87,6 @@ public class InMemoryStateTest extends TestCase {
|
|||
} // expected
|
||||
assertEquals("init", stateful.getRefState()); // check that state is == init state
|
||||
}
|
||||
|
||||
/*
|
||||
public void testNestedNonTransactionalMethodHangs() {
|
||||
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.activation:activation:1.1" level="project" />
|
||||
<orderEntry type="library" exported="" name="Maven: com.sun.xml.bind:jaxb-impl:2.1.6" level="project" />
|
||||
<orderEntry type="library" exported="" name="Maven: org.jboss.netty:netty:3.1.0.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-http: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>
|
||||
<groupId>org.jboss.netty</groupId>
|
||||
<artifactId>netty</artifactId>
|
||||
<version>3.1.0.BETA2</version>
|
||||
<version>3.1.0.CR1</version>
|
||||
</dependency>
|
||||
|
||||
<!-- For Jersey -->
|
||||
|
|
|
|||
|
|
@ -11,10 +11,11 @@ import java.lang.annotation.Annotation
|
|||
import kernel.config.ActiveObjectGuiceConfigurator
|
||||
import kernel.config.ScalaConfig._
|
||||
import kernel.camel.{MessageDriven, ActiveObjectProducer}
|
||||
import kernel.nio.{RemoteRequest, NettyClient}
|
||||
import kernel.stm.{ChangeSet, Transaction}
|
||||
import kernel.util.Helpers.ReadWriteLock
|
||||
import kernel.util.{HashCode, ResultOrFailure}
|
||||
import kernel.state.{Transactional, TransactionalMap, TransactionalRef, TransactionalVector}
|
||||
import kernel.stm.Transaction
|
||||
|
||||
import org.codehaus.aspectwerkz.intercept.{Advisable, AroundAdvice}
|
||||
import org.codehaus.aspectwerkz.joinpoint.{MethodRtti, JoinPoint}
|
||||
|
|
@ -61,6 +62,8 @@ class ActiveObjectFactory {
|
|||
object ActiveObject {
|
||||
val AKKA_CAMEL_ROUTING_SCHEME = "akka"
|
||||
|
||||
val RemoteClient = new NettyClient
|
||||
|
||||
private[kernel] val threadBoundTx: ThreadLocal[Option[Transaction]] = {
|
||||
val tl = new ThreadLocal[Option[Transaction]]
|
||||
tl.set(None)
|
||||
|
|
@ -95,7 +98,7 @@ object ActiveObject {
|
|||
*/
|
||||
|
||||
// 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 (maps, vectors, refs) = getTransactionalItemsFor(targetInstance)
|
||||
|
|
@ -116,31 +119,60 @@ sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstanc
|
|||
val rtti = joinpoint.getRtti.asInstanceOf[MethodRtti]
|
||||
val method = rtti.getMethod
|
||||
|
||||
tryToCommitTransaction
|
||||
|
||||
if (isInExistingTransaction) {
|
||||
joinExistingTransaction
|
||||
} else {
|
||||
if (method.isAnnotationPresent(Annotations.transactional)) startNewTransaction
|
||||
}
|
||||
|
||||
val result: AnyRef = try {
|
||||
incrementTransaction
|
||||
// if (rtti.getMethod.isAnnotationPresent(Annotations.oneway)) sendOneWay(joinpoint) // FIXME put in 2 different aspects
|
||||
// else handleResult(sendAndReceiveEventually(joinpoint))
|
||||
val result = actor !! Invocation(joinpoint, activeTx)
|
||||
val resultOrFailure =
|
||||
if (result.isDefined) result.get.asInstanceOf[ResultOrFailure[AnyRef]]
|
||||
else throw new ActiveObjectInvocationTimeoutException("TIMED OUT")
|
||||
handleResult(resultOrFailure)
|
||||
} finally {
|
||||
decrementTransaction
|
||||
if (isTransactionAborted) removeTransactionIfTopLevel
|
||||
else tryToPrecommitTransaction
|
||||
}
|
||||
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) {
|
||||
joinExistingTransaction
|
||||
} else {
|
||||
if (method.isAnnotationPresent(Annotations.transactional)) startNewTransaction
|
||||
}
|
||||
try {
|
||||
incrementTransaction
|
||||
if (isOneWay) actor ! Invocation(joinpoint, activeTx)
|
||||
else {
|
||||
val result = actor !! Invocation(joinpoint, activeTx)
|
||||
val resultOrFailure =
|
||||
if (result.isDefined) result.get.asInstanceOf[ResultOrFailure[AnyRef]]
|
||||
else throw new ActiveObjectInvocationTimeoutException("TIMED OUT")
|
||||
handleResult(resultOrFailure)
|
||||
}
|
||||
} finally {
|
||||
decrementTransaction
|
||||
if (isTransactionAborted) removeTransactionIfTopLevel
|
||||
else tryToPrecommitTransaction
|
||||
}
|
||||
}
|
||||
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 = {
|
||||
val newTx = new Transaction
|
||||
newTx.begin(changeSet)
|
||||
|
|
@ -167,7 +199,9 @@ sealed class SequentialTransactionalAroundAdvice(target: Class[_], targetInstanc
|
|||
true
|
||||
} else false
|
||||
|
||||
private def handleResult(result: ResultOrFailure[AnyRef]): AnyRef = {
|
||||
|
||||
|
||||
private def handleResult(result: ResultOrFailure[AnyRef]): AnyRef = {
|
||||
try {
|
||||
result()
|
||||
} catch {
|
||||
|
|
@ -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.
|
||||
*
|
||||
|
|
@ -333,6 +332,11 @@ class ChangeSet(val id: String) {
|
|||
*/
|
||||
private[kernel] class Dispatcher(val targetName: String) extends Actor {
|
||||
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] = {
|
||||
|
||||
case Invocation(joinpoint: JoinPoint, tx: Option[Transaction]) =>
|
||||
|
|
@ -353,7 +357,7 @@ private[kernel] class Dispatcher(val targetName: String) extends Actor {
|
|||
|
||||
/*
|
||||
ublic class CamelInvocationHandler implements InvocationHandler {
|
||||
private final Endpoint endpoint;
|
||||
private final Endpoint endpoint;
|
||||
private final Producer producer;
|
||||
private final MethodInfoCache methodInfoCache;
|
||||
|
||||
|
|
|
|||
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
|
||||
|
||||
|
||||
import java.util.concurrent.{LinkedBlockingQueue, TimeUnit, RejectedExecutionHandler, ThreadPoolExecutor}
|
||||
|
||||
class EventBasedThreadPoolDispatcher extends MessageDispatcherBase {
|
||||
import java.util.concurrent.Executors
|
||||
import java.util.HashSet
|
||||
|
||||
// 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 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) {
|
||||
active = true
|
||||
|
|
|
|||
|
|
@ -10,9 +10,10 @@
|
|||
*/
|
||||
package se.scalablesolutions.akka.kernel.reactor
|
||||
|
||||
import java.util.concurrent.atomic.AtomicInteger
|
||||
import java.util.concurrent.ThreadFactory
|
||||
import java.util.{LinkedList, Queue}
|
||||
import kernel.util.HashCode
|
||||
|
||||
import kernel.util.{Logging, HashCode}
|
||||
trait MessageHandler {
|
||||
def handle(message: MessageHandle)
|
||||
}
|
||||
|
|
@ -75,3 +76,34 @@ class MessageQueue {
|
|||
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
|
||||
case class CassandraStorageConfig extends PersistentStorageConfig
|
||||
case object TerracottaStorageConfig extends PersistentStorageConfig
|
||||
case object TokyoCabinetStorageConfig extends PersistentStorageConfig
|
||||
case class TerracottaStorageConfig extends PersistentStorageConfig
|
||||
case class TokyoCabinetStorageConfig extends PersistentStorageConfig
|
||||
|
||||
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 object InMemoryVectorConfig extends TransactionalVectorConfig
|
||||
case class InMemoryVectorConfig extends TransactionalVectorConfig
|
||||
|
||||
case class PersistentRefConfig(storage: PersistentStorageConfig) extends TransactionalRefConfig
|
||||
case object InMemoryRefConfig extends TransactionalRefConfig
|
||||
case class InMemoryRefConfig extends TransactionalRefConfig
|
||||
|
||||
object TransactionalState extends TransactionalState
|
||||
class TransactionalState {
|
||||
|
|
@ -39,13 +39,13 @@ class TransactionalState {
|
|||
* val myMap = TransactionalState.newMap(PersistentMapConfig(CassandraStorageConfig))
|
||||
* </pre>
|
||||
*/
|
||||
def newMap(config: TransactionalMapConfig): TransactionalMap = config match {
|
||||
def newMap(config: TransactionalMapConfig) = config match {
|
||||
case PersistentMapConfig(storage) => storage match {
|
||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalMap
|
||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
||||
case TerracottaStorageConfig() => 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))
|
||||
* </pre>
|
||||
*/
|
||||
def newVector(config: TransactionalVectorConfig): TransactionalVector = config match {
|
||||
def newVector(config: TransactionalVectorConfig) = config match {
|
||||
case PersistentVectorConfig(storage) => storage match {
|
||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalVector
|
||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
||||
case TerracottaStorageConfig() => 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))
|
||||
* </pre>
|
||||
*/
|
||||
def newRef(config: TransactionalRefConfig): TransactionalRef = config match {
|
||||
def newRef(config: TransactionalRefConfig) = config match {
|
||||
case PersistentRefConfig(storage) => storage match {
|
||||
case CassandraStorageConfig() => new CassandraPersistentTransactionalRef
|
||||
case TerracottaStorageConfig => throw new UnsupportedOperationException
|
||||
case TokyoCabinetStorageConfig => throw new UnsupportedOperationException
|
||||
case TerracottaStorageConfig() => 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
|
||||
|
||||
import java.util.concurrent.atomic.{AtomicInteger, AtomicLong}
|
||||
import kernel.actor.ChangeSet
|
||||
import kernel.util.Logging
|
||||
import scala.collection.mutable.{HashSet, HashMap}
|
||||
|
||||
|
|
|
|||
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue