2016-04-09 20 views
0

私はEJBを初めて使用しています。EJBのクライアントプログラムを実行中にNameNotFoundExceptionを取得します

私はステートレスBeanの開発を学んでいます。 jarファイルを作成してWeblogicサーバーにデプロイしてから、クライアントコードを実行しました。私はすでにクラスパスをapi.jarweblogic.jarに設定しました。しかし、実行中のクライアントコードでは、次のエラーが発生しています。

C:\Users\Asad\Desktop\EJB>java EjbClient1 
Exception in thread "main" javax.naming.NameNotFoundException: Unable to resolve 'myAdder#Adder'. Resolved '' [Root exception is javax.naming.NameNotFoundException: Unable to resolve 'myAdder#Adder'. Resolved '']; remaining name 'myAdder#Adder' 
     at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1224) 
     at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:273) 
     at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:217) 
     at weblogic.jndi.internal.BasicNamingNode.lookupIgnorePartition(BasicNamingNode.java:1503) 
     at weblogic.jndi.internal.PartitionHandler.lookupSharable(PartitionHandler.java:88) 
     at weblogic.jndi.internal.ServerNamingNode.lookup(ServerNamingNode.java:584) 
     at weblogic.jndi.internal.RootNamingNode.lookup(RootNamingNode.java:81) 
     at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source) 
     at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:645) 
     at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:248) 
     at weblogic.rmi.internal.BasicServerRef$2.run(BasicServerRef.java:534) 
     at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:368) 
     at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:163) 
     at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:531) 
     at weblogic.rmi.internal.wls.WLSExecuteRequest.run(WLSExecuteRequest.java:137) 
     at weblogic.invocation.ComponentInvocationContextManager._runAs(ComponentInvocationContextManager.java:348) 
     at weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333) 
     at weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54) 
     at weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 
     at weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:617) 
     at weblogic.work.ExecuteThread.execute(ExecuteThread.java:397) 
     at weblogic.work.ExecuteThread.run(ExecuteThread.java:346) 
Caused by: javax.naming.NameNotFoundException: Unable to resolve 'myAdder#Adder'. Resolved '' 
     at weblogic.utils.StackTraceDisabled.unknownMethod() 

以下はコードです。

クライアントEjbClient1.java:

import javax.naming.*; 
import java.util.*; 
import javax.naming.Context; 
import javax.naming.InitialContext; 

public class EjbClient1 { 
    public static void main(String s[])throws Exception { 
     Properties parm=new Properties(); 
     parm.setProperty("java.naming.factory.initial","weblogic.jndi.WLInitialContextFactory"); 
     parm.setProperty("java.naming.provider.url","t3://localhost:7001"); 
     parm.setProperty("java.naming.security.principal","weblogic"); 
     parm.setProperty("java.naming.security.credentials","asad9711"); 
     // parm.setProperty("java.naming.security.credentials","weblogic12"); 

     InitialContext ctx=new InitialContext(parm); 
     Adder stub=(Adder)ctx.lookup("myAdder#Adder"); 

     int c=stub.add(10,20); 
     System.out.println(c); 

    } 
} 

BeanクラスのAdderBean.java:

import javax.annotation.PostConstruct; 
import javax.annotation.PreDestroy; 
import javax.ejb.Stateless; 

@Stateless(mappedName="myAdder") 
class AdderBean implements Adder { 
    @PostConstruct 
    public void init() 
    { 
     System.out.println("post create"); 

    } 
    @PreDestroy 
    public void destroy() 
    { 
     System.out.println("destroy"); 
    } 
    public int add(int x,int y) 
    { 
     return x+y; 
    } 
} 

リモートインタフェースAdder.java:

import javax.ejb.Remote; 

@Remote 
public interface Adder 
{ 
    int add(int x,int y); 
} 
+0

'Adder'インターフェースの完全修飾名は何ですか?つまり、インターフェースのパッケージ名は何ですか? – aribeiro

+0

3つの '.javaファイル(Adder.java、AdderBean.java、EjbClient1.java)はすべて同じフォルダにあります。 – a874

+0

あなたはチェックしてください、あなたはクラスファイルを瓶の中に入れましたか? – Unknown

答えて

1

あなたのコードは、いくつか変更した後に私のために働きます。

セッションBeanのアクセス修飾子をpublicに変更しました。

jarファイルにクラスファイルが含まれていることを確認してください。これには、InterfaceとSessionBeanが含まれている必要があります。コマンドライン

1)コンパイルプロジェクト

Project_DIR>javac -d bin -sourcepath src -cp lib\.m2\repo 
sitory\javax\javaee-api\6.0\javaee-api-6.0.jar;C:\Oracle\Middleware\wlserver_10. 
3\server\lib\weblogic.jar src\main\java\Adder.java src\main\java\AdderBean.java 
src\main\java\EjbClient1.java 

2)ビルドの瓶

Project_DIR\bin>jar cf myejbapp.jar Adder.class AdderBean 
.class EjbClient1.class 

3)WebLogicへmyejbapp.jarを展開し、実行して

Screenshot with output

EJBClient1

0

は、完全修飾名に を使用してルックアップしよう同じパッケージ内にあっても(mappedName#packageName.interfaceName)の形式で