我使用了WebLogic Server 10.3.5.0,並且在其上使用EJB 2.x時沒有遇到任何問題,但我想部署EJB3並且它不起作用。我是java新手,但是我閱讀了很多信息,但沒有找到答案。我嘗試什麼: 1.創建我的簡單的計算器應用程序Weblogic不支持EJB3?
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不需要home接口。
- 在EJB3中,我不必在描述符中指定任何ejb信息。註釋必須提供服務器的信息。
我說得對不對?這有什麼問題?
我也嘗試使用appc工具,但它也錯過了家庭界面。
Thx提前!
我清理了我的ejb-jar.xml
和weblogic-ejb-jar.xml
中的所有EJB條目,並找到它的工作。問題是我無法從運行在不同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)
什麼可以是問題嗎?
您是否嘗試過'CalculatorBean'工具'計算器' –
Thx Nayan,它是解決方案的一部分。 – Mike82
@ Mike82:當你說你從ejb-jar.xml和weblogic-ejb-jar.xml中「清理了所有EJB條目」時,你究竟是什麼意思?你刪除了bean聲明嗎?請詳細說明 - 我遇到類似的問題。 – Stephan