Weblogic不支持EJB3吗?

时间:2012-12-26 16:10:24

标签: client weblogic ejb-3.0

我使用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控制台安装它。当我尝试“激活更改”时,它失败并显示服务器缺少主界面的消息。

  1. 据我所知,EJB3不需要家庭界面。
  2. 在EJB3中,我不必将任何ejb信息指定到我的描述符中。注释必须为服务器提供信息。
  3. 我是对的吗?什么可能是问题?

    我也尝试使用appc工具,但它也错过了家庭界面。

    提前谢谢!

    我清理了ejb-jar.xmlweblogic-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();
                }
    
        }
        }
    }
    

    A在我的类路径上有wlclient.jar;javax.ejb.jar;calculator.jarcalculator.jar是我部署到服务器的那个(它包含Calculator.classCalculatorBean.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)
    

    可能是什么问题?

1 个答案:

答案 0 :(得分:1)

Weblogic 10.3.5确实支持EJB3。

您是否尝试在SimpleCalculator的“测试”窗口中调用Console bean?这样您就可以验证它是否正常工作。

W.r.t。部署,只需将.ear文件放入DOMAIN_HOMES/applications/my_domain/文件夹,它就会自动部署,您不必每次都进行控制台部署。

在控制台中测试SimpleCalculator bean后,您可以尝试查找,这次是否有效?