他のサーバー(prewlsapp2)に配置されているリモートインターフェイスを呼び出そうとしているときに、このコードに問題があります。 これは私のクライアントです:リモートインターフェイスを使用したRMI呼び出し(weblogicのejb 3)
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");
System.out.print( "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();
}
また、私のImpl:
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)
と呼びますが、何もないprinテッド!私のクライアントのこのラインは印刷されませんでした。
になり、私は変更を加えた、どうもありがとう、今の誤差は ':java.lang.NoSuchMethodException:によって引き起こさMessage.MessagesEntityFacade_lpk28i_MessagesEntityFacadeRemoteImpl_1030_WLStub.findByTargetID( java.lang.String) ' – aldeheme
ジェネリックでローカルインターフェイスと実装を持ち、リモートインターフェイスにジェネリックスを持たないのは覚えています。コンパイル済みのEJBクラスをWebLogicディレクトリからクリアする必要があるかもしれません(正確な場所が私を今からエスケープしますが、そのディレクトリはEJBCompilerなどと呼ばれています)。 WebLogicは、EJBが変更されたことを常に検出するとは限りませんし、再コンパイルを強制します。これで問題が解決しない場合は、その答えを受け入れてください。乾杯、 – dpmatheson
助けてくれてありがとう、ジェネリックに関する問題、weblogicのバグがあるので、あなたはリモートのインターフェイスをジェネリックにすることはできません。 – aldeheme