Skip to content

Instantly share code, notes, and snippets.

@nautical
Created March 29, 2014 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nautical/9859418 to your computer and use it in GitHub Desktop.
Save nautical/9859418 to your computer and use it in GitHub Desktop.
JNI_c_solr
#include <jni.h>
#include <stdio.h>
#include <stdlib.h>
#define ln printf("%d \n",__LINE__);fflush(stdout);
JNIEnv* create_vm(JavaVM **jvm)
{
JNIEnv* env;
JavaVMInitArgs args;
JavaVMOption options;
args.version = JNI_VERSION_1_6;
args.nOptions = 1;
options.optionString = "-Djava.class.path=/Users/TheRoot/[......].jar:/Users/TheRoot/Downloads/solr-4.7.0/dist/solrj-lib/noggit-0.5.jar";
args.options = &options;
args.ignoreUnrecognized = 0;
int rv;
rv = JNI_CreateJavaVM(jvm, (void**)&env, &args);
if (rv < 0 || !env)
printf("Unable to Launch JVM %d\n",rv);
else
printf("Launched JVM! :)\n");
return env;
}
void invoke_class(JNIEnv* env)
{
jclass EmbeddedSolrExample_Class;
jmethodID main_method;
jmethodID query_method;
jmethodID close_method;
char* str = "*:*";
jstring query = (*env)->NewStringUTF( env, str );
void *data;
EmbeddedSolrExample_Class = (*env)->FindClass(env, "EmbeddedSolrExample");
main_method = (*env)->GetStaticMethodID(env, EmbeddedSolrExample_Class, "main", "([Ljava/lang/String;)V");
query_method = (*env)->GetStaticMethodID(env, EmbeddedSolrExample_Class, "query", "(Ljava/lang/String;)Ljava/lang/String;" );
close_method = (*env)->GetStaticMethodID(env, EmbeddedSolrExample_Class, "close", "()V" );
(*env)->CallStaticVoidMethod(env, EmbeddedSolrExample_Class, main_method, NULL); // Initialize the embedded solr
(*env)->CallStaticCharMethod(env, EmbeddedSolrExample_Class, query_method, query); // Query it
(*env)->CallStaticVoidMethod(env, EmbeddedSolrExample_Class, close_method, NULL); // Close it
}
int main(int argc, char **argv)
{
JavaVM *jvm;
JNIEnv *env;
env = create_vm(&jvm);
if(env == NULL)
return 1;
invoke_class(env);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment