Liferay Portal的Action中应用JNI

因为Liferay Portal需要和别的基于C++的系统集成起来,所以开始琢磨着怎么在自己写的Action中加入Java Native Interface (JNI)。

1. 创建AjaxPollingAction.java。 关于如何在Liferay系统的ext环境下增加自己定制的Action可参考前面的文章。
在这个action中需要读取来自于C++系统的数据,定义了一个native的readData。再载入库AjaxPollingDll。

package com.ext.portal.action;
public class AjaxPollingAction extends Action
{
 
 private native double[] readData(String Name1, String Name2);
 
 static {
    System.loadLibrary("AjaxPollingDll");
  }
 ......
}

2. 编译AjaxPollingAction.java并生成所需要的.h文件 :com_ext_portal_action_AjaxPollingAction.h。

com_ext_portal_action_AjaxPollingAction.h
---------------------------------------------------------------

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_ext_portal_action_AjaxPolling */

#ifndef _Included_com_ext_portal_action_AjaxPolling
#define _Included_com_ext_portal_action_AjaxPolling
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     com_ext_portal_action_AjaxPolling
 * Method:    readLocationData
 * Signature: (Ljava/lang/String;)[D
 */
JNIEXPORT jdoubleArray JNICALL Java_com_ext_portal_action_AjaxPollingAction_readData
  (JNIEnv *, jobject, jstring, jstring);

#ifdef __cplusplus
}
#endif
#endif

javac -d d:/ AjaxPollingAction.java
javah -jni com.ext.portal.action.AjaxPollingAction

3. 在VC++中创建一个dll项目 :AjaxPollingDll,将上面生成的.h文件加入。具体过程可参见前面有一篇关于JNI的文章。这里我选用的是release模式,听说是必须的,由于时间关系没有去尝试debug模式是否也可行。这里需要把java jdk的include目录和下面的win32目录包含进项目。

AjaxPollingAction.cpp
--------------------------------

#include "com_ext_portal_action_AjaxPollingAction.h"
JNIEXPORT jdoubleArray JNICALL Java_com_ext_portal_action_AjaxPollingAction_readData
  (JNIEnv * env, jobject obj, jstring Name1, jstring Name2)
{
  ......
}

4. 将上面编译生成的dll文件(以及如果有引用到的其他dll文件)拷贝如windows/system32目录。 这个地方有些迷惑,好像把dll文件放到别的地方都不行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值