WebLogic Server 10.3.5.0 を使用しており、EJB 2.x を使用しても問題はありませんでしたが、EJB3 をデプロイしたいのですが、動作しません。私は Java ee を初めて使用しますが、多くの情報を読みましたが、答えが見つかりませんでした。1. シンプルな電卓アプリケーションを作成する
package test;
import javax.ejb.Remote;
import java.lang.annotation.*;
@Remote
public interface Calculator {
public int add(int x, int y);
}
package test;
import javax.ejb.Stateless;
import javax.ejb.Remote;
@Stateless(name="CalculatorBean", mappedName="EJBCalculatorBean")
@Remote(Calculator.class)
public class CalculatorBean {
public int add(int x, int y){
return x + y;
}
}
ここに私の ejb-jar.xml があります:
<?xml version="1.0"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/j2ee/ejb-jar_3_0.xsd"
version="3.0" xmlns="http://java.sun.com/xml/ns/javaee">
<enterprise-beans>
<session>
<ejb-name>Calculator</ejb-name>
<remote>test.Calculator</remote>
<ejb-class>test.CalculatorBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>Calculator</ejb-name>
<method-name>*</method-name>
</method>
<trans-attribute>NotSupported</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
そして私のweblogic-ejb-jar.xml
:
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC
'-//BEA Systems, Inc.//DTD WebLogic 6.0.0 EJB//EN'
'http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>Calculator</ejb-name>
<jndi-name>EJBCalculatorBean</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
また、非常に単純な application.xml もあります。展開された EAR フォルダーにパックし、weblogic コンソールからインストールしました。「変更をアクティブ化」しようとすると、サーバーにホーム インターフェイスが見つからないというメッセージが表示されて失敗しました。
- 私の知る限り、EJB3 はホーム インターフェイスを必要としません。
- EJB3 では、ejb 情報を記述子に指定する必要はありません。注釈は、サーバーの情報を提供する必要があります。
私は正しいですか?そして、何が問題になる可能性がありますか?
また、appc ツールを使用しようとしましたが、ホーム インターフェイスも見つかりませんでした。
事前にthx!
すべての EJB エントリをクリーンアップしejb-jar.xml
、weblogic-ejb-jar.xml
最終的には機能しました。問題は、別の JVM で実行されているクライアントから自分の Bean にアクセスできないことです。これが私のクライアントコードです:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import test.Calculator;
public class Test {
;
/**
* @param args
*/
public static void main(String[] args) {
{
try
{
Hashtable<String, String> env = new Hashtable<String, String>();
env.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
env.put(Context.SECURITY_PRINCIPAL,"myuser");
env.put(Context.SECURITY_CREDENTIALS, "mypassword");
env.put(Context.PROVIDER_URL,"t3://myweblogic:7001");
InitialContext ctx = new InitialContext(env);
System.out.println("Initial Context created");
Calculator calculator = (Calculator)ctx.lookup("EJBCalculatorBean#test.Calculator");
System.out.println("lookup successful");
System.out.println("Calling EJB method . . .");
System.out.println(calculator.add(3, 6));
System.out.println("Output will be in Managed server console");
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
}
wlclient.jar;javax.ejb.jar;calculator.jar
クラスパスにがあります。calculator.jar
サーバーにデプロイしたものです( と が含まれていますCalculator.class
)CalculatorBean.class
このクライアントは、weblogic が使用する同じ JVM で実行すると正常に動作しますが、別の JVM では次のエラーが発生します。
Caused by: java.lang.ClassNotFoundException
... 24 more
javax.naming.NamingException: Unhandled exception in lookup [Root exception is org.omg.CORBA.MARSHAL: vmcid: SUN minor code: 257 completed: Maybe]
at weblogic.corba.j2ee.naming.Utils.wrapNamingException(Utils.java:83)
at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:291)
at weblogic.corba.j2ee.naming.ContextImpl.lookup(ContextImpl.java:227)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at Test.main(Test.java:37)
何が問題になる可能性がありますか?