http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/SuspendedTaskClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/SuspendedTaskClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/SuspendedTaskClr2Java.cpp deleted file mode 100644 index e052d24..0000000 --- a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/SuspendedTaskClr2Java.cpp +++ /dev/null @@ -1,87 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -#include "Clr2JavaImpl.h" - -namespace Org { - namespace Apache { - namespace REEF { - namespace Driver { - namespace Bridge { - namespace Clr2java { - ref class ManagedLog { - internal: - static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); - }; - - SuspendedTaskClr2Java::SuspendedTaskClr2Java(JNIEnv *env, jobject jobjectSuspendedTask) { - ManagedLog::LOGGER->LogStart("SuspendedTaskClr2Java::SuspendedTaskClr2Java"); - pin_ptr<JavaVM*> pJavaVm = &_jvm; - if (env->GetJavaVM(pJavaVm) != 0) { - ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); - } - _jobjectSuspendedTask = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectSuspendedTask)); - - jclass jclassSuspendedTask = env->GetObjectClass(_jobjectSuspendedTask); - jfieldID jidTaskId = env->GetFieldID(jclassSuspendedTask, "taskId", "Ljava/lang/String;"); - _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectSuspendedTask, jidTaskId))); - ManagedLog::LOGGER->LogStop("SuspendedTaskClr2Java::SuspendedTaskClr2Java"); - } - - IActiveContextClr2Java^ SuspendedTaskClr2Java::GetActiveContext() { - ManagedLog::LOGGER->LogStart("SuspendedTaskClr2Java::GetActiveContext"); - JNIEnv *env = RetrieveEnv(_jvm); - - jclass jclassSuspendedTask = env->GetObjectClass(_jobjectSuspendedTask); - jfieldID jidActiveContext = env->GetFieldID(jclassSuspendedTask, "jactiveContext", "Lorg/apache/reef/javabridge/ActiveContextBridge;"); - jobject jobjectActiveContext = env->GetObjectField(_jobjectSuspendedTask, jidActiveContext); - ManagedLog::LOGGER->LogStop("SuspendedTaskClr2Java::GetActiveContext"); - return gcnew ActiveContextClr2Java(env, jobjectActiveContext); - } - - String^ SuspendedTaskClr2Java::GetId() { - ManagedLog::LOGGER->Log("SuspendedTaskClr2Java::GetId"); - JNIEnv *env = RetrieveEnv(_jvm); - return ManagedStringFromJavaString(env, _jstringId); - } - - array<byte>^ SuspendedTaskClr2Java::Get() { - ManagedLog::LOGGER->Log("SuspendedTaskClr2Java::Get"); - JNIEnv *env = RetrieveEnv(_jvm); - jclass jclassSuspendedTask = env->GetObjectClass(_jobjectSuspendedTask); - jmethodID jmidGet = env->GetMethodID(jclassSuspendedTask, "get", "()[B"); - - if (jmidGet == NULL) { - ManagedLog::LOGGER->Log("jmidGet is NULL"); - return nullptr; - } - jbyteArray jMessage = (jbyteArray)env->CallObjectMethod(_jobjectSuspendedTask, jmidGet); - return ManagedByteArrayFromJavaByteArray(env, jMessage); - } - - void SuspendedTaskClr2Java::OnError(String^ message) { - ManagedLog::LOGGER->Log("SuspendedTaskClr2Java::OnError"); - JNIEnv *env = RetrieveEnv(_jvm); - HandleClr2JavaError(env, message, _jobjectSuspendedTask); - } - } - } - } - } - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/TaskMessageClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/TaskMessageClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/TaskMessageClr2Java.cpp deleted file mode 100644 index 1ee79e9..0000000 --- a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/TaskMessageClr2Java.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/** - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -#include "Clr2JavaImpl.h" - -namespace Org { - namespace Apache { - namespace REEF { - namespace Driver { - namespace Bridge { - namespace Clr2java { - ref class ManagedLog { - internal: - static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); - }; - - TaskMessageClr2Java::TaskMessageClr2Java(JNIEnv *env, jobject jtaskMessage) { - ManagedLog::LOGGER->LogStart("TaskMessageClr2Java::TaskMessageClr2Java"); - pin_ptr<JavaVM*> pJavaVm = &_jvm; - if (env->GetJavaVM(pJavaVm) != 0) { - ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); - } - _jobjectTaskMessage = reinterpret_cast<jobject>(env->NewGlobalRef(jtaskMessage)); - - jclass jclassTaskMessage = env->GetObjectClass(_jobjectTaskMessage); - jfieldID jidTaskId = env->GetFieldID(jclassTaskMessage, "taskId", "Ljava/lang/String;"); - _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectTaskMessage, jidTaskId))); - ManagedLog::LOGGER->LogStop("TaskMessageClr2Java::TaskMessageClr2Java"); - } - - void TaskMessageClr2Java::OnError(String^ message) { - ManagedLog::LOGGER->Log("TaskMessageClr2Java::OnError"); - JNIEnv *env = RetrieveEnv(_jvm); - HandleClr2JavaError(env, message, _jobjectTaskMessage); - } - - String^ TaskMessageClr2Java::GetId() { - ManagedLog::LOGGER->Log("TaskMessageClr2Java::GetId"); - JNIEnv *env = RetrieveEnv(_jvm); - return ManagedStringFromJavaString(env, _jstringId); - } - } - } - } - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/.gitignore ---------------------------------------------------------------------- diff --git a/lang/cs/.gitignore b/lang/cs/.gitignore index cea2523..8db483c 100644 --- a/lang/cs/.gitignore +++ b/lang/cs/.gitignore @@ -6,6 +6,9 @@ TestResults **/*.suo **/*.csproj.user **/obj +**/x64 +**/*.opensdf +**/*.sdf **/.nuget/nuspec **/.nuget/packages *.sln.GhostDoc.xml http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/.nuget/finalizeNuspec.ps1 ---------------------------------------------------------------------- diff --git a/lang/cs/.nuget/finalizeNuspec.ps1 b/lang/cs/.nuget/finalizeNuspec.ps1 index 69683d8..825072e 100644 --- a/lang/cs/.nuget/finalizeNuspec.ps1 +++ b/lang/cs/.nuget/finalizeNuspec.ps1 @@ -77,6 +77,7 @@ Function Finalize-Nuspec-Version { } $nuspecDir = "$SolutionDir\.nuget\nuspec" + Write-Output $nuspecDir $nuspecFiles = Get-ChildItem $nuspecDir # Replace the $version$ token with the specified version in each nuspec file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge.JAR/Org.Apache.REEF.Bridge.JAR.csproj ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge.JAR/Org.Apache.REEF.Bridge.JAR.csproj b/lang/cs/Org.Apache.REEF.Bridge.JAR/Org.Apache.REEF.Bridge.JAR.csproj index 4623ddc..a728d18 100644 --- a/lang/cs/Org.Apache.REEF.Bridge.JAR/Org.Apache.REEF.Bridge.JAR.csproj +++ b/lang/cs/Org.Apache.REEF.Bridge.JAR/Org.Apache.REEF.Bridge.JAR.csproj @@ -24,17 +24,34 @@ under the License. <RootNameSpace>$(MSBuildProjectName)</RootNameSpace> </PropertyGroup> <Import Project="..\build.props" /> + <Import Project="$(MSBuildBinPath)\Microsoft.Common.targets" /> <!-- Check that maven is installed --> <Target Name="CheckMavenInstall"> <Error Condition=" '$(M2_HOME)' == '' " Text="$M2_HOME is not set. Please make sure that Maven is installed and configured. See https://cwiki.apache.org/confluence/display/REEF/Compiling+REEF for details." /> + <Error Condition=" '$(JAVA_HOME)' == '' " Text="$JAVA_HOME is not set. Please make sure that Java is installed and configured. See https://cwiki.apache.org/confluence/display/REEF/Compiling+REEF for details." /> <Message Text="Using the maven installation found in $(M2_HOME)" /> </Target> + + <Target Name="CheckJavaInstall"> + <Error Condition=" '$(JAVA_HOME)' == '' " Text="$JAVA_HOME is not set. Please make sure that Java is installed and configured. See https://cwiki.apache.org/confluence/display/REEF/Compiling+REEF for details." /> + <Message Text="Using the java installation found in $(JAVA_HOME)" /> + </Target> + + <Target Name="CheckProtocInstall"> + <Exec ContinueOnError="True" IgnoreExitCode='true' + Command='"cmd /c where protoc.exe"'> + <Output TaskParameter="ExitCode" PropertyName="ErrorCode"/> + </Exec> + <Message Text="The exit code is $(ErrorCode)"/> + <Error Text="protoc.exe not found. Please make sure that protoc.exe is on the path. See https://cwiki.apache.org/confluence/display/REEF/Compiling+REEF for details." Condition="'$(ErrorCode)' > '0'" /> + </Target> + <!-- Executes 'mvn install', if the JAR does not exist. --> - <Target Name="Build" DependsOnTargets="CheckMavenInstall"> + <Target Name="Build" DependsOnTargets="CheckMavenInstall;CheckJavaInstall;CheckProtocInstall"> <PropertyGroup> <!--The shaded jar of the bridge --> <Bridge_JAR_Name>reef-bridge-java-$(REEF_Version)-shaded.jar</Bridge_JAR_Name> @@ -46,12 +63,12 @@ under the License. <!-- Executes 'mvn clean', if the JAR exists. --> - <Target Name="Clean" DependsOnTargets="CheckMavenInstall"> + <Target Name="Clean" DependsOnTargets="CheckMavenInstall;CheckJavaInstall;CheckProtocInstall"> <PropertyGroup> <!--The shaded jar of the bridge --> <Bridge_JAR_Name>reef-bridge-java-$(REEF_Version)-shaded.jar</Bridge_JAR_Name> <Bridge_JAR>$(REEF_Source_Folder)\lang\java\reef-bridge-java\target\$(Bridge_JAR_Name)</Bridge_JAR> - </PropertyGroup> + </PropertyGroup> <Exec Command="$(M2_HOME)\bin\mvn -TC1 -DskipTests clean" Condition="Exists('$(Bridge_JAR)')" WorkingDirectory="$(REEF_Source_Folder)" /> <Delete Files="$(OutputPath)\$(Bridge_JAR_Name)" /> </Target> @@ -59,4 +76,8 @@ under the License. Standard Rebuild target: Clean, then build --> <Target Name="Rebuild" DependsOnTargets="Clean;Build"/> + <Target Name="GetNativeManifest"> + </Target> + <Target Name="GetCopyToOutputDirectoryItems"> +</Target> </Project> http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp new file mode 100644 index 0000000..6e56806 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/ActiveContextClr2Java.cpp @@ -0,0 +1,110 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + private ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + ActiveContextClr2Java::ActiveContextClr2Java(JNIEnv *env, jobject jobjectActiveContext) { + ManagedLog::LOGGER->LogStart("ActiveContextClr2Java::ActiveContextClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + + _jobjectActiveContext = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectActiveContext)); + + jclass jclassActiveContext = env->GetObjectClass(_jobjectActiveContext); + + jfieldID jidContextId = env->GetFieldID(jclassActiveContext, "contextId", "Ljava/lang/String;"); + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectActiveContext, jidContextId))); + + jfieldID jidEvaluatorId = env->GetFieldID(jclassActiveContext, "evaluatorId", "Ljava/lang/String;"); + _jstringEvaluatorId = (jstring)env->GetObjectField(_jobjectActiveContext, jidEvaluatorId); + _jstringEvaluatorId = reinterpret_cast<jstring>(env->NewGlobalRef(_jstringEvaluatorId)); + + ManagedLog::LOGGER->LogStop("ActiveContextClr2Java::ActiveContextClr2Java"); + } + + void ActiveContextClr2Java::SubmitTask(String^ taskConfigStr) { + ManagedLog::LOGGER->LogStart("ActiveContextClr2Java::SubmitTask"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassActiveContext = env->GetObjectClass(_jobjectActiveContext); + jmethodID jmidSubmitTask = env->GetMethodID(jclassActiveContext, "submitTaskString", "(Ljava/lang/String;)V"); + + if (jmidSubmitTask == NULL) { + ManagedLog::LOGGER->Log("jmidSubmitTask is NULL"); + return; + } + env->CallObjectMethod( + _jobjectActiveContext, + jmidSubmitTask, + JavaStringFromManagedString(env, taskConfigStr)); + ManagedLog::LOGGER->LogStop("ActiveContextClr2Java::SubmitTask"); + } + + void ActiveContextClr2Java::OnError(String^ message) { + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectActiveContext); + } + + void ActiveContextClr2Java::Close() { + ManagedLog::LOGGER->LogStart("ActiveContextClr2Java::Close"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassActiveContext = env->GetObjectClass(_jobjectActiveContext); + jmethodID jmidClose = env->GetMethodID(jclassActiveContext, "close", "()V"); + + if (jmidClose == NULL) { + ManagedLog::LOGGER->Log("jmidClose is NULL"); + return; + } + env->CallObjectMethod( + _jobjectActiveContext, + jmidClose); + ManagedLog::LOGGER->LogStop("ActiveContextClr2Java::Close"); + } + + String^ ActiveContextClr2Java::GetId() { + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + + String^ ActiveContextClr2Java::GetEvaluatorId() { + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringEvaluatorId); + } + + IEvaluatorDescriptor^ ActiveContextClr2Java::GetEvaluatorDescriptor() { + ManagedLog::LOGGER->LogStart("ActiveContextClr2Java::GetEvaluatorDescriptor"); + return CommonUtilities::RetrieveEvaluatorDescriptor(_jobjectActiveContext, _jvm); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp new file mode 100644 index 0000000..4dabd96 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/AllocatedEvaluatorClr2Java.cpp @@ -0,0 +1,168 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +using namespace JavaClrBridge; + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + AllocatedEvaluatorClr2Java::AllocatedEvaluatorClr2Java(JNIEnv *env, jobject jallocatedEvaluator) { + + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::AllocatedEvaluatorClr2Java"); + + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectAllocatedEvaluator = reinterpret_cast<jobject>(env->NewGlobalRef(jallocatedEvaluator)); + + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jfieldID jidEvaluatorId = env->GetFieldID(jclassAllocatedEvaluator, "evaluatorId", "Ljava/lang/String;"); + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectAllocatedEvaluator, jidEvaluatorId))); + + jfieldID jidNameServerInfo = env->GetFieldID(jclassAllocatedEvaluator, "nameServerInfo", "Ljava/lang/String;"); + _jstringNameServerInfo = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectAllocatedEvaluator, jidNameServerInfo))); + + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::AllocatedEvaluatorClr2Java"); + } + + void AllocatedEvaluatorClr2Java::SubmitContext(String^ contextConfigStr) { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::SubmitContext"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jmethodID jmidSubmitContext = env->GetMethodID(jclassAllocatedEvaluator, "submitContextString", "(Ljava/lang/String;)V"); + + if (jmidSubmitContext == NULL) { + ManagedLog::LOGGER->Log("jmidSubmitContext is NULL"); + return; + } + env->CallObjectMethod( + _jobjectAllocatedEvaluator, + jmidSubmitContext, + JavaStringFromManagedString(env, contextConfigStr)); + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::SubmitContext"); + } + + void AllocatedEvaluatorClr2Java::SubmitContextAndTask(String^ contextConfigStr, String^ taskConfigStr) { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::SubmitContextAndTask"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jmethodID jmidSubmitContextAndTask = env->GetMethodID(jclassAllocatedEvaluator, "submitContextAndTaskString", "(Ljava/lang/String;Ljava/lang/String;)V"); + + if (jmidSubmitContextAndTask == NULL) { + ManagedLog::LOGGER->Log("jmidSubmitContextAndTask is NULL"); + return; + } + env->CallObjectMethod( + _jobjectAllocatedEvaluator, + jmidSubmitContextAndTask, + JavaStringFromManagedString(env, contextConfigStr), + JavaStringFromManagedString(env, taskConfigStr)); + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::SubmitContextAndTask"); + } + + void AllocatedEvaluatorClr2Java::SubmitContextAndService(String^ contextConfigStr, String^ serviceConfigStr) { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::SubmitContextAndService"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jmethodID jmidSubmitContextAndService = env->GetMethodID(jclassAllocatedEvaluator, "submitContextAndServiceString", "(Ljava/lang/String;Ljava/lang/String;)V"); + + if (jmidSubmitContextAndService == NULL) { + ManagedLog::LOGGER->Log("jmidSubmitContextAndService is NULL"); + return; + } + env->CallObjectMethod( + _jobjectAllocatedEvaluator, + jmidSubmitContextAndService, + JavaStringFromManagedString(env, contextConfigStr), + JavaStringFromManagedString(env, serviceConfigStr)); + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::SubmitContextAndService"); + } + + void AllocatedEvaluatorClr2Java::SubmitContextAndServiceAndTask(String^ contextConfigStr, String^ serviceConfigStr, String^ taskConfigStr) { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::SubmitContextAndServiceAndTask"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jmethodID jmidSubmitContextAndServiceAndTask = env->GetMethodID(jclassAllocatedEvaluator, "submitContextAndServiceAndTaskString", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); + + if (jmidSubmitContextAndServiceAndTask == NULL) { + ManagedLog::LOGGER->Log("jmidSubmitContextAndServiceAndTask is NULL"); + return; + } + env->CallObjectMethod( + _jobjectAllocatedEvaluator, + jmidSubmitContextAndServiceAndTask, + JavaStringFromManagedString(env, contextConfigStr), + JavaStringFromManagedString(env, serviceConfigStr), + JavaStringFromManagedString(env, taskConfigStr)); + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::SubmitContextAndServiceAndTask"); + } + + void AllocatedEvaluatorClr2Java::OnError(String^ message) { + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectAllocatedEvaluator); + } + + void AllocatedEvaluatorClr2Java::Close() { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::Close"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassAllocatedEvaluator = env->GetObjectClass(_jobjectAllocatedEvaluator); + jmethodID jmidClose = env->GetMethodID(jclassAllocatedEvaluator, "close", "()V"); + + if (jmidClose == NULL) { + ManagedLog::LOGGER->Log("jmidClose is NULL"); + return; + } + env->CallObjectMethod( + _jobjectAllocatedEvaluator, + jmidClose); + ManagedLog::LOGGER->LogStop("AllocatedEvaluatorClr2Java::Close"); + } + + String^ AllocatedEvaluatorClr2Java::GetId() { + ManagedLog::LOGGER->Log("AllocatedEvaluatorClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + + String^ AllocatedEvaluatorClr2Java::GetNameServerInfo() { + ManagedLog::LOGGER->Log("AllocatedEvaluatorClr2Java::GetNameServerInfo"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringNameServerInfo); + } + + IEvaluatorDescriptor^ AllocatedEvaluatorClr2Java::GetEvaluatorDescriptor() { + ManagedLog::LOGGER->LogStart("AllocatedEvaluatorClr2Java::GetEvaluatorDescriptor"); + return CommonUtilities::RetrieveEvaluatorDescriptor(_jobjectAllocatedEvaluator, _jvm); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp b/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp new file mode 100644 index 0000000..d91c459 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/AssemblyInfo.cpp @@ -0,0 +1,57 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "stdafx.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::InteropServices; +using namespace System::Security::Permissions; + +// +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +// +[assembly:AssemblyTitleAttribute(L"OrgApacheREEFJavaClrBridge")]; +[assembly:AssemblyDescriptionAttribute(L"")]; +[assembly:AssemblyConfigurationAttribute(L"")]; +[assembly:AssemblyCompanyAttribute(L"")]; +[assembly:AssemblyProductAttribute(L"OrgApacheREEFJavaClrBridge")]; +[assembly:AssemblyCopyrightAttribute(L"Copyright (c) 2015")]; +[assembly:AssemblyTrademarkAttribute(L"")]; +[assembly:AssemblyCultureAttribute(L"")]; + +// +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the value or you can default the Revision and Build Numbers +// by using the '*' as shown below: + +[assembly:AssemblyVersionAttribute("1.0.*")]; + +[assembly:ComVisible(false)]; + +[assembly:CLSCompliantAttribute(true)]; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/AssemblyUtil.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/AssemblyUtil.cpp b/lang/cs/Org.Apache.REEF.Bridge/AssemblyUtil.cpp new file mode 100644 index 0000000..ce9239c --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/AssemblyUtil.cpp @@ -0,0 +1,53 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "InteropAssemblies.h" + + +void AssemblyUtil::Add(Assembly^ myasm) { + if (0 == _asmCount) { + //asm1 = myasm; + AppDomain^ currentDomain = AppDomain::CurrentDomain; + currentDomain->AssemblyResolve += gcnew ResolveEventHandler(&MyResolveEventHandler); + } + String^ asmName = myasm->FullName->ToLower(); + Assembly^ existingAsm = nullptr; + if (!asms2->TryGetValue(asmName, existingAsm)) { + Console::WriteLine ("AssemblyUtil:: Adding " + asmName); + asms2->Add(asmName , myasm); + ++_asmCount; + } +} + +Assembly^ AssemblyUtil::FindAsm (String^ myasm) { + Assembly^ returnAsm = nullptr; + if (!asms2->TryGetValue(myasm->ToLower(), returnAsm)) { + Console::WriteLine ("AssemblyUtil:: FindAsm_Not_Found " + myasm->ToString()); + } + return returnAsm; +} + +Assembly^ AssemblyUtil::MyResolveEventHandler(Object^ sender, ResolveEventArgs^ args) { + Console::WriteLine ("AssemblyUtil:: Resolving " + args->Name); + Assembly^ myAsm = AssemblyUtil::FindAsm(args->Name); + if (nullptr != myAsm) { + Console::WriteLine ("AssemblyUtil:: Found " + args->Name); + } + return myAsm ; +} + http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp new file mode 100644 index 0000000..b7c3a2e --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.cpp @@ -0,0 +1,102 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "InteropUtil.h" +#include "BinaryUtil.h" + +DWORD GetActualAddressFromRVA(IMAGE_SECTION_HEADER* pSectionHeader, IMAGE_NT_HEADERS* pNTHeaders, DWORD dwRVA) { + DWORD dwRet = 0; + + for (int j = 0; j < pNTHeaders->FileHeader.NumberOfSections; j++, pSectionHeader++) { + DWORD cbMaxOnDisk = min( pSectionHeader->Misc.VirtualSize, pSectionHeader->SizeOfRawData ); + + DWORD startSectRVA, endSectRVA; + + startSectRVA = pSectionHeader->VirtualAddress; + endSectRVA = startSectRVA + cbMaxOnDisk; + + if ( (dwRVA >= startSectRVA) && (dwRVA < endSectRVA)) { + dwRet = (pSectionHeader->PointerToRawData ) + (dwRVA - startSectRVA); + break; + } + + } + + return dwRet; +} + + +BINARY_TYPE IsManagedBinary(const wchar_t* lpszImageName) { + BINARY_TYPE binaryType = BINARY_TYPE_NONE; + HANDLE hFile = CreateFile(lpszImageName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + + if (INVALID_HANDLE_VALUE != hFile) { + //succeeded + HANDLE hOpenFileMapping = CreateFileMapping(hFile, NULL, PAGE_READONLY, 0, 0, NULL); + if (hOpenFileMapping) { + BYTE* lpBaseAddress = NULL; + + lpBaseAddress = (BYTE*)MapViewOfFile(hOpenFileMapping, FILE_MAP_READ, 0, 0, 0); + + if (lpBaseAddress) { + //having mapped the executable to our process space, now start navigating through the sections + + //DOS header is straightforward. It is the topmost structure in the PE file + //i.e. the one at the lowest offset into the file + IMAGE_DOS_HEADER* pDOSHeader = (IMAGE_DOS_HEADER*)lpBaseAddress; + + //the only important data in the DOS header is the e_lfanew + //the e_lfanew points to the offset of the beginning of NT Headers data + IMAGE_NT_HEADERS* pNTHeaders = (IMAGE_NT_HEADERS*)((BYTE*)pDOSHeader + pDOSHeader->e_lfanew); + + IMAGE_SECTION_HEADER* pSectionHeader = (IMAGE_SECTION_HEADER*)((BYTE*)pNTHeaders + sizeof(IMAGE_NT_HEADERS)); + + //Now, start parsing + //check if it is a PE file + + if (pNTHeaders->Signature == IMAGE_NT_SIGNATURE) { + //start parsing COM table + + DWORD dwNETHeaderTableLocation = pNTHeaders->OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR].VirtualAddress; + + if (dwNETHeaderTableLocation) { + //import data does exist for this module + IMAGE_COR20_HEADER* pNETHeader = (IMAGE_COR20_HEADER*)((BYTE*)pDOSHeader + GetActualAddressFromRVA(pSectionHeader, pNTHeaders, dwNETHeaderTableLocation)); + + if (pNETHeader) { + binaryType = BINARY_TYPE_CLR; + } + else { + binaryType = BINARY_TYPE_NATIVE; + } + } + else { + binaryType = BINARY_TYPE_NATIVE; + } + } + else { + binaryType = BINARY_TYPE_NONE; + } + UnmapViewOfFile(lpBaseAddress); + } + CloseHandle(hOpenFileMapping); + } + CloseHandle(hFile); + } + return binaryType; +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h new file mode 100644 index 0000000..dc946a6 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/BinaryUtil.h @@ -0,0 +1,26 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +typedef enum BINARY_TYPE { + BINARY_TYPE_NONE = 0, + BINARY_TYPE_NATIVE = 1, + BINARY_TYPE_CLR = 2, +} BINARY_TYPE ; + + +BINARY_TYPE IsManagedBinary(const wchar_t* lpszImageName); http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp new file mode 100644 index 0000000..6584abe --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/ClosedContextClr2Java.cpp @@ -0,0 +1,90 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + ClosedContextClr2Java::ClosedContextClr2Java(JNIEnv *env, jobject jobjectClosedContext) { + ManagedLog::LOGGER->LogStart("ClosedContextClr2Java::ClosedContextClr2Java"); + + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectClosedContext = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectClosedContext)); + jclass jclassClosedContext = env->GetObjectClass(_jobjectClosedContext); + + jfieldID jidContextId = env->GetFieldID(jclassClosedContext, "contextId", "Ljava/lang/String;"); + jfieldID jidEvaluatorId = env->GetFieldID(jclassClosedContext, "evaluatorId", "Ljava/lang/String;"); + + _jstringContextId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectClosedContext, jidContextId))); + _jstringEvaluatorId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectClosedContext, jidEvaluatorId))); + + ManagedLog::LOGGER->LogStop("ClosedContextClr2Java::ClosedContextClr2Java"); + } + + IActiveContextClr2Java^ ClosedContextClr2Java::GetParentContext() { + ManagedLog::LOGGER->LogStart("ClosedContextClr2Java::GetParentContext"); + + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassClosedContext = env->GetObjectClass(_jobjectClosedContext); + jfieldID jidParentContext = env->GetFieldID(jclassClosedContext, "parentContext", "Lorg/apache/reef/javabridge/ActiveContextBridge;"); + jobject jobjectParentContext = env->GetObjectField(_jobjectClosedContext, jidParentContext); + ManagedLog::LOGGER->LogStop("ClosedContextClr2Java::GetParentContext"); + + return gcnew ActiveContextClr2Java(env, jobjectParentContext); + } + + String^ ClosedContextClr2Java::GetId() { + ManagedLog::LOGGER->Log("ClosedContextClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringContextId); + } + + String^ ClosedContextClr2Java::GetEvaluatorId() { + ManagedLog::LOGGER->Log("ClosedContextClr2Java::GetEvaluatorId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringEvaluatorId); + } + + IEvaluatorDescriptor^ ClosedContextClr2Java::GetEvaluatorDescriptor() { + ManagedLog::LOGGER->LogStart("ClosedContextClr2Java::GetEvaluatorDescriptor"); + return CommonUtilities::RetrieveEvaluatorDescriptor(_jobjectClosedContext, _jvm); + } + + void ClosedContextClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("ClosedContextClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectClosedContext); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h new file mode 100644 index 0000000..b1e4491 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/Clr2JavaImpl.h @@ -0,0 +1,223 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "InteropUtil.h" +#include "org_apache_reef_javabridge_NativeInterop.h" +#include "JavaClrBridge.h" +#include "InteropAssemblies.h" +#using "Org.Apache.REEF.Driver.dll" + +using namespace System; +using namespace System::IO; +using namespace System::Collections::Generic; +using namespace System::Runtime::InteropServices; +using namespace System::Reflection; +using namespace Org::Apache::REEF::Driver::Bridge; +using namespace Org::Apache::REEF::Driver::Evaluator; + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + public ref class CommonUtilities { + public: + static IEvaluatorDescriptor^ RetrieveEvaluatorDescriptor(jobject object, JavaVM* jvm); + }; + + public ref class AllocatedEvaluatorClr2Java : public IAllocatedEvaluaotrClr2Java { + jobject _jobjectAllocatedEvaluator; + JavaVM* _jvm; + jstring _jstringId; + jstring _jstringNameServerInfo; + public: + AllocatedEvaluatorClr2Java(JNIEnv *env, jobject jallocatedEvaluator); + virtual void SubmitContextAndTask(String^ contextConfigStr, String^ taskConfigStr); + virtual void SubmitContext(String^ contextConfigStr); + virtual void SubmitContextAndService(String^ contextConfigStr, String^ serviceConfigStr); + virtual void SubmitContextAndServiceAndTask(String^ contextConfigStr, String^ serviceConfigStr, String^ taskConfigStr); + virtual void OnError(String^ message); + virtual void Close(); + virtual String^ GetId(); + virtual String^ GetNameServerInfo(); + virtual IEvaluatorDescriptor^ GetEvaluatorDescriptor(); + }; + + public ref class ActiveContextClr2Java : public IActiveContextClr2Java { + jobject _jobjectActiveContext; + jstring _jstringId; + jstring _jstringEvaluatorId; + JavaVM* _jvm; + public: + ActiveContextClr2Java(JNIEnv *env, jobject jallocatedEvaluator); + virtual void SubmitTask(String^ taskConfigStr); + virtual void Close(); + virtual void OnError(String^ message); + virtual String^ GetId(); + virtual String^ GetEvaluatorId(); + virtual IEvaluatorDescriptor^ GetEvaluatorDescriptor(); + }; + + public ref class EvaluatorRequestorClr2Java : public IEvaluatorRequestorClr2Java { + jobject _jobjectEvaluatorRequestor; + JavaVM* _jvm; + public: + EvaluatorRequestorClr2Java(JNIEnv *env, jobject jevaluatorRequestor); + virtual void OnError(String^ message); + virtual void Submit(IEvaluatorRequest^ request); + }; + + public ref class TaskMessageClr2Java : public ITaskMessageClr2Java { + jobject _jobjectTaskMessage; + JavaVM* _jvm; + jstring _jstringId; + public: + TaskMessageClr2Java(JNIEnv *env, jobject jtaskMessage); + virtual void OnError(String^ message); + virtual String^ GetId(); + }; + + public ref class FailedTaskClr2Java : public IFailedTaskClr2Java { + jobject _jobjectFailedTask; + JavaVM* _jvm; + public: + FailedTaskClr2Java(JNIEnv *env, jobject jfailedTask); + virtual void OnError(String^ message); + virtual IActiveContextClr2Java^ GetActiveContext(); + virtual String^ GetString(); + }; + + public ref class RunningTaskClr2Java : public IRunningTaskClr2Java { + jobject _jobjectRunningTask; + JavaVM* _jvm; + jstring _jstringId; + public: + RunningTaskClr2Java(JNIEnv *env, jobject jrunningTask); + virtual void OnError(String^ message); + virtual IActiveContextClr2Java^ GetActiveContext(); + virtual String^ GetId(); + virtual void Send(array<byte>^ message); + }; + + public ref class FailedEvaluatorClr2Java : public IFailedEvaluatorClr2Java { + jobject _jobjectFailedEvaluator; + JavaVM* _jvm; + jstring _jstringId; + public: + FailedEvaluatorClr2Java(JNIEnv *env, jobject jfailedEvaluator); + virtual void OnError(String^ message); + virtual IEvaluatorRequestorClr2Java^ GetEvaluatorRequestor(); + virtual String^ GetId(); + }; + + public ref class HttpServerClr2Java : public IHttpServerBridgeClr2Java { + jobject _jhttpServerEventBridge; + JavaVM* _jvm; + public: + HttpServerClr2Java(JNIEnv *env, jobject jhttpServerEventBridge); + virtual void OnError(String^ message); + virtual String^ GetQueryString(); + virtual void SetUriSpecification(String^ uriSpecification); + virtual void SetQueryResult(String^ queryResult); + virtual array<byte>^ GetQueryRequestData(); + virtual void SetQueryResponseData(array<byte>^ responseData); + }; + + public ref class CompletedTaskClr2Java : public ICompletedTaskClr2Java { + jobject _jobjectCompletedTask; + JavaVM* _jvm; + jstring _jstringId; + public: + CompletedTaskClr2Java(JNIEnv *env, jobject jcompletedTask); + virtual void OnError(String^ message); + virtual IActiveContextClr2Java^ GetActiveContext(); + virtual String^ GetId(); + }; + + public ref class SuspendedTaskClr2Java : public ISuspendedTaskClr2Java { + jobject _jobjectSuspendedTask; + JavaVM* _jvm; + jstring _jstringId; + public: + SuspendedTaskClr2Java(JNIEnv *env, jobject jobjectSuspendedTask); + virtual void OnError(String^ message); + virtual IActiveContextClr2Java^ GetActiveContext(); + virtual String^ GetId(); + virtual array<byte>^ Get(); + }; + + public ref class CompletedEvaluatorClr2Java : public ICompletedEvaluatorClr2Java { + jobject _jobjectCompletedEvaluator; + JavaVM* _jvm; + jstring _jstringId; + public: + CompletedEvaluatorClr2Java(JNIEnv *env, jobject jobjectCompletedEvaluator); + virtual void OnError(String^ message); + virtual String^ GetId(); + }; + + public ref class ClosedContextClr2Java : public IClosedContextClr2Java { + jobject _jobjectClosedContext; + JavaVM* _jvm; + jstring _jstringContextId; + jstring _jstringEvaluatorId; + public: + ClosedContextClr2Java(JNIEnv *env, jobject jobjectClosedContext); + virtual void OnError(String^ message); + virtual String^ GetId(); + virtual String^ GetEvaluatorId(); + virtual IEvaluatorDescriptor^ GetEvaluatorDescriptor(); + virtual IActiveContextClr2Java^ GetParentContext(); + }; + + public ref class FailedContextClr2Java : public IFailedContextClr2Java { + jobject _jobjectFailedContext; + JavaVM* _jvm; + jstring _jstringContextId; + jstring _jstringEvaluatorId; + jstring _jstringParentContextId; + public: + FailedContextClr2Java(JNIEnv *env, jobject jobjectFailedContext); + virtual void OnError(String^ message); + virtual String^ GetId(); + virtual String^ GetEvaluatorId(); + virtual String^ GetParentId(); + virtual IEvaluatorDescriptor^ GetEvaluatorDescriptor(); + virtual IActiveContextClr2Java^ GetParentContext(); + }; + + public ref class ContextMessageClr2Java : public IContextMessageClr2Java { + jobject _jobjectContextMessage; + JavaVM* _jvm; + jbyteArray _jarrayMessage; + jstring _jstringId; + jstring _jstringSourceId; + public: + ContextMessageClr2Java(JNIEnv *env, jobject jobjectContextMessage); + virtual void OnError(String^ message); + virtual array<byte>^ Get(); + virtual String^ GetId(); + virtual String^ GetMessageSourceId(); + }; + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/CommonUtilities.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/CommonUtilities.cpp b/lang/cs/Org.Apache.REEF.Bridge/CommonUtilities.cpp new file mode 100644 index 0000000..5de6e75 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/CommonUtilities.cpp @@ -0,0 +1,55 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>CommonUtilities"); + }; + + IEvaluatorDescriptor^ CommonUtilities::RetrieveEvaluatorDescriptor(jobject object, JavaVM* jvm) { + ManagedLog::LOGGER->LogStart("CommonUtilities::GetEvaluatorDescriptor"); + JNIEnv *env = RetrieveEnv(jvm); + jclass jclassActiveContext = env->GetObjectClass(object); + jmethodID jmidGetEvaluatorDescriptor = env->GetMethodID(jclassActiveContext, "getEvaluatorDescriptorSring", "()Ljava/lang/String;"); + + if (jmidGetEvaluatorDescriptor == NULL) { + ManagedLog::LOGGER->Log("jmidGetEvaluatorDescriptor is NULL"); + return nullptr; + } + jstring jevaluatorDescriptorString = (jstring)env->CallObjectMethod( + object, + jmidGetEvaluatorDescriptor); + String^ evaluatorDescriptorString = ManagedStringFromJavaString(env, jevaluatorDescriptorString); + ManagedLog::LOGGER->LogStop("InteropUtil::GetEvaluatorDescriptor"); + + return gcnew EvaluatorDescriptorImpl(evaluatorDescriptorString); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp new file mode 100644 index 0000000..c961881 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/CompletedEvaluatorClr2Java.cpp @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + CompletedEvaluatorClr2Java::CompletedEvaluatorClr2Java(JNIEnv *env, jobject jCompletedEvaluator) { + ManagedLog::LOGGER->LogStart("CompletedEvaluatorClr2Java::CompletedEvaluatorClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectCompletedEvaluator = reinterpret_cast<jobject>(env->NewGlobalRef(jCompletedEvaluator)); + + jclass jclassCompletedEvaluator = env->GetObjectClass(_jobjectCompletedEvaluator); + jfieldID jidEvaluatorId = env->GetFieldID(jclassCompletedEvaluator, "evaluatorId", "Ljava/lang/String;"); + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectCompletedEvaluator, jidEvaluatorId))); + ManagedLog::LOGGER->LogStop("CompletedEvaluatorClr2Java::CompletedEvaluatorClr2Java"); + } + + void CompletedEvaluatorClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("CompletedEvaluatorClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectCompletedEvaluator); + } + + String^ CompletedEvaluatorClr2Java::GetId() { + ManagedLog::LOGGER->Log("CompletedEvaluatorClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp new file mode 100644 index 0000000..be9fe31 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/CompletedTaskClr2Java.cpp @@ -0,0 +1,73 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + CompletedTaskClr2Java::CompletedTaskClr2Java(JNIEnv *env, jobject jobjectCompletedTask) { + ManagedLog::LOGGER->LogStart("CompletedTaskClr2Java::CompletedTaskClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectCompletedTask = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectCompletedTask)); + + jclass jclassCompletedTask = env->GetObjectClass(_jobjectCompletedTask); + jfieldID jidTaskId = env->GetFieldID(jclassCompletedTask, "taskId", "Ljava/lang/String;"); + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectCompletedTask, jidTaskId))); + ManagedLog::LOGGER->LogStop("CompletedTaskClr2Java::CompletedTaskClr2Java"); + } + + void CompletedTaskClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("CompletedTaskClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectCompletedTask); + } + + IActiveContextClr2Java^ CompletedTaskClr2Java::GetActiveContext() { + ManagedLog::LOGGER->LogStart("CompletedTaskClr2Java::GetActiveContext"); + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassCompletedTask = env->GetObjectClass(_jobjectCompletedTask); + jfieldID jidActiveContext = env->GetFieldID(jclassCompletedTask, "jactiveContext", "Lorg/apache/reef/javabridge/ActiveContextBridge;"); + jobject jobjectActiveContext = env->GetObjectField(_jobjectCompletedTask, jidActiveContext); + ManagedLog::LOGGER->LogStop("CompletedTaskClr2Java::GetActiveContext"); + return gcnew ActiveContextClr2Java(env, jobjectActiveContext); + } + + String^ CompletedTaskClr2Java::GetId() { + ManagedLog::LOGGER->Log("CompletedTaskClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp new file mode 100644 index 0000000..c385e46 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/ContextMessageClr2Java.cpp @@ -0,0 +1,80 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + ContextMessageClr2Java::ContextMessageClr2Java(JNIEnv *env, jobject jobjectContextMessage) { + ManagedLog::LOGGER->LogStart("ContextMessageClr2Java::ContextMessageClr2Java"); + + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectContextMessage = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectContextMessage)); + jclass jclassContextMessage = env->GetObjectClass(_jobjectContextMessage); + + jfieldID jidId = env->GetFieldID(jclassContextMessage, "contextMessageId", "Ljava/lang/String;"); + jfieldID jidSourceId = env->GetFieldID(jclassContextMessage, "messageSourceId", "Ljava/lang/String;"); + jfieldID jidMessage = env->GetFieldID(jclassContextMessage, "message", "()[B"); + + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectContextMessage, jidId))); + _jstringSourceId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectContextMessage, jidSourceId))); + _jarrayMessage = reinterpret_cast<jbyteArray>(env->NewGlobalRef(env->GetObjectField(_jobjectContextMessage, jidMessage))); + + ManagedLog::LOGGER->LogStop("ContextMessageClr2Java::ContextMessageClr2Java"); + } + + String^ ContextMessageClr2Java::GetId() { + ManagedLog::LOGGER->Log("ContextMessageClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + + String^ ContextMessageClr2Java::GetMessageSourceId() { + ManagedLog::LOGGER->Log("ContextMessageClr2Java::GetMessageSourceId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringSourceId); + } + + array<byte>^ ContextMessageClr2Java::Get() { + ManagedLog::LOGGER->Log("ContextMessageClr2Java::Get"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedByteArrayFromJavaByteArray(env, _jarrayMessage); + } + + void ContextMessageClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("ContextMessageClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectContextMessage); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp new file mode 100644 index 0000000..2daed9e --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/EvaluatorRequestorClr2Java.cpp @@ -0,0 +1,73 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + EvaluatorRequestorClr2Java::EvaluatorRequestorClr2Java(JNIEnv *env, jobject jevaluatorRequestor) { + ManagedLog::LOGGER->LogStart("EvaluatorRequestorClr2Java::EvaluatorRequestorClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectEvaluatorRequestor = reinterpret_cast<jobject>(env->NewGlobalRef(jevaluatorRequestor)); + ManagedLog::LOGGER->LogStop("EvaluatorRequestorClr2Java::EvaluatorRequestorClr2Java"); + } + + void EvaluatorRequestorClr2Java::Submit(IEvaluatorRequest^ request) { + ManagedLog::LOGGER->LogStart("EvaluatorRequestorClr2Java::Submit"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclassEvaluatorRequestor = env->GetObjectClass(_jobjectEvaluatorRequestor); + jmethodID jmidSubmit = env->GetMethodID(jclassEvaluatorRequestor, "submit", "(IIILjava/lang/String;)V"); + + if (jmidSubmit == NULL) { + fprintf(stdout, " jmidSubmit is NULL\n"); + fflush(stdout); + return; + } + env->CallObjectMethod( + _jobjectEvaluatorRequestor, + jmidSubmit, + request->Number, + request->MemoryMegaBytes, + request->VirtualCore, + JavaStringFromManagedString(env, request->Rack)); + ManagedLog::LOGGER->LogStop("EvaluatorRequestorClr2Java::Submit"); + } + + void EvaluatorRequestorClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("EvaluatorRequestorClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectEvaluatorRequestor); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp new file mode 100644 index 0000000..5a96202 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/FailedContextClr2Java.cpp @@ -0,0 +1,98 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + FailedContextClr2Java::FailedContextClr2Java(JNIEnv *env, jobject jobjectFailedContext) { + ManagedLog::LOGGER->LogStart("FailedContextClr2Java::FailedContextClr2Java"); + + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectFailedContext = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectFailedContext)); + jclass jclassFailedContext = env->GetObjectClass(_jobjectFailedContext); + + jfieldID jidContextId = env->GetFieldID(jclassFailedContext, "contextId", "Ljava/lang/String;"); + jfieldID jidEvaluatorId = env->GetFieldID(jclassFailedContext, "evaluatorId", "Ljava/lang/String;"); + jfieldID jidParentId = env->GetFieldID(jclassFailedContext, "parentContextId", "Ljava/lang/String;"); + + _jstringContextId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectFailedContext, jidContextId))); + _jstringEvaluatorId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectFailedContext, jidEvaluatorId))); + _jstringParentContextId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectFailedContext, jidParentId))); + + ManagedLog::LOGGER->LogStop("FailedContextClr2Java::FailedContextClr2Java"); + } + + IActiveContextClr2Java^ FailedContextClr2Java::GetParentContext() { + ManagedLog::LOGGER->LogStart("FailedContextClr2Java::GetParentContext"); + + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassFailedContext = env->GetObjectClass(_jobjectFailedContext); + jfieldID jidParentContext = env->GetFieldID(jclassFailedContext, "parentContext", "Lorg/apache/reef/javabridge/ActiveContextBridge;"); + jobject jobjectParentContext = env->GetObjectField(_jobjectFailedContext, jidParentContext); + ManagedLog::LOGGER->LogStop("FailedContextClr2Java::GetParentContext"); + + return gcnew ActiveContextClr2Java(env, jobjectParentContext); + } + + String^ FailedContextClr2Java::GetId() { + ManagedLog::LOGGER->Log("FailedContextClr2Java::GetId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringContextId); + } + + String^ FailedContextClr2Java::GetEvaluatorId() { + ManagedLog::LOGGER->Log("FailedContextClr2Java::GetEvaluatorId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringEvaluatorId); + } + + String^ FailedContextClr2Java::GetParentId() { + ManagedLog::LOGGER->Log("FailedContextClr2Java::GetParentId"); + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringParentContextId); + } + + IEvaluatorDescriptor^ FailedContextClr2Java::GetEvaluatorDescriptor() { + ManagedLog::LOGGER->LogStart("FailedContextClr2Java::GetEvaluatorDescriptor"); + return CommonUtilities::RetrieveEvaluatorDescriptor(_jobjectFailedContext, _jvm); + } + + void FailedContextClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("FailedContextClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectFailedContext); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp new file mode 100644 index 0000000..615e09f --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/FailedEvaluatorClr2Java.cpp @@ -0,0 +1,76 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +using namespace JavaClrBridge; + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + FailedEvaluatorClr2Java::FailedEvaluatorClr2Java(JNIEnv *env, jobject jobjectFailedEvaluator) { + ManagedLog::LOGGER->LogStart("FailedEvaluatorClr2Java::FailedEvaluatorClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectFailedEvaluator = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectFailedEvaluator)); + + jclass jclassFailedEvaluator = env->GetObjectClass(_jobjectFailedEvaluator); + jfieldID jidEvaluatorId = env->GetFieldID(jclassFailedEvaluator, "evaluatorId", "Ljava/lang/String;"); + _jstringId = reinterpret_cast<jstring>(env->NewGlobalRef(env->GetObjectField(_jobjectFailedEvaluator, jidEvaluatorId))); + ManagedLog::LOGGER->LogStop("FailedEvaluatorClr2Java::FailedEvaluatorClr2Java"); + } + + IEvaluatorRequestorClr2Java^ FailedEvaluatorClr2Java::GetEvaluatorRequestor() { + ManagedLog::LOGGER->LogStart("FailedEvaluatorClr2Java::GetEvaluatorRequestor"); + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassFailedEvaluator = env->GetObjectClass(_jobjectFailedEvaluator); + jfieldID jidEvaluatorRequestor = env->GetFieldID(jclassFailedEvaluator, "evaluatorRequestorBridge", "Lorg/apache/reef/javabridge/EvaluatorRequestorBridge;"); + jobject jobjectEvaluatorRequestor = env->GetObjectField(_jobjectFailedEvaluator, jidEvaluatorRequestor); + ManagedLog::LOGGER->LogStop("FailedEvaluatorClr2Java::GetEvaluatorRequestor"); + return gcnew EvaluatorRequestorClr2Java(env, jobjectEvaluatorRequestor); + } + + String^ FailedEvaluatorClr2Java::GetId() { + ManagedLog::LOGGER->Log("FailedEvaluatorClr2Java::GetId"); + + JNIEnv *env = RetrieveEnv(_jvm); + return ManagedStringFromJavaString(env, _jstringId); + } + + void FailedEvaluatorClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("FailedEvaluatorClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectFailedEvaluator); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp new file mode 100644 index 0000000..b27b13d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/FailedTaskClr2Java.cpp @@ -0,0 +1,83 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + FailedTaskClr2Java::FailedTaskClr2Java(JNIEnv *env, jobject jobjectFailedTask) { + ManagedLog::LOGGER->LogStart("FailedTaskClr2Java::AllocatedEvaluatorClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jobjectFailedTask = reinterpret_cast<jobject>(env->NewGlobalRef(jobjectFailedTask)); + ManagedLog::LOGGER->LogStop("FailedTaskClr2Java::AllocatedEvaluatorClr2Java"); + } + + IActiveContextClr2Java^ FailedTaskClr2Java::GetActiveContext() { + ManagedLog::LOGGER->LogStart("FailedTaskClr2Java::GetActiveContext"); + + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassFailedTask = env->GetObjectClass(_jobjectFailedTask); + jfieldID jidActiveContext = env->GetFieldID(jclassFailedTask, "jactiveContext", "Lorg/apache/reef/javabridge/ActiveContextBridge;"); + jobject jobjectActiveContext = env->GetObjectField(_jobjectFailedTask, jidActiveContext); + + ManagedLog::LOGGER->LogStop("FailedTaskClr2Java::GetActiveContext"); + return gcnew ActiveContextClr2Java(env, jobjectActiveContext); + } + + String^ FailedTaskClr2Java::GetString() { + ManagedLog::LOGGER->LogStart("FailedTaskClr2Java::GetString"); + JNIEnv *env = RetrieveEnv(_jvm); + + jclass jclassFailedTask = env->GetObjectClass(_jobjectFailedTask); + jmethodID jmidGetFailedTaskString = env->GetMethodID(jclassFailedTask, "getFailedTaskString", "()Ljava/lang/String;"); + + if (jmidGetFailedTaskString == NULL) { + ManagedLog::LOGGER->LogStart("jmidGetFailedTaskString is NULL"); + return nullptr; + } + jstring jFailedTaskString = (jstring)env->CallObjectMethod( + _jobjectFailedTask, + jmidGetFailedTaskString); + ManagedLog::LOGGER->LogStop("FailedTaskClr2Java::GetString"); + return ManagedStringFromJavaString(env, jFailedTaskString); + } + + void FailedTaskClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("FailedTaskClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jobjectFailedTask); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp b/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp new file mode 100644 index 0000000..f8a819d --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/HttpServerClr2Java.cpp @@ -0,0 +1,139 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#include "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace REEF { + namespace Driver { + namespace Bridge { + namespace Clr2java { + ref class ManagedLog { + internal: + static BridgeLogger^ LOGGER = BridgeLogger::GetLogger("<C++>"); + }; + + HttpServerClr2Java::HttpServerClr2Java(JNIEnv *env, jobject jhttpServerEventBridge) { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::HttpServerClr2Java"); + pin_ptr<JavaVM*> pJavaVm = &_jvm; + if (env->GetJavaVM(pJavaVm) != 0) { + ManagedLog::LOGGER->LogError("Failed to get JavaVM", nullptr); + } + _jhttpServerEventBridge = reinterpret_cast<jobject>(env->NewGlobalRef(jhttpServerEventBridge)); + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::HttpServerClr2Java"); + } + + String^ HttpServerClr2Java::GetQueryString() { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::GetQueryString"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclasshttpServerEventBridge = env->GetObjectClass(_jhttpServerEventBridge); + jmethodID jmidgetQueryString = env->GetMethodID(jclasshttpServerEventBridge, "getQueryString", "()Ljava/lang/String;"); + if (jmidgetQueryString == NULL) { + fprintf(stdout, " jmidgetQueryString is NULL\n"); + fflush(stdout); + return nullptr; + } + jstring jQueryString = (jstring)env->CallObjectMethod( + _jhttpServerEventBridge, + jmidgetQueryString); + + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::GetQueryString"); + return ManagedStringFromJavaString(env, jQueryString); + } + + array<byte>^ HttpServerClr2Java::GetQueryRequestData() { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::GetQueryRequestData"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclasshttpServerEventBridge = env->GetObjectClass(_jhttpServerEventBridge); + jmethodID jmidgetQueryBytes = env->GetMethodID(jclasshttpServerEventBridge, "getQueryRequestData", "()[B"); + + if (jmidgetQueryBytes == NULL) { + ManagedLog::LOGGER->Log("jmidgetQueryBytes is NULL"); + return nullptr; + } + jbyteArray jQueryBytes = (jbyteArray)env->CallObjectMethod( + _jhttpServerEventBridge, + jmidgetQueryBytes); + + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::GetQueryRequestData"); + return ManagedByteArrayFromJavaByteArray(env, jQueryBytes); + } + + void HttpServerClr2Java::SetQueryResult(String^ queryResult) { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::SetQueryResult"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclasshttpServerEventBridge = env->GetObjectClass(_jhttpServerEventBridge); + jmethodID jmidsetQueryResult = env->GetMethodID(jclasshttpServerEventBridge, "setQueryResult", "(Ljava/lang/String;)V"); + + if (jmidsetQueryResult == NULL) { + ManagedLog::LOGGER->Log("jmidsetQueryResult is NULL"); + return; + } + env->CallObjectMethod( + _jhttpServerEventBridge, + jmidsetQueryResult, + JavaStringFromManagedString(env, queryResult)); + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::SetQueryResult"); + } + + void HttpServerClr2Java::SetQueryResponseData(array<byte>^ queryResponseData) { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::SetQueryResponseData"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclasshttpServerEventBridge = env->GetObjectClass(_jhttpServerEventBridge); + jmethodID jmidsetQueryResult = env->GetMethodID(jclasshttpServerEventBridge, "setQueryResponseData", "([B)V"); + + if (jmidsetQueryResult == NULL) { + ManagedLog::LOGGER->Log("jmidsetQueryResult is NULL"); + return; + } + env->CallObjectMethod( + _jhttpServerEventBridge, + jmidsetQueryResult, + JavaByteArrayFromManagedByteArray(env, queryResponseData)); + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::SetQueryResponseData"); + } + + void HttpServerClr2Java::SetUriSpecification(String^ uriSpecification) { + ManagedLog::LOGGER->LogStart("HttpServerClr2Java::SetUriSpecification"); + JNIEnv *env = RetrieveEnv(_jvm); + jclass jclasshttpServerEventBridge = env->GetObjectClass(_jhttpServerEventBridge); + jmethodID jmidsetUriSpecification = env->GetMethodID(jclasshttpServerEventBridge, "setUriSpecification", "(Ljava/lang/String;)V"); + + if (jmidsetUriSpecification == NULL) { + ManagedLog::LOGGER->Log("jmidsetUriSpecification is NULL"); + return; + } + env->CallObjectMethod( + _jhttpServerEventBridge, + jmidsetUriSpecification, + JavaStringFromManagedString(env, uriSpecification)); + ManagedLog::LOGGER->LogStop("HttpServerClr2Java::SetUriSpecification"); + } + + void HttpServerClr2Java::OnError(String^ message) { + ManagedLog::LOGGER->Log("HttpServerClr2Java::OnError"); + JNIEnv *env = RetrieveEnv(_jvm); + HandleClr2JavaError(env, message, _jhttpServerEventBridge); + } + } + } + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/492da34a/lang/cs/Org.Apache.REEF.Bridge/InteropAssemblies.h ---------------------------------------------------------------------- diff --git a/lang/cs/Org.Apache.REEF.Bridge/InteropAssemblies.h b/lang/cs/Org.Apache.REEF.Bridge/InteropAssemblies.h new file mode 100644 index 0000000..2e80d71 --- /dev/null +++ b/lang/cs/Org.Apache.REEF.Bridge/InteropAssemblies.h @@ -0,0 +1,40 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +#pragma once +#define _USING_V110_SDK71_ + +#pragma warning( push ) +#pragma warning( disable : 4793 ) +#include <jni.h> +#pragma warning( pop ) +#include "mscoree.h" +#include "vcclr.h" + +using namespace System; +using namespace System::Reflection; +using namespace System::Collections::Generic; + +public ref class AssemblyUtil { + public : + static int _asmCount = 0; + static Dictionary<String^, System::Reflection::Assembly^>^ asms2 = gcnew Dictionary<String^, Assembly^>(); + static void Add(Assembly^ myasm); + static Assembly^ FindAsm (String^ myasm); + static Assembly^ MyResolveEventHandler(Object^ sender, ResolveEventArgs^ args); +};
