[REEF-116] Moving bridge code to proper folder structure Currently Reef-bridge related code is under reef-bridge-project which includes both java and cpp code. This PR is to address the issue described in [REEF-116]. It includes the following:
- move reef-bridge-clr from java\reef-bridge\project to cpp - move reef-bridge from java\reef-bridge\project to lang - move reef-bridge-java from java\reef-bridge\project to java - Remove additional layer java\reef-bridge-project layer - pom file in reef-bridge will generate shaded jar JIRA: [REEF-116] https://issues.apache.org/jira/browse/REEF-116 Pull Request: Closes #60 Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/22f651f8 Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/22f651f8 Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/22f651f8 Branch: refs/heads/master Commit: 22f651f8ca8aff1d929c448cd8a0aedd62a7491a Parents: 16f6c4b Author: Julia Wang <[email protected]> Authored: Fri Jan 30 10:04:44 2015 -0800 Committer: Beysim Sezgin <[email protected]> Committed: Fri Jan 30 15:45:03 2015 -0800 ---------------------------------------------------------------------- lang/cpp/.gitignore | 8 + lang/cpp/reef-bridge-clr/pom.xml | 168 +++++ .../CSharp/CSharp/ClrHandler/ClrHandler.csproj | 66 ++ .../ClrHandler/Properties/AssemblyInfo.cs | 49 ++ .../externals/Org.Apache.Reef.Driver.dll | Bin 0 -> 115712 bytes .../CSharp/ClrHandler/externals/msvcr110.dll | Bin 0 -> 849360 bytes .../ClrHandler/interface/IInteropReturnInfo.cs | 30 + .../CSharp/ClrHandler/interface/ILogger.cs | 37 + .../JavaClrBridge/ActiveContextClr2Java.cpp | 108 +++ .../AllocatedEvaluatorClr2Java.cpp | 166 +++++ .../CppBridge/JavaClrBridge/AssemblyInfo.cpp | 50 ++ .../CppBridge/JavaClrBridge/AssemblyUtil.cpp | 53 ++ .../Cpp/CppBridge/JavaClrBridge/BinaryUtil.cpp | 102 +++ .../Cpp/CppBridge/JavaClrBridge/BinaryUtil.h | 26 + .../JavaClrBridge/ClosedContextClr2Java.cpp | 88 +++ .../CppBridge/JavaClrBridge/Clr2JavaImpl.cpp | 44 ++ .../Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h | 222 ++++++ .../CppBridge/JavaClrBridge/CommonUtilities.cpp | 53 ++ .../CompletedEvaluatorClr2Java.cpp | 60 ++ .../JavaClrBridge/CompletedTaskClr2Java.cpp | 71 ++ .../JavaClrBridge/ContextMessageClr2Java.cpp | 78 ++ .../EvaluatorRequestorClr2Java.cpp | 71 ++ .../JavaClrBridge/FailedContextClr2Java.cpp | 96 +++ .../JavaClrBridge/FailedEvaluatorClr2Java.cpp | 74 ++ .../JavaClrBridge/FailedTaskClr2Java.cpp | 81 +++ .../JavaClrBridge/HttpServerClr2Java.cpp | 137 ++++ .../CppBridge/JavaClrBridge/InteropAssemblies.h | 40 + .../CppBridge/JavaClrBridge/InteropLogger.cpp | 50 ++ .../Cpp/CppBridge/JavaClrBridge/InteropLogger.h | 47 ++ .../JavaClrBridge/InteropReturnInfo.cpp | 88 +++ .../CppBridge/JavaClrBridge/InteropReturnInfo.h | 57 ++ .../Cpp/CppBridge/JavaClrBridge/InteropUtil.cpp | 129 ++++ .../Cpp/CppBridge/JavaClrBridge/InteropUtil.h | 65 ++ .../CppBridge/JavaClrBridge/JavaClrBridge.cpp | 492 +++++++++++++ .../Cpp/CppBridge/JavaClrBridge/JavaClrBridge.h | 33 + .../CppBridge/JavaClrBridge/JavaClrBridge.sln | 56 ++ .../JavaClrBridge/JavaClrBridge.vcxproj | 173 +++++ .../JavaClrBridge/JavaClrBridge.vcxproj.filters | 104 +++ .../CppBridge/JavaClrBridge/ManagedLogger.cpp | 47 ++ .../main/Cpp/CppBridge/JavaClrBridge/ReadMe.txt | 57 ++ .../JavaClrBridge/RunningTaskClr2Java.cpp | 92 +++ .../JavaClrBridge/SuspendedTaskClr2Java.cpp | 85 +++ .../JavaClrBridge/TaskMessageClr2Java.cpp | 60 ++ ...bridge-0.11.0-incubating-SNAPSHOT-shaded.jar | Bin 13555831 -> 13555093 bytes lang/java/reef-bridge-java/pom.xml | 116 +++ .../reef/javabridge/ActiveContextBridge.java | 80 ++ .../javabridge/AllocatedEvaluatorBridge.java | 141 ++++ .../reef/javabridge/ClosedContextBridge.java | 81 +++ .../javabridge/CompletedEvaluatorBridge.java | 43 ++ .../reef/javabridge/CompletedTaskBridge.java | 40 + .../reef/javabridge/ContextMessageBridge.java | 56 ++ .../javabridge/EvaluatorRequestorBridge.java | 76 ++ .../reef/javabridge/FailedContextBridge.java | 83 +++ .../reef/javabridge/FailedEvaluatorBridge.java | 47 ++ .../reef/javabridge/FailedTaskBridge.java | 60 ++ .../reef/javabridge/HttpServerEventBridge.java | 79 ++ .../apache/reef/javabridge/InteropLogger.java | 55 ++ .../reef/javabridge/InteropReturnInfo.java | 52 ++ .../org/apache/reef/javabridge/JavaBridge.java | 31 + .../org/apache/reef/javabridge/LibLoader.java | 154 ++++ .../apache/reef/javabridge/NativeBridge.java | 32 + .../apache/reef/javabridge/NativeInterop.java | 166 +++++ .../reef/javabridge/RunningTaskBridge.java | 49 ++ .../reef/javabridge/SuspendedTaskBridge.java | 54 ++ .../reef/javabridge/TaskMessageBridge.java | 36 + .../org/apache/reef/javabridge/Utilities.java | 57 ++ .../reef/javabridge/generic/JobClient.java | 322 +++++++++ .../reef/javabridge/generic/JobDriver.java | 724 +++++++++++++++++++ .../apache/reef/javabridge/generic/Launch.java | 236 ++++++ .../reef/javabridge/generic/LaunchHeadless.java | 100 +++ .../reef/javabridge/generic/package-info.java | 22 + .../util/logging/CLRBufferedLogHandler.java | 167 +++++ .../reef/util/logging/CLRLoggingConfig.java | 31 + .../apache/reef/util/logging/package-info.java | 22 + .../org/apache/reef/clr.logging.properties | 82 +++ lang/java/reef-bridge-project/.gitignore | 34 - lang/java/reef-bridge-project/pom.xml | 102 --- .../reef-bridge-project/reef-bridge-clr/pom.xml | 162 ----- .../CSharp/CSharp/ClrHandler/ClrHandler.csproj | 66 -- .../ClrHandler/Properties/AssemblyInfo.cs | 49 -- .../externals/Org.Apache.Reef.Driver.dll | Bin 121344 -> 0 bytes .../CSharp/ClrHandler/externals/msvcr110.dll | Bin 849360 -> 0 bytes .../ClrHandler/interface/IInteropReturnInfo.cs | 30 - .../CSharp/ClrHandler/interface/ILogger.cs | 37 - .../JavaClrBridge/ActiveContextClr2Java.cpp | 108 --- .../AllocatedEvaluatorClr2Java.cpp | 166 ----- .../CppBridge/JavaClrBridge/AssemblyInfo.cpp | 50 -- .../CppBridge/JavaClrBridge/AssemblyUtil.cpp | 53 -- .../Cpp/CppBridge/JavaClrBridge/BinaryUtil.cpp | 102 --- .../Cpp/CppBridge/JavaClrBridge/BinaryUtil.h | 26 - .../JavaClrBridge/ClosedContextClr2Java.cpp | 88 --- .../CppBridge/JavaClrBridge/Clr2JavaImpl.cpp | 44 -- .../Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h | 222 ------ .../CppBridge/JavaClrBridge/CommonUtilities.cpp | 53 -- .../CompletedEvaluatorClr2Java.cpp | 60 -- .../JavaClrBridge/CompletedTaskClr2Java.cpp | 71 -- .../JavaClrBridge/ContextMessageClr2Java.cpp | 78 -- .../EvaluatorRequestorClr2Java.cpp | 71 -- .../JavaClrBridge/FailedContextClr2Java.cpp | 96 --- .../JavaClrBridge/FailedEvaluatorClr2Java.cpp | 74 -- .../JavaClrBridge/FailedTaskClr2Java.cpp | 81 --- .../JavaClrBridge/HttpServerClr2Java.cpp | 137 ---- .../CppBridge/JavaClrBridge/InteropAssemblies.h | 40 - .../CppBridge/JavaClrBridge/InteropLogger.cpp | 50 -- .../Cpp/CppBridge/JavaClrBridge/InteropLogger.h | 47 -- .../JavaClrBridge/InteropReturnInfo.cpp | 88 --- .../CppBridge/JavaClrBridge/InteropReturnInfo.h | 57 -- .../Cpp/CppBridge/JavaClrBridge/InteropUtil.cpp | 129 ---- .../Cpp/CppBridge/JavaClrBridge/InteropUtil.h | 65 -- .../CppBridge/JavaClrBridge/JavaClrBridge.cpp | 492 ------------- .../Cpp/CppBridge/JavaClrBridge/JavaClrBridge.h | 33 - .../CppBridge/JavaClrBridge/JavaClrBridge.sln | 56 -- .../JavaClrBridge/JavaClrBridge.vcxproj | 173 ----- .../JavaClrBridge/JavaClrBridge.vcxproj.filters | 104 --- .../CppBridge/JavaClrBridge/ManagedLogger.cpp | 47 -- .../main/Cpp/CppBridge/JavaClrBridge/ReadMe.txt | 57 -- .../JavaClrBridge/RunningTaskClr2Java.cpp | 92 --- .../JavaClrBridge/SuspendedTaskClr2Java.cpp | 85 --- .../JavaClrBridge/TaskMessageClr2Java.cpp | 60 -- .../reef-bridge-java/pom.xml | 116 --- .../reef/javabridge/ActiveContextBridge.java | 80 -- .../javabridge/AllocatedEvaluatorBridge.java | 141 ---- .../reef/javabridge/ClosedContextBridge.java | 81 --- .../javabridge/CompletedEvaluatorBridge.java | 43 -- .../reef/javabridge/CompletedTaskBridge.java | 40 - .../reef/javabridge/ContextMessageBridge.java | 56 -- .../javabridge/EvaluatorRequestorBridge.java | 76 -- .../reef/javabridge/FailedContextBridge.java | 83 --- .../reef/javabridge/FailedEvaluatorBridge.java | 47 -- .../reef/javabridge/FailedTaskBridge.java | 60 -- .../reef/javabridge/HttpServerEventBridge.java | 79 -- .../apache/reef/javabridge/InteropLogger.java | 55 -- .../reef/javabridge/InteropReturnInfo.java | 52 -- .../org/apache/reef/javabridge/JavaBridge.java | 31 - .../org/apache/reef/javabridge/LibLoader.java | 154 ---- .../apache/reef/javabridge/NativeBridge.java | 32 - .../apache/reef/javabridge/NativeInterop.java | 166 ----- .../reef/javabridge/RunningTaskBridge.java | 49 -- .../reef/javabridge/SuspendedTaskBridge.java | 54 -- .../reef/javabridge/TaskMessageBridge.java | 36 - .../org/apache/reef/javabridge/Utilities.java | 57 -- .../reef/javabridge/generic/JobClient.java | 322 --------- .../reef/javabridge/generic/JobDriver.java | 724 ------------------- .../apache/reef/javabridge/generic/Launch.java | 236 ------ .../reef/javabridge/generic/LaunchHeadless.java | 100 --- .../reef/javabridge/generic/package-info.java | 22 - .../util/logging/CLRBufferedLogHandler.java | 167 ----- .../reef/util/logging/CLRLoggingConfig.java | 31 - .../apache/reef/util/logging/package-info.java | 22 - .../org/apache/reef/clr.logging.properties | 82 --- .../reef-bridge-project/reef-bridge/pom.xml | 111 --- lang/reef-bridge/pom.xml | 139 ++++ pom.xml | 6 +- 153 files changed, 7050 insertions(+), 7142 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/.gitignore ---------------------------------------------------------------------- diff --git a/lang/cpp/.gitignore b/lang/cpp/.gitignore new file mode 100644 index 0000000..79dafb9 --- /dev/null +++ b/lang/cpp/.gitignore @@ -0,0 +1,8 @@ +**/*.sdf +**/*.opensdf +**/*.suo +**/obj +**/x64 + + + http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/pom.xml ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/pom.xml b/lang/cpp/reef-bridge-clr/pom.xml new file mode 100644 index 0000000..6e1e987 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/pom.xml @@ -0,0 +1,168 @@ +<?xml version="1.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. +--> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <artifactId>reef-bridge-clr</artifactId> + <name>REEF Bridge CLR</name> + <description>Bridge between JVM and CLR.</description> + + + <parent> + <groupId>org.apache.reef</groupId> + <artifactId>reef-project</artifactId> + <version>0.11.0-incubating-SNAPSHOT</version> + <relativePath>../../..</relativePath> + </parent> + + + <dependencies> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-common</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-runtime-local</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-runtime-yarn</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-io</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-checkpoint</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-dotnet</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>${project.groupId}</groupId> + <artifactId>reef-bridge-java</artifactId> + <version>${project.version}</version> + </dependency> + <dependency> + <groupId>org.apache.avro</groupId> + <artifactId>avro</artifactId> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.rat</groupId> + <artifactId>apache-rat-plugin</artifactId> + <configuration> + <excludes> + <!-- Build files are frequently overwritten by Visual Studio --> + <exclude>src/main/Cpp/CppBridge/JavaClrBridge/JavaClrBridge.sln</exclude> + <exclude>src/main/Cpp/CppBridge/JavaClrBridge/JavaClrBridge.vcxproj</exclude> + <exclude>src/main/Cpp/CppBridge/JavaClrBridge/JavaClrBridge.vcxproj.filters</exclude> + <exclude>src/main/CSharp/CSharp/ClrHandler/ClrHandler.csproj</exclude> + <!--End of Visual Studio build files--> + </excludes> + </configuration> + </plugin> + </plugins> + </build> + <profiles> + <profile> + <id>Bridge</id> + <build> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>exec-maven-plugin</artifactId> + <configuration> + <executable>msbuild.exe</executable> + </configuration> + <executions> + <execution> + <id>clean</id> + <phase>clean</phase> + <configuration> + <arguments> + <argument> + ${project.basedir}/src/main/Cpp/CppBridge/JavaClrBridge/JavaClrBridge.sln + </argument> + <argument>/p:Configuration="Release"</argument> + <argument>/p:Platform="x64"</argument> + <argument>/t:Clean</argument> + </arguments> + </configuration> + <goals> + <goal>exec</goal> + </goals> + </execution> + <execution> + <id>build</id> + <phase>compile</phase> + <configuration> + <arguments> + <argument> + ${project.basedir}/src/main/Cpp/CppBridge/JavaClrBridge/JavaClrBridge.sln + </argument> + <argument>/p:Configuration="Release"</argument> + <argument>/p:Platform="x64"</argument> + </arguments> + </configuration> + <goals> + <goal>exec</goal> + </goals> + </execution> + </executions> + </plugin> + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <executions> + <execution> + <id>copy-external-dlls</id> + <phase>process-resources</phase> + <goals> + <goal>copy-resources</goal> + </goals> + <configuration> + <overwrite>true</overwrite> + <outputDirectory>${basedir}/target/classes</outputDirectory> + <resources> + <resource> + <directory>src/main/CSharp/CSharp/ClrHandler/externals</directory> + </resource> + </resources> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> +</project> http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/ClrHandler.csproj ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/ClrHandler.csproj b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/ClrHandler.csproj new file mode 100644 index 0000000..c3207c5 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/ClrHandler.csproj @@ -0,0 +1,66 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{443A7B61-5C91-4F67-9FCD-81BC6FABFDBD}</ProjectGuid> + <OutputType>Library</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>ClrHandler</RootNamespace> + <AssemblyName>ClrHandler</AssemblyName> + <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>..\..\..\..\..\target\classes\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>..\..\..\..\..\target\classes\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup> + <SignAssembly>false</SignAssembly> + </PropertyGroup> + <PropertyGroup> + <AssemblyOriginatorKeyFile> + </AssemblyOriginatorKeyFile> + </PropertyGroup> + <ItemGroup> + <Reference Include="Org.Apache.Reef.Driver"> + <HintPath>externals\Org.Apache.Reef.Driver</HintPath> + <Private>true</Private> + </Reference> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Runtime.Serialization" /> + <Reference Include="System.Xml.Linq" /> + <Reference Include="System.Data.DataSetExtensions" /> + <Reference Include="Microsoft.CSharp" /> + <Reference Include="System.Data" /> + <Reference Include="System.Xml" /> + </ItemGroup> + <ItemGroup> + <Compile Include="interface\ILogger.cs" /> + <Compile Include="interface\IInteropReturnInfo.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project> \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/Properties/AssemblyInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/Properties/AssemblyInfo.cs b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..5812e03 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/Properties/AssemblyInfo.cs @@ -0,0 +1,49 @@ +/** + * 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. + */ +using System.Reflection; +using System.Runtime.InteropServices; + +// 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: AssemblyTitle("ClrHandler")] +[assembly: AssemblyDescription("The interface dll between CPP and CLR code")] +[assembly: AssemblyProduct("ClrHandler")] +[assembly: AssemblyCopyright("Copyright © 2014")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("3efe4d3c-087b-4076-b331-8f3e36c10016")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("1.0.0.0")] +[assembly: AssemblyFileVersion("1.0.0.0")] http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/Org.Apache.Reef.Driver.dll ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/Org.Apache.Reef.Driver.dll b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/Org.Apache.Reef.Driver.dll new file mode 100644 index 0000000..66da519 Binary files /dev/null and b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/Org.Apache.Reef.Driver.dll differ http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/msvcr110.dll ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/msvcr110.dll b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/msvcr110.dll new file mode 100644 index 0000000..dd484a5 Binary files /dev/null and b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/externals/msvcr110.dll differ http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/IInteropReturnInfo.cs ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/IInteropReturnInfo.cs b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/IInteropReturnInfo.cs new file mode 100644 index 0000000..b3b930a --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/IInteropReturnInfo.cs @@ -0,0 +1,30 @@ +/** + * 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. + */ +using System; + +namespace Microsoft.Reef.Interop +{ + public interface IInteropReturnInfo + { + void AddExceptionString(String exceptionString); + Boolean HasExceptions(); + void SetReturnCode(int rc); + int GetReturnCode(); + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/ILogger.cs ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/ILogger.cs b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/ILogger.cs new file mode 100644 index 0000000..4a7f9b2 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/CSharp/CSharp/ClrHandler/interface/ILogger.cs @@ -0,0 +1,37 @@ +/** + * 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. + */ +using System; + +namespace Microsoft.Reef.Interop +{ + public enum TraceLevel : int + { + NoTrace = Int32.MaxValue, + + Error = 1000, + Warning = 900, + Info = 800, + Verbose = 300, + } + + public interface ILogger + { + void Log(TraceLevel traceLevel, String message); + } +} http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ActiveContextClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ActiveContextClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ActiveContextClr2Java.cpp new file mode 100644 index 0000000..c381f50 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ActiveContextClr2Java.cpp @@ -0,0 +1,108 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AllocatedEvaluatorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AllocatedEvaluatorClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AllocatedEvaluatorClr2Java.cpp new file mode 100644 index 0000000..6f158bc --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AllocatedEvaluatorClr2Java.cpp @@ -0,0 +1,166 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyInfo.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyInfo.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyInfo.cpp new file mode 100644 index 0000000..f6c3178 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyInfo.cpp @@ -0,0 +1,50 @@ +/** + * 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. + */ +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("JavaClrBridge")]; +[assembly:AssemblyProductAttribute("JavaClrBridge")]; +[assembly:AssemblyCopyrightAttribute("Copyright (c) 2014")]; +// +// 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)]; + +[assembly:SecurityPermission(SecurityAction::RequestMinimum, UnmanagedCode = true)]; http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyUtil.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyUtil.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/AssemblyUtil.cpp new file mode 100644 index 0000000..ce9239c --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.cpp new file mode 100644 index 0000000..b7c3a2e --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.h ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.h b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/BinaryUtil.h new file mode 100644 index 0000000..dc946a6 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ClosedContextClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ClosedContextClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ClosedContextClr2Java.cpp new file mode 100644 index 0000000..a141f45 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ClosedContextClr2Java.cpp @@ -0,0 +1,88 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.cpp new file mode 100644 index 0000000..ebd1aa4 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.cpp @@ -0,0 +1,44 @@ +/** + * 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 Microsoft +{ + namespace Reef + { + namespace Interop + { + Clr2JavaImpl::Clr2JavaImpl (JNIEnv* env, jobject jobjectEManager, jobject jobjectDriverManager) + { + _env = env; + _jobjectEManager = jobjectEManager; + _jclassEManager = env->GetObjectClass (_jobjectEManager); + _jmidSubmit = env->GetMethodID(_jclassEManager, "submit", "([B)V"); + _jobjectDriverManager = jobjectDriverManager; + _jclassDriverManager = env->GetObjectClass (_jobjectDriverManager); + + } + + void Clr2JavaImpl::AllocatedEvaluatorSubmitContextAndTask(String^ contextConfigStr, String^ taskConfigStr) + { + Console::WriteLine("AllocatedEvaluatorSubmitContextAndTask not implemented for Clr2JavaImpl"); + } + } + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h new file mode 100644 index 0000000..41d6980 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/Clr2JavaImpl.h @@ -0,0 +1,222 @@ +/** + * 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 "clrhandler.dll" +#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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CommonUtilities.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CommonUtilities.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CommonUtilities.cpp new file mode 100644 index 0000000..c668dab --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CommonUtilities.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 "Clr2JavaImpl.h" + +namespace Org { + namespace Apache { + namespace Reef { + namespace Driver { + namespace Bridge { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedEvaluatorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedEvaluatorClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedEvaluatorClr2Java.cpp new file mode 100644 index 0000000..1bd9dbe --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedEvaluatorClr2Java.cpp @@ -0,0 +1,60 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedTaskClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedTaskClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedTaskClr2Java.cpp new file mode 100644 index 0000000..ef7d9c7 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/CompletedTaskClr2Java.cpp @@ -0,0 +1,71 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ContextMessageClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ContextMessageClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ContextMessageClr2Java.cpp new file mode 100644 index 0000000..eda01f5 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/ContextMessageClr2Java.cpp @@ -0,0 +1,78 @@ +/** + * 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 { + 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/22f651f8/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/EvaluatorRequestorClr2Java.cpp ---------------------------------------------------------------------- diff --git a/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/EvaluatorRequestorClr2Java.cpp b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/EvaluatorRequestorClr2Java.cpp new file mode 100644 index 0000000..610f2a4 --- /dev/null +++ b/lang/cpp/reef-bridge-clr/src/main/Cpp/CppBridge/JavaClrBridge/EvaluatorRequestorClr2Java.cpp @@ -0,0 +1,71 @@ +/** + * 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 { + 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
