⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atmi.cpp

📁 JAVA 通过JNI 调用 TUXEDO服务的代码
💻 CPP
字号:
// atmi.cpp : Defines the entry point for the DLL application.
//

#include "stdafx.h"


void jnu_print_bytes(char *p,int len)
{
	for(;len>0;--len){
		printf("%2X",(unsigned unsigned char)*p);
		p++;
	}
	cout << endl;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpbegin
  (JNIEnv *env, jclass caller, jint j_timeout, jint j_flags)
{
	return tpbegin(j_timeout,j_flags);
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpcancel
  (JNIEnv *env, jclass caller, jint j_cd)
{
	return tpcancel(j_cd);
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tptypes
  (JNIEnv *env, jclass caller, jobject j_buf, jobject j_ret_type, jobject j_ret_subtype)
{
	//long tptypes(char *ptr, char *type, char *subtype)
	if(j_buf==NULL)
		cout << "buffer is NULL" << endl;
	cout << "1" << endl;
	JNIByteBuffer send(env,j_buf);
	cout << "2" << endl;
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	cout << "3" << endl;
	
	cout << "tptypes" << endl;
	if(!p_snd)
		cout << "p_snd error" << endl;
	jnu_print_bytes((char *)p_snd,4);

	char p_type[32];
	char p_subtype[32];
	jint result;

	memset(p_type,0,32);
	memset(p_subtype,0,32);
	cout << "4" << endl;
	result=tptypes((char *)p_snd,&p_type[0],&p_subtype[0]);

	cout << "type=" << (char *)p_type << endl;
	cout << "subtype=" << (char *)p_subtype << endl;

	if(j_ret_type)
	{
		JNIClassField ret_type(env,j_ret_type);
		ret_type.setStringFieldValue("value",(const char *)p_type);
	}
	if(j_ret_subtype)
	{
		JNIClassField ret_subtype(env,j_ret_subtype);
		ret_subtype.setStringFieldValue("value",(const char *)p_subtype);
	}
	return result;
};

JNIEXPORT jobject JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tprealloc
  (JNIEnv *env, jclass caller, jobject j_buf, jint j_size)
{
	JNIByteBuffer buf(env,j_buf);
	FBFR32 *p=(FBFR32 *)tprealloc( (char *)buf.getBytes(),j_size);
	buf.setBytes( (const jbyte *)p, sizeof(FBFR32));
	return (jobject)buf;
};

JNIEXPORT void JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpfree
  (JNIEnv *env, jclass caller, jobject j_buf)
{
	JNIByteBuffer buf(env,j_buf);
	FBFR32 *p=(FBFR32 *)buf.getBytes();
	tpfree( (char *)p );
};

JNIEXPORT jobject JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpalloc
  (JNIEnv *env, jclass caller , jstring js_type, jstring js_subtype, jint j_size)
{
	JNIString s_type(env,js_type);
	JNIString s_subtype(env,js_subtype);

	FBFR32 *p=(FBFR32 *)tpalloc( (char *)s_type,(char *)s_subtype,j_size);
	cout << "tpalloc" << endl;
	jnu_print_bytes((char *)p,4);

	JNIByteBuffer buf(env,NULL);
	buf.setBytes( (const jbyte *)p, sizeof(FBFR32));
	return (jobject)buf;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpcall
  (JNIEnv *env, jclass caller, jstring svc, jobject idata, jint ilen, jobject odata, jobject olen, jint flags)
{
	//int tpcall(char *svc, char *idata, long ilen, char **odata, long *olen, long flags)
	//服务名
	JNIString jnistr (env, svc);

	JNIByteBuffer send(env,idata);
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	FBFR32 *p_rcv;
	jint result;
	jint out_len;

	result = tpcall((char *)jnistr,(char *)p_snd,ilen,(char **)&p_rcv,&out_len,flags);
	
	JNIByteBuffer rcv(env,NULL);
	rcv.setBytes((const jbyte *)p_rcv,sizeof(FBFR32));

	//返回数据缓冲区指针
	JNIClassField buf_rcv(env,odata);	
	buf_rcv.setObjectFieldValue("value",(jobject)rcv,"Ljava/nio/ByteBuffer;");

	//返回长度
	JNIClassField ret_len(env,olen);
	ret_len.setIntFieldValue("value",out_len);
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpadmcall
  (JNIEnv *env, jclass caller, jobject j_inbuf, jobject j_outbuf, jint j_flags)
{
	//int tpadmcall(FBFR32 *inbuf, FBFR32 **outbuf, long flags)
	JNIByteBuffer send(env,j_inbuf);
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	FBFR32 *p_rcv;
	jint result;

	result = tpadmcall((FBFR32 *)p_snd,(FBFR32 **)&p_rcv,j_flags);
	
	JNIByteBuffer rcv(env,NULL);
	rcv.setBytes((const jbyte *)p_rcv,sizeof(FBFR32));

	//返回数据缓冲区指针
	JNIClassField buf_rcv(env,j_outbuf);	
	buf_rcv.setObjectFieldValue("value",(jobject)rcv,"Ljava/nio/ByteBuffer;");
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpacall
  (JNIEnv *env, jclass caller, jstring j_svc, jobject j_data, jint j_len, jint j_flags)
{
	JNIString js_svc (env, j_svc);

	JNIByteBuffer send(env,j_data);
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	jint result=tpacall((char *)js_svc,(char *)p_snd,j_len,j_flags);
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpforward
  (JNIEnv *env, jclass caller, jstring j_svc, jobject j_data, jint j_len, jint j_flags)
{
	JNIString js_svc (env, j_svc);

	JNIByteBuffer send(env,j_data);
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	tpforward((char *)js_svc,(char *)p_snd,j_len,j_flags);
	return 0;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpconnect
  (JNIEnv *env, jclass caller, jstring j_svc, jobject j_data, jint j_len, jint j_flags)
{
	JNIString js_svc (env, j_svc);

	JNIByteBuffer send(env,j_data);
	FBFR32 *p_snd= (FBFR32 *)send.getBytes();
	jint result=tpconnect((char *)js_svc,(char *)p_snd,j_len,j_flags);
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpinit
  (JNIEnv *env, jclass caller, jobject j_tpinit)
{
	int result = -1;

	if(j_tpinit==NULL)
		result = tpinit( NULL );
	else{
		char buf[2048];
		TPINIT tp;
		JNIClassField cls(env,j_tpinit);
		
		cls.copyString2Buffer("cltname",tp.cltname,MAXTIDENT);
		cls.copyString2Buffer("usrname",tp.usrname,MAXTIDENT);
		cls.copyString2Buffer("passwd",tp.passwd,MAXTIDENT);
		cls.copyString2Buffer("grpname",tp.grpname,MAXTIDENT);
		tp.flags = cls.getIntFieldValue("flags");
		tp.data = (long) &buf;
		tp.datalen = cls.copyBytes2Buffer("data",buf,2048);		
		cls.setStringFieldValue("usrname","hello");

		result = tpinit( &tp );
	}
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpterm
  (JNIEnv *env, jclass caller)
{
	return tpterm();
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpabort
  (JNIEnv *env, jclass caller, jint j_flags)
{
	return tpabort(j_flags);
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tperrno
  (JNIEnv *env, jclass caller)
{
	return tperrno;
};

JNIEXPORT jstring JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tpstrerror
  (JNIEnv *env, jclass caller, jint j_errno)
{
	char *p=tpstrerror(j_errno);

	string str;
	str.assign((const char *)p);
	JNIString j_str(env,str);
	return (jstring)j_str;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tperrordetail
  (JNIEnv *env, jclass caller, jint j_flags)
{
	jint result=tperrordetail(j_flags);
	return result;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tuxputenv
  (JNIEnv *env, jclass caller, jstring j_host_port)
{
	JNIString jnistr (env, j_host_port);
	return tuxputenv( (char *)jnistr.GetString().c_str() );
};

JNIEXPORT jstring JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tuxgetenv
  (JNIEnv *env, jclass caller, jstring j_name)
{
	JNIString js_env(env,j_name);
	char *p = tuxgetenv((char *)js_env);
	string str;
	str.assign((const char *)p);
	js_env=str;
	return (jstring) js_env;
};

JNIEXPORT jint JNICALL Java_com_poson_ibss_tuxedo_TuxedoInterop_tuxreadenv
  (JNIEnv *env, jclass caller, jstring j_filename, jstring j_label)
{
	JNIString js_filename(env,j_filename);
	JNIString js_label(env,j_label);
	
	return tuxreadenv((char *)js_filename,(char *)js_label);	
};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -