0

LinuxでJDK1.6を使用してJBoss5.1GAを実行していて、セッションBeanを呼び出そうとしています(このセッションBeanを含むjarはjbossサーバーにデプロイされています)。クライアントからこのセッションBeanを呼び出したいのですが、機能しませんでした。

クライアント側のJavaコード

public class CallingJbossSessionBeanFromClient {

/**
 * @param args
 * @throws Exception 
 */
public static void main(String[] args) throws Exception 
{
    Properties p = new Properties();
    p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
    p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
    p.put(Context.PROVIDER_URL, "jnp://182.158.93.41:8080");
    Context context = new InitialContext(p);
    System.out.println("Successfully Lookup and going to call SessionBean Function deployed on JBoss-5.1.0 Server");
    SlsSessiongRemote remote=(SlsSessionRemote) context.lookup("SlsSessionBean/remote");
//SlsSessionBean/remote is RemoteBinding of session Bean
    System.out.println("Called");
}
}

ここで、「SlsSessionBean / remote」は、jbossサーバーにデプロイされたセッションBeanのリモートバインディングです。@Stateless @RemoteBinding(jndiBinding = "SlsSessionBean / remote")

しかし、次のエラーが発生します

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at CallingJbossSessionBeanFromClient.main(CallingJbossSessionBeanFromClient.java:20)
     Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 4 more

上記のエラーを見た後、「CallingJbossSessionBeanFromClient」クラスのクラスパスにjbossjmx-ant.jarを追加し、次のエラーが発生しました

Exception in thread "main" java.lang.NoClassDefFoundError: org/jboss/logging/Logger
at org.jnp.interfaces.NamingContext.<clinit>(NamingContext.java:181)
at org.jnp.interfaces.NamingContextFactory.getInitialContext(NamingContextFactory.java:55)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:667)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.<init>(InitialContext.java:197)
at CallingJbossSessionBeanFromClient.main(CallingJbossSessionBeanFromClient.java:20)
    Caused by: java.lang.ClassNotFoundException: org.jboss.logging.Logger
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:303)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
... 7 more

上記のエラーを見た後、「CallingJbossSessionBeanFromClient」クラスのクラスパスにjboss-logging-spi.jarを追加し、次のエラーが発生しました

Exception in thread "main" javax.naming.CommunicationException: Could not obtain connection to any of these urls: 182.158.93.41:8080 and discovery failed with error: javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out] [Root exception is javax.naming.CommunicationException: Failed to retrieve stub from server /182.158.93.41:8080 [Root exception is java.io.EOFException]]
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1763)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:693)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:686)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at CallingJbossSessionBeanFromClient.main(CallingJbossSessionBeanFromClient.java:22)
       Caused by: javax.naming.CommunicationException: Failed to retrieve stub from server /182.158.93.41:8080 [Root exception is java.io.EOFException]
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:327)
at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1734)
... 4 more
    Caused by: java.io.EOFException
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2281)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:2750)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:780)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:280)
at org.jnp.interfaces.NamingContext.getServer(NamingContext.java:312)
... 5 more

Plzは教えてくれます、私はクライアントJavaクラスからセッションBeanを呼び出す正しい方法にいますか?私はGoogleで解決策を探すのに何時間も費やしました。しかし、私は手を握る何かを見つけることができないようです..もっと明確にするようにしてください、私はこの問題のアイデアが不足しています、それは古典的なPlzが解決策を提案しているように聞こえますが

4

2 に答える 2

0

この問題の解決策は、JMXコンソールを開き、service = Namingをクリックして、ネーミングサービスのMBeanビューを表示することです。使用されているポートがまだ1099であるかどうかを確認してください.....URLをjnp://182.158.93.41:1299に変更すると、クライアントはEJBと通信できます。

于 2012-06-21T05:00:21.703 に答える
0

JBossAS5.xで実行している場合RMIベースのJNDIの説明は次のとおりです。

RMI-ポート:デフォルト-1099/動的ポートがports-01に変更された場合ポートは1199

さて、残りのものは大丈夫です、以下のコードのお尻を変更してください

Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
p.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
p.put(Context.PROVIDER_URL, "jnp://182.158.93.41:1199");

もう一つのポイントはアクセスの場合です

SlsSessiongRemote remote =(SlsSessionRemote)context.lookup( "SlsSessionBean / remote"); if-@Stateless(name = "SlsSessionBean")

次に、リモートJNDI- [SlsSessionBean/remote]およびローカルJNDI-[SlsSessionBean/local]

if-@Stateless(name = "SlsSessionBean"、mappedName = "SlsSessionBeanGlobal")

次に、リモートJNDI-[SlsSessionBeanGlobal]およびローカルJNDI-[SlsSessionBean/ local]

于 2013-03-22T09:56:55.250 に答える