1

我在作为后端支持工作的系统中遇到问题。我需要编写一个测试来调用处理与我们数据库通信的类之一,以便我可以注销它实际返回的内容。

系统设置

我们的系统是用 Java 开发的,并部署在 weblogic 服务器上。它由许多部分组成,我不会在这里详细介绍。但有趣的是,我们有一个类充当数据库的适配器。我们称之为“CMAdapter”,它是 IBM Content Manager 特定代码的实现,用于处理与我们的数据库的交互。在这个类中,我们有一个名为 fetchAct() 的方法,它将一个带有搜索参数的对象作为参数,并返回搜索结果。在这种情况下,它返回一个动作。我们拥有的代码在 weblogic 服务器上运行,该服务器安装了 IBM Information Integrator for Content,以便它可以与安装并运行在不同服务器上的 IBM Content Manager 进行通信。该系统使用 .ejb 和一些 .jar 文件部署在服务器上。

问题

我收到了一个案例,指出对于某些行为,用户没有收到预期的完整行为,而只是部分行为。系统本身没有显示错误,并且文档存在于数据库中。所以我想做的是编写一个简单的测试程序,用一组预定的搜索条件调用这个“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);
        }
    }
4

1 回答 1

0

感谢大家阅读我的问题。看来我已经找到了自己问题的答案。它藏在我的一个同事那里。我的问题的答案是,为了能够访问服务器部署的代码,我需要从我的网络服务器获取 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;
   }

我希望这可以帮助有类似问题的人继续前进。就像我说的那样,我仍然需要让这段代码真正为我工作,但这是我最初关于如何从外部类调用已部署方法的问题的答案。

于 2013-09-05T11:00:52.317 回答