以前总是调用NC接口,但是不知道NC接口怎么写,今天就大概了解到了基本的开发流程。
三个文件:
1、接口类: 接口的定义,java文件。
2、接口实现类: 接口的实现类,java文件。
3、upm文件:对类的描述。
以ic模块为例:
接口类:
写在对应模块的public下面
package nc.impl.ic.app.pub;
/**
* 车间收料app
*
* @author cy
*
*/
public interface IWorkShopApp {
/**
* 返回姓名
*
*/
public String getUserOrg(String userId) throws Exception;
}
接口实现类:
写在对应模块的private下面
package nc.impl.ic.app;
import nc.bs.dao.BaseDAO;
import nc.impl.ic.app.pub.IWorkShopApp;
import nc.jdbc.framework.processor.JSONProcessor;
import com.sun.xml.messaging.saaj.util.ByteOutputStream;
/**
* 车间收料app
*
* @author cy
*
*/
public class WorkShopApp implements IWorkShopApp{
private BaseDAO baseDAO;
@Override
public String getUserOrg(String userId) throws Exception {
// TODO 自动生成的方法存根
String sql="select user_name base_doc_type from sm_user where cuserid = '1002A21000000003F6O3'";
JSONProcessor jsonProcessor = new JSONProcessor();
ByteOutputStream byteOutputStream = new ByteOutputStream();
jsonProcessor.setOutputStream(byteOutputStream);
getBaseDAO().executeQuery(sql, jsonProcessor);
return byteOutputStream.toString();
}
/**
* @return baseDAO
*/
public BaseDAO getBaseDAO() {
if (null == baseDAO) {
baseDAO = new BaseDAO();
}
return baseDAO;
}
}
upm文件:
放在nc的对应模块的对应位置下面
<?xml version="1.0" encoding='gb2312'?>
<module name="ic">
<public>
<component priority="0" singleton="true" remote="true" tx="CMT" supportAlias="true" accessProtected="false">
<interface>nc.impl.ic.app.pub.IWorkShopApp</interface>
<implementation>nc.impl.ic.app.WorkShopApp</implementation>
</component>
</public>
</module>
然后,部署EJB,然后重启服务。
--------------------------------------------------------------------------------------------------------------------
测试:
测试自己的接口是否成功发布
测试类:
package nc.mobile;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Method;
import java.util.Map;
import java.util.Properties;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.bs.framework.comn.NetStreamContext;
public class TestContLoadWorkForApp {
public static void main(String[] args) {
try {
String url = "http://127.0.0.1:**";
String usercode = **;
String pwd = **;
String userId = **;
NetStreamContext.resetAll();
Properties props = createProps(url);
InvocationInfoProxy.getInstance().setUserId(userId);
InvocationInfoProxy.getInstance().setUserCode(usercode);
InvocationInfoProxy.getInstance().setUserDataSource("**"); //数据源一定要对
Object[] objlogin = new Object[3];
objlogin[0] = usercode;
objlogin[1] = pwd;
objlogin[2] = null;
Class[] methodClasses = new Class[3];
methodClasses[0] = String.class;
methodClasses[1] = String.class;
methodClasses[2] = Map.class;
Object ncobj = nclocator(props, "nc.bs.framework.core.service.IFwLogin", "login", objlogin, methodClasses);
byte[] token = (byte[]) ncobj;
NetStreamContext.setToken(token);
Object[] objlogin1 = new Object[1];
objlogin1[0] = userId;
Class[] methodClasses1 = new Class[1];
methodClasses1[0] = String.class;
Object ncobj1 = nclocator(props, "nc.impl.ic.app.pub.IWorkShopApp", "getUserOrg", objlogin1, methodClasses1);
System.out.println(ncobj1);
} catch (Exception e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
}
}
/**
*
* @param props
* @param itfname
* @param methodName
* @param objparams
* @param methodClasses
* @return
*/
public static Object nclocator(Properties props, String itfname, String methodName, Object[] objparams, Class[] methodClasses) {
Object itfObj = NCLocator.getInstance(props).lookup(itfname); // 接口类必须存在
// 调用类反射机制
Method _method = null;
Object ncObj = null;
if (objparams == null || objparams.length == 0) { // 不存在参数
try {
_method = itfObj.getClass().getMethod(methodName);
ncObj = _method.invoke(itfObj);
} catch (Exception e) {
// MPLogger.error(e);
}
} else { // 存在参数
try {
_method = itfObj.getClass().getMethod(methodName, methodClasses);
ncObj = _method.invoke(itfObj, objparams);
} catch (Exception e) {
// MPLogger.error(e);
}
}
return ncObj;
}
public static Properties createProps(String url) {
Properties props = new Properties();
props.setProperty("SERVICEDISPATCH_URL", url + "/ServiceDispatcherServlet");
return props;
}
}
--------------------------------------------------------------------------------------------------------------------------
注意:
1、本地开发,测试类要在NC开发工具里面跑。
2、UPM文件需要放在对应模块下面,然后部署。
3、NC数据源要正确IFWLogin才可以有token返回。