我在系统中遇到问题,我正在作为后端支持。我需要编写一个测试,调用其中一个类与数据库进行通信,这样我就可以注销它实际返回的内容。我想在我提出问题之前需要解释一下系统的设置,所以请跟我一起讨论。 :)
我们的系统是用Java开发的,部署在weblogic服务器上。它由许多部分组成,我不会在这里详细介绍。但有趣的是,我们有一个类充当我们数据库的适配器。我们将其称为“CMAdapter”,它是IBM Content Manager特定代码的实现,用于处理与数据库的交互。在这个类中,我们有一个名为fetchAct()的methid,它将一个带有搜索参数的对象作为参数,并返回搜索结果。在这种情况下,它返回一个动作。我们的代码在weblogic服务器上运行,该服务器安装了IBM Information Integrator for Content,以便它可以与在不同服务器上安装和运行的IBM Content Manager进行通信。使用.ejb和一些.jar文件在服务器上部署系统。
我已收到一个案例,指出对于某些行为,用户并未按预期接收完整行为,而只接受其部分内容。系统本身不显示错误,文档存在于数据库中。所以我要做的是写一个简单的测试程序,用一组预定的searchcriteria调用这个“CMAdapter”,这样我就可以注销搜索的返回。
如何使用main()方法创建一个freestading类并在服务器上运行它?我需要以某种方式调用CMAdapter.fetchAct()方法,以便它像任何普通查询一样在服务器上运行?
public class TestHamtaAkt
{
public static void main(String[] args) throws BasException
{
Log LOG = Log.getLog(TestHamtaAkt.class);
// Get the CMAdapter
CMAdapter cmadapter = new CMAdapter();
// Create empty instance of our query object
SokVO sokvo = new SokVO();
// Put a value to search for in our query object
AttributVO aktAttribut = new AttributVO();
aktAttribut.setNamn(DLAKonstanter.AKT_KORT_R_KOD);
aktAttribut.setVarde("090084831574");
sokvo.aktAttributLista().add(aktAttribut);
// do the search an recieve the answer
AktVO aktvo = cmadapter.hamtaAkt(sokvo);
// log out the result
LOG.debug("main", "Akten som hämtades: " + aktvo.toString(), null);
}
}
答案 0 :(得分:0)
感谢大家阅读我的问题。看来我找到了自己问题的答案。它隐藏着我的一个同事。我的问题的答案是,为了能够访问服务器部署的代码,我需要从我的网络服务器获取JNDI上下文,然后从中查找我需要的类的jndi查找。
我仍然在建立连接方面遇到一些问题,但可能只是关闭了我的配置。我现在知道如何获得一个简单的java类来调用服务器上已部署的类。
这是我目前用于从WLS服务器获取上下文的代码:
private static InitialContext getWLSContext(String url) throws NamingException
{
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, WLS_CONTEXT_FACTORY);
//env.put(Context.PROVIDER_URL, "t3://" + host + ":" + port);
env.put(Context.PROVIDER_URL, url);
return new InitialContext(env);
}
这是我提供我需要的课程的代码。
public static EJBObject getRemote(String url, String jndiname, Class homeClass, AppserverTyp typ) throws Exception
{
Object obj = getWLSContext(url).lookup(jndiname);
EJBHome home = (EJBHome) javax.rmi.PortableRemoteObject.narrow(obj, homeClass);
Class homeBase = home.getClass();
Method m = homeBase.getMethod("create", (Class[])null);
EJBObject remote = (EJBObject) m.invoke(home, (Object[])null);
return remote;
}
我希望这可以帮助有类似问题的人继续前进。就像我说的那样,我仍然要实际让这段代码为我工作,但我的这个问题是关于如何从外部类调用已部署方法的初步问题的答案。