DAY10——NC接口开发流程

      以前总是调用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返回。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值