This is an automated email from the ASF dual-hosted git repository.
mdedetrich pushed a commit to branch main
in repository
https://gitbox.apache.org/repos/asf/incubator-pekko-persistence-r2dbc.git
The following commit(s) were added to refs/heads/main by this push:
new 3b9e505 Apply compat changes from latest Pekko
3b9e505 is described below
commit 3b9e5055a602d0a925429faa7e379d0b79cec5a3
Author: Matthew de Detrich <[email protected]>
AuthorDate: Thu May 11 19:20:45 2023 +0200
Apply compat changes from latest Pekko
---
.../pekko/persistence/r2dbc/internal/R2dbcExecutor.scala | 6 +++---
.../r2dbc/query/javadsl/R2dbcReadJournal.scala | 11 +++++------
.../r2dbc/state/javadsl/R2dbcDurableStateStore.scala | 14 +++++++-------
project/Dependencies.scala | 6 +++---
.../r2dbc/internal/BySliceSourceProviderAdapter.scala | 13 ++++++-------
.../projection/r2dbc/internal/R2dbcHandlerAdapter.scala | 14 +++++++-------
.../projection/r2dbc/internal/R2dbcOffsetStore.scala | 6 +++---
.../projection/r2dbc/internal/R2dbcProjectionImpl.scala | 8 ++++----
.../pekko/projection/r2dbc/javadsl/R2dbcProjection.scala | 15 +++++++--------
.../pekko/projection/r2dbc/javadsl/R2dbcSession.scala | 12 ++++++------
10 files changed, 51 insertions(+), 54 deletions(-)
diff --git
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/internal/R2dbcExecutor.scala
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/internal/R2dbcExecutor.scala
index 3a1a02b..fd92b02 100644
---
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/internal/R2dbcExecutor.scala
+++
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/internal/R2dbcExecutor.scala
@@ -17,7 +17,6 @@ import java.util.function.BiConsumer
import scala.collection.immutable
import scala.collection.mutable
-import scala.compat.java8.FutureConverters._
import scala.concurrent.ExecutionContext
import scala.concurrent.Future
import scala.concurrent.duration.FiniteDuration
@@ -28,6 +27,7 @@ import pekko.Done
import pekko.actor.typed.ActorSystem
import pekko.annotation.InternalStableApi
import pekko.dispatch.ExecutionContexts
+import pekko.util.FutureConverters._
import io.r2dbc.spi.Connection
import io.r2dbc.spi.ConnectionFactory
import io.r2dbc.spi.Result
@@ -44,11 +44,11 @@ import reactor.core.publisher.Mono
@InternalStableApi object R2dbcExecutor {
final implicit class PublisherOps[T](val publisher: Publisher[T]) extends
AnyVal {
def asFuture(): Future[T] =
- Mono.from(publisher).toFuture.toScala
+ Mono.from(publisher).toFuture.asScala
def asFutureDone(): Future[Done] = {
val mono: Mono[Done] = Mono.from(publisher).map(_ => Done)
- mono.defaultIfEmpty(Done).toFuture.toScala
+ mono.defaultIfEmpty(Done).toFuture.asScala
}
}
diff --git
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/query/javadsl/R2dbcReadJournal.scala
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/query/javadsl/R2dbcReadJournal.scala
index ee96d5e..8dd0492 100644
---
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/query/javadsl/R2dbcReadJournal.scala
+++
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/query/javadsl/R2dbcReadJournal.scala
@@ -18,9 +18,6 @@ import java.util
import java.util.Optional
import java.util.concurrent.CompletionStage
-import scala.compat.java8.OptionConverters._
-import scala.compat.java8.FutureConverters._
-
import org.apache.pekko
import pekko.NotUsed
import pekko.dispatch.ExecutionContexts
@@ -35,6 +32,8 @@ import
pekko.persistence.query.typed.javadsl.EventsBySliceQuery
import pekko.persistence.query.typed.javadsl.LoadEventQuery
import pekko.persistence.r2dbc.query.scaladsl
import pekko.stream.javadsl.Source
+import pekko.util.OptionConverters._
+import pekko.util.FutureConverters._
object R2dbcReadJournal {
val Identifier: String = scaladsl.R2dbcReadJournal.Identifier
@@ -92,12 +91,12 @@ final class R2dbcReadJournal(delegate:
scaladsl.R2dbcReadJournal)
delegate.currentPersistenceIds().asJava
override def currentPersistenceIds(afterId: Optional[String], limit: Long):
Source[String, NotUsed] =
- delegate.currentPersistenceIds(afterId.asScala, limit).asJava
+ delegate.currentPersistenceIds(afterId.toScala, limit).asJava
override def timestampOf(persistenceId: String, sequenceNr: Long):
CompletionStage[Optional[Instant]] =
- delegate.timestampOf(persistenceId,
sequenceNr).map(_.asJava)(ExecutionContexts.parasitic).toJava
+ delegate.timestampOf(persistenceId,
sequenceNr).map(_.toJava)(ExecutionContexts.parasitic).asJava
override def loadEnvelope[Event](persistenceId: String, sequenceNr: Long):
CompletionStage[EventEnvelope[Event]] =
- delegate.loadEnvelope[Event](persistenceId, sequenceNr).toJava
+ delegate.loadEnvelope[Event](persistenceId, sequenceNr).asJava
}
diff --git
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/state/javadsl/R2dbcDurableStateStore.scala
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/state/javadsl/R2dbcDurableStateStore.scala
index 04e8c5d..2f67951 100644
---
a/core/src/main/scala/org/apache/pekko/persistence/r2dbc/state/javadsl/R2dbcDurableStateStore.scala
+++
b/core/src/main/scala/org/apache/pekko/persistence/r2dbc/state/javadsl/R2dbcDurableStateStore.scala
@@ -18,7 +18,6 @@ import java.util.Optional
import java.util.concurrent.CompletionStage
import scala.concurrent.ExecutionContext
-import scala.compat.java8.FutureConverters.FutureOps
import org.apache.pekko
import pekko.Done
@@ -32,6 +31,7 @@ import pekko.persistence.r2dbc.state.scaladsl.{
R2dbcDurableStateStore => ScalaR
import pekko.persistence.state.javadsl.DurableStateUpdateStore
import pekko.persistence.state.javadsl.GetObjectResult
import pekko.stream.javadsl.Source
+import pekko.util.FutureConverters._
object R2dbcDurableStateStore {
val Identifier: String = ScalaR2dbcDurableStateStore.Identifier
@@ -46,16 +46,16 @@ class R2dbcDurableStateStore[A](scalaStore:
ScalaR2dbcDurableStateStore[A])(impl
scalaStore
.getObject(persistenceId)
.map(x =>
GetObjectResult(Optional.ofNullable(x.value.getOrElse(null.asInstanceOf[A])),
x.revision))
- .toJava
+ .asJava
override def upsertObject(persistenceId: String, revision: Long, value: A,
tag: String): CompletionStage[Done] =
- scalaStore.upsertObject(persistenceId, revision, value, tag).toJava
+ scalaStore.upsertObject(persistenceId, revision, value, tag).asJava
override def deleteObject(persistenceId: String): CompletionStage[Done] =
- scalaStore.deleteObject(persistenceId).toJava
+ scalaStore.deleteObject(persistenceId).asJava
override def deleteObject(persistenceId: String, revision: Long):
CompletionStage[Done] =
- scalaStore.deleteObject(persistenceId, revision).toJava
+ scalaStore.deleteObject(persistenceId, revision).asJava
override def currentChangesBySlices(
entityType: String,
@@ -83,8 +83,8 @@ class R2dbcDurableStateStore[A](scalaStore:
ScalaR2dbcDurableStateStore[A])(impl
}
override def currentPersistenceIds(afterId: Optional[String], limit: Long):
Source[String, NotUsed] = {
- import scala.compat.java8.OptionConverters._
- scalaStore.currentPersistenceIds(afterId.asScala, limit).asJava
+ import pekko.util.OptionConverters._
+ scalaStore.currentPersistenceIds(afterId.toScala, limit).asJava
}
def currentPersistenceIds(): Source[String, NotUsed] =
diff --git a/project/Dependencies.scala b/project/Dependencies.scala
index 504fc99..3df4020 100644
--- a/project/Dependencies.scala
+++ b/project/Dependencies.scala
@@ -16,9 +16,9 @@ import sbt._
object Dependencies {
val Scala212 = "2.12.17"
val Scala213 = "2.13.10"
- val PekkoVersion = System.getProperty("override.pekko.version",
"0.0.0+26623-85c2a469-SNAPSHOT")
+ val PekkoVersion = System.getProperty("override.pekko.version",
"0.0.0+26656-898c6970-SNAPSHOT")
val PekkoVersionInDocs = "current"
- val PekkoProjectionVersion = "0.0.0+25-0a0709de-SNAPSHOT"
+ val PekkoProjectionVersion = "0.0.0+32-a55714ec-SNAPSHOT"
val PekkoProjectionVersionInDocs = "current"
object Compile {
@@ -88,7 +88,7 @@ object Dependencies {
val migration =
Seq(
- "org.apache.pekko" %% "pekko-persistence-jdbc" %
"0.0.0+960-7c83f376-SNAPSHOT" % Test,
+ "org.apache.pekko" %% "pekko-persistence-jdbc" %
"0.0.0+966-e6f717eb-SNAPSHOT" % Test,
TestDeps.postgresql,
TestDeps.logback,
TestDeps.scalaTest)
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/BySliceSourceProviderAdapter.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/BySliceSourceProviderAdapter.scala
index e295694..71371ff 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/BySliceSourceProviderAdapter.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/BySliceSourceProviderAdapter.scala
@@ -27,10 +27,9 @@ import pekko.projection.javadsl
import pekko.projection.scaladsl
import pekko.dispatch.ExecutionContexts
import pekko.stream.scaladsl.Source
-import scala.compat.java8.FutureConverters._
-
import pekko.util.ccompat.JavaConverters._
-import scala.compat.java8.OptionConverters._
+import pekko.util.FutureConverters._
+import pekko.util.OptionConverters._
import scala.concurrent.ExecutionContext
import pekko.persistence.query.typed.EventEnvelope
@@ -53,9 +52,9 @@ import pekko.projection.BySlicesSourceProvider
// it _should_ not be used for the blocking operation of getting offsets
themselves
val ec = pekko.dispatch.ExecutionContexts.parasitic
val offsetAdapter = new Supplier[CompletionStage[Optional[Offset]]] {
- override def get(): CompletionStage[Optional[Offset]] =
offset().map(_.asJava)(ec).toJava
+ override def get(): CompletionStage[Optional[Offset]] =
offset().map(_.toJava)(ec).asJava
}
- delegate.source(offsetAdapter).toScala.map(_.asScala)(ec)
+ delegate.source(offsetAdapter).asScala.map(_.asScala)(ec)
}
def extractOffset(envelope: Envelope): Offset =
delegate.extractOffset(envelope)
@@ -71,7 +70,7 @@ import pekko.projection.BySlicesSourceProvider
override def timestampOf(persistenceId: String, sequenceNr: Long):
Future[Option[Instant]] =
delegate match {
case timestampQuery:
pekko.persistence.query.typed.javadsl.EventTimestampQuery =>
- timestampQuery.timestampOf(persistenceId,
sequenceNr).toScala.map(_.asScala)(ExecutionContexts.parasitic)
+ timestampQuery.timestampOf(persistenceId,
sequenceNr).asScala.map(_.toScala)(ExecutionContexts.parasitic)
case _ =>
Future.failed(
new IllegalArgumentException(
@@ -82,7 +81,7 @@ import pekko.projection.BySlicesSourceProvider
override def loadEnvelope[Event](persistenceId: String, sequenceNr: Long):
Future[EventEnvelope[Event]] =
delegate match {
case timestampQuery:
pekko.persistence.query.typed.javadsl.LoadEventQuery =>
- timestampQuery.loadEnvelope[Event](persistenceId, sequenceNr).toScala
+ timestampQuery.loadEnvelope[Event](persistenceId, sequenceNr).asScala
case _ =>
Future.failed(
new IllegalArgumentException(
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcHandlerAdapter.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcHandlerAdapter.scala
index 0dc18b1..53ec742 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcHandlerAdapter.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcHandlerAdapter.scala
@@ -14,7 +14,6 @@
package org.apache.pekko.projection.r2dbc.internal
import scala.collection.immutable
-import scala.compat.java8.FutureConverters._
import scala.concurrent.Future
import org.apache.pekko
@@ -24,6 +23,7 @@ import pekko.projection.r2dbc.javadsl
import pekko.projection.r2dbc.javadsl.R2dbcSession
import pekko.projection.r2dbc.scaladsl
import pekko.util.ccompat.JavaConverters._
+import pekko.util.FutureConverters._
/**
* INTERNAL API: Adapter from javadsl.R2dbcHandler to scaladsl.R2dbcHandler
@@ -32,14 +32,14 @@ import pekko.util.ccompat.JavaConverters._
extends scaladsl.R2dbcHandler[Envelope] {
override def process(session: scaladsl.R2dbcSession, envelope: Envelope):
Future[Done] = {
- delegate.process(new R2dbcSession(session.connection)(session.ec,
session.system), envelope).toScala
+ delegate.process(new R2dbcSession(session.connection)(session.ec,
session.system), envelope).asScala
}
override def start(): Future[Done] =
- delegate.start().toScala
+ delegate.start().asScala
override def stop(): Future[Done] =
- delegate.stop().toScala
+ delegate.stop().asScala
}
@@ -52,13 +52,13 @@ import pekko.util.ccompat.JavaConverters._
extends scaladsl.R2dbcHandler[immutable.Seq[Envelope]] {
override def process(session: scaladsl.R2dbcSession, envelopes:
immutable.Seq[Envelope]): Future[Done] = {
- delegate.process(new R2dbcSession(session.connection)(session.ec,
session.system), envelopes.asJava).toScala
+ delegate.process(new R2dbcSession(session.connection)(session.ec,
session.system), envelopes.asJava).asScala
}
override def start(): Future[Done] =
- delegate.start().toScala
+ delegate.start().asScala
override def stop(): Future[Done] =
- delegate.stop().toScala
+ delegate.stop().asScala
}
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcOffsetStore.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcOffsetStore.scala
index b650bf5..134ac5c 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcOffsetStore.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcOffsetStore.scala
@@ -271,9 +271,9 @@ private[projection] class R2dbcOffsetStore(
case timestampQuery: EventTimestampQuery =>
timestampQuery.timestampOf(persistenceId, sequenceNr)
case timestampQuery:
pekko.persistence.query.typed.javadsl.EventTimestampQuery =>
- import scala.compat.java8.FutureConverters._
- import scala.compat.java8.OptionConverters._
- timestampQuery.timestampOf(persistenceId,
sequenceNr).toScala.map(_.asScala)
+ import pekko.util.FutureConverters._
+ import pekko.util.OptionConverters._
+ timestampQuery.timestampOf(persistenceId,
sequenceNr).asScala.map(_.toScala)
case _ =>
throw new IllegalArgumentException(
s"Expected BySlicesSourceProvider to implement EventTimestampQuery
when TimestampOffset is used.")
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcProjectionImpl.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcProjectionImpl.scala
index 55fe891..37bdb1c 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcProjectionImpl.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/internal/R2dbcProjectionImpl.scala
@@ -102,8 +102,8 @@ private[projection] object R2dbcProjectionImpl {
case loadEventQuery: LoadEventQuery =>
loadEventQuery.loadEnvelope[Any](pid, seqNr)
case loadEventQuery:
pekko.persistence.query.typed.javadsl.LoadEventQuery =>
- import scala.compat.java8.FutureConverters._
- loadEventQuery.loadEnvelope[Any](pid, seqNr).toScala
+ import pekko.util.FutureConverters._
+ loadEventQuery.loadEnvelope[Any](pid, seqNr).asScala
case _ =>
throw new IllegalArgumentException(
s"Expected sourceProvider [${sourceProvider.getClass.getName}] "
+
@@ -127,8 +127,8 @@ private[projection] object R2dbcProjectionImpl {
case store: DurableStateStore[_] =>
store.getObject(pid)
case store: pekko.persistence.state.javadsl.DurableStateStore[_] =>
- import scala.compat.java8.FutureConverters._
- store.getObject(pid).toScala.map(_.toScala)
+ import pekko.util.FutureConverters._
+ store.getObject(pid).asScala.map(_.toScala)
}).map {
case GetObjectResult(Some(loadedValue), loadedRevision) =>
val count = loadEnvelopeCounter.incrementAndGet()
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcProjection.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcProjection.scala
index 89ece70..c7d4ee6 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcProjection.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcProjection.scala
@@ -16,8 +16,6 @@ package org.apache.pekko.projection.r2dbc.javadsl
import java.util.Optional
import java.util.function.Supplier
-import scala.compat.java8.OptionConverters._
-
import org.apache.pekko
import pekko.Done
import pekko.actor.typed.ActorSystem
@@ -40,6 +38,7 @@ import
pekko.projection.r2dbc.internal.R2dbcGroupedHandlerAdapter
import pekko.projection.r2dbc.internal.R2dbcHandlerAdapter
import pekko.projection.r2dbc.scaladsl
import pekko.stream.javadsl.FlowWithContext
+import pekko.util.OptionConverters._
@ApiMayChange
object R2dbcProjection {
@@ -59,7 +58,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.exactlyOnce[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
() => new R2dbcHandlerAdapter(handler.get()))(system)
.asInstanceOf[ExactlyOnceProjection[Offset, Envelope]]
@@ -88,7 +87,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.atLeastOnce[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
() => new R2dbcHandlerAdapter(handler.get()))(system)
.asInstanceOf[AtLeastOnceProjection[Offset, Envelope]]
@@ -118,7 +117,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.atLeastOnceAsync[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
() => HandlerAdapter(handler.get()))(system)
.asInstanceOf[AtLeastOnceProjection[Offset, Envelope]]
@@ -142,7 +141,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.groupedWithin[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
() => new R2dbcGroupedHandlerAdapter(handler.get()))(system)
.asInstanceOf[GroupedProjection[Offset, Envelope]]
@@ -170,7 +169,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.groupedWithinAsync[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
() => new GroupedHandlerAdapter(handler.get()))(system)
.asInstanceOf[GroupedProjection[Offset, Envelope]]
@@ -206,7 +205,7 @@ object R2dbcProjection {
scaladsl.R2dbcProjection
.atLeastOnceFlow[Offset, Envelope](
projectionId,
- settings.asScala,
+ settings.toScala,
adaptSourceProvider(sourceProvider),
handler.asScala)(system)
.asInstanceOf[AtLeastOnceFlowProjection[Offset, Envelope]]
diff --git
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcSession.scala
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcSession.scala
index 49e19e0..c31d4c8 100644
---
a/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcSession.scala
+++
b/projection/src/main/scala/org/apache/pekko/projection/r2dbc/javadsl/R2dbcSession.scala
@@ -16,8 +16,6 @@ package org.apache.pekko.projection.r2dbc.javadsl
import java.util.Optional
import java.util.concurrent.CompletionStage
-import scala.compat.java8.FutureConverters._
-import scala.compat.java8.OptionConverters._
import scala.concurrent.ExecutionContext
import org.apache.pekko
@@ -26,6 +24,8 @@ import pekko.annotation.ApiMayChange
import pekko.dispatch.ExecutionContexts
import pekko.persistence.r2dbc.internal.R2dbcExecutor
import pekko.util.ccompat.JavaConverters._
+import pekko.util.FutureConverters._
+import pekko.util.OptionConverters._
import io.r2dbc.spi.Connection
import io.r2dbc.spi.Row
import io.r2dbc.spi.Statement
@@ -37,15 +37,15 @@ final class R2dbcSession(connection: Connection)(implicit
ec: ExecutionContext,
connection.createStatement(sql)
def updateOne(statement: Statement): CompletionStage[Integer] =
-
R2dbcExecutor.updateOneInTx(statement).map(Integer.valueOf)(ExecutionContexts.parasitic).toJava
+
R2dbcExecutor.updateOneInTx(statement).map(Integer.valueOf)(ExecutionContexts.parasitic).asJava
def update(statements: java.util.List[Statement]):
CompletionStage[java.util.List[Integer]] =
- R2dbcExecutor.updateInTx(statements.asScala.toVector).map(results =>
results.map(Integer.valueOf).asJava).toJava
+ R2dbcExecutor.updateInTx(statements.asScala.toVector).map(results =>
results.map(Integer.valueOf).asJava).asJava
def selectOne[A](statement: Statement)(mapRow: Row => A):
CompletionStage[Optional[A]] =
- R2dbcExecutor.selectOneInTx(statement,
mapRow).map(_.asJava)(ExecutionContexts.parasitic).toJava
+ R2dbcExecutor.selectOneInTx(statement,
mapRow).map(_.toJava)(ExecutionContexts.parasitic).asJava
def select[A](statement: Statement)(mapRow: Row => A):
CompletionStage[java.util.List[A]] =
- R2dbcExecutor.selectInTx(statement, mapRow).map(_.asJava).toJava
+ R2dbcExecutor.selectInTx(statement, mapRow).map(_.asJava).asJava
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]