有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

weblogic中ejb 3远程接口的java RMI调用

当我试图调用远程接口(即部署在其他服务器(prewlsapp2))时,我对这段代码有一些问题。 这是我的客户:

Hashtable<String, String> pro = new Hashtable<String, String>();  
              //Properties pro = new Properties();  
              pro.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");  
               pro.put(Context.PROVIDER_URL, "t3://prewlsapp2:7661");  
               //pro.put(Context.SECURITY_PRINCIPAL, "hemanth");  
              //pro.put(Context.SECURITY_CREDENTIALS, "hemnathn1"); 


               Context ctx = new InitialContext(pro);  
               MessagesEntityFacadeRemote t = (MessagesEntityFacadeRemote)ctx.lookup("MessagesEntityFacade#Message.MessagesEntityFacadeRemote");
               GOSIDebug.debugMessages("MessagesEntityFacadeRemote  "+t);
              List tt = t.findByTargetID("2004");

               System.out.print("xyz");

系统。出来打印(“xyz”);在调用t.findByTargetID(“2004”)后从未打印过,也没有例外打印

我的远程接口是:

    package Message;

import java.util.List;
import javax.ejb.Remote;

@Remote
public interface MessagesEntityFacadeRemote {

    void create(MessagesEntity messagesEntity); 

    void edit(MessagesEntity messagesEntity);

    void remove(MessagesEntity messagesEntity);

    MessagesEntity find(MessagesEntity id);

    List<MessagesEntity> findAll();

     List<MessagesEntity> findByTargetID(String target) ;

    List<MessagesEntity> findRange(int[] range);

     MessagesEntity findByMessageID(String target);

      List<MessagesEntity> findNextByTargetID(String target,int f,int l) ;

    int count();

}

还有我的建议:

package Message;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

@Stateless(mappedName="MessagesEntityFacade")
public class MessagesEntityFacade implements MessagesEntityFacadeLocal, MessagesEntityFacadeRemote, Serializable {
    @PersistenceContext(unitName = "Messaging_SystemPU")
    private EntityManager em;


    protected EntityManager getEntityManager() { 
        return em;
    }



    @Override
    public MessagesEntity find(MessagesEntity id) {
        throw new UnsupportedOperationException("Not supported yet.");
    }


    @Override
    public List<MessagesEntity> findAll() {

    return em.createQuery("select object(o) from MessagesEntity as o").getResultList();

    }



    @Override
        public List<MessagesEntity> findByTargetID(String target) throws Exception  {


        System.out.println("target are"+target);
        Query result=null;
        try{
       ArrayList <MessagesEntity>listOFMessages=new ArrayList<MessagesEntity>();
       List results = new ArrayList();
       MessagesEntity[] users;
       System.out.print("hiiiiiiiiiii");
            result = em.createNativeQuery("select * from T_MESSAGES  p where p.target = ?1 order by p.creationtimestamp desc",Message.MessagesEntity.class);
        System.out.print("out hiiiiiiii");
        result.setParameter(1, target);


        // results = result.getResultList();

      //  System.out.print("beforrrrrr");
            // users = (MessagesEntity[])result.getResultList().toArray(new MessagesEntity[0]);
       //  System.out.println("usersusers"+users);



        }
        catch(Exception e){
            System.out.print("xxxxxxxxxxxxxxxs"); 
            e.printStackTrace();
        }

         return result.getResultList();

    //SELECT c from PolicyShiftEntityEJB c where c.policyId = :policyId
      /*Query query=em.createQuery("SELECT object(c) FROM MessagesEntity as c WHERE  c.target = :target order by c.messageid desc");
      query.setParameter("target", target);
      List res= query.getResultList();

      System.out.print("ressssssss"+res);
        listOFMessages.addAll(res);

        return listOFMessages;*/
     // return query.getResultList();

    }

    @Override
    public MessagesEntity findByMessageID(String messageId) {

        Query result = em.createNativeQuery("select * from T_MESSAGES  p where p.messageid = ?1 ",Message.MessagesEntity.class);
        result.setParameter(1, messageId);
        return (MessagesEntity) result.getSingleResult();

    }

    @Override
    public List<MessagesEntity> findNextByTargetID(String target,int f,int l) {

        Query result = em.createNativeQuery("select * from T_MESSAGES  p where p.target = ?1 order by p.creationtimestamp desc",Message.MessagesEntity.class);
         result.setParameter(1, target);
         result.setFirstResult((f - 1) * l);
         result.setMaxResults(l);
         return result.getResultList();
    }

    @Override
    public void create(MessagesEntity messagesEntity) {
       em.persist(messagesEntity);
    }

    @Override
    public void edit(MessagesEntity messagesEntity) {
        em.merge(  messagesEntity);
    }

    @Override
    public void remove(MessagesEntity messagesEntity) {
     em.remove(em.merge(messagesEntity));
    }

    @Override
    public List<MessagesEntity> findRange(int[] range) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public int count() {
        throw new UnsupportedOperationException("Not supported yet.");
    }


}

提示:当我试图在我的客户机(count())中调用此函数时,异常是:

 java.lang.reflect.UndeclaredThrowableException
    at $Proxy334.count(Unknown Source)
    at gosi.core.security.viewcontrollers.LoginServlet.doPost(LoginServlet.java:1062)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.RequestDispatcherImpl.invokeServlet(RequestDispatcherImpl.java:502)
    at weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:251)
    at gosi.core.security.viewcontrollers.SIMISLoginProxyServlet.doPost(SIMISLoginProxyServlet.java:124)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
    at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
    at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:292)
    at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175)
    at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3495)
    at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
    at weblogic.security.service.SecurityManager.runAs(Unknown Source)
    at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2180)
    at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2086)
    at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1406)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
Caused by: java.lang.NoSuchMethodException: Message.MessagesEntityFacade_lpk28i_MessagesEntityFacadeRemoteImpl_1030_WLStub.count()
    at java.lang.Class.getMethod(Class.java:1605)
    at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.getTargetMethod(RemoteBusinessIntfProxy.java:162)
    at weblogic.ejb.container.internal.RemoteBusinessIntfProxy.invoke(RemoteBusinessIntfProxy.java:53)
    ... 25 more

但是当我调用这个函数findByTargetID(String target)时,没有打印任何内容!我不知道是否有例外,所以我客户的这一行从未打印过^{,非常感谢:)


共 (1) 个答案

  1. # 1 楼答案

    我不确定您使用的是哪个版本的WebLogic,但在10.3中,我们曾经在通过远程调用执行EJB时遇到过类似的问题,而导致问题的原因是远程接口中存在泛型。尝试从接口中删除泛型类型参数,看看这是否适用

    List<MessagesEntity> findByTargetID(String target) ;
    

    变成

    List findByTargetID(String target) ;