我用的服务器是:
weblogic6.1

解决方案 »

  1.   

    Jsp也要与Ejb一起打包成.war然后发布就应该可以了。不过个人认为不要在JSP中引用EJB,根据MVC编程思想会更好点,通过Servlet进行调用,然后把处理结果用Servlet返回到JSP,由进行表现就OK啦。
      

  2.   

    to easydozer:
    你好,我是一个新手,不知道如何将Jsp和Ejb一起打包成.war然后发布,
    请你讲一件,谢谢了。
    我原来是将Ejb打包成.jar然后发布,打包代码如下:set jar1=%1%
    set jar2=%2%
    set WL_HOME=c:\bea
    set WL_LOAD=c:\bea\wlserver6.1
    set temppath=D:\WORK\EJB\release\set CLASSPATH=.
    set CLASSPATH=%CLASSPATH%;D:\WORK\EJB\release\
    set CLASSPATH=%CLASSPATH%;%WL_LOAD%\lib\ejb20.jar
    set CLASSPATH=%CLASSPATH%;%WL_LOAD%\lib\weblogic.jar
    set CLASSPATH=%CLASSPATH%;%WL_LOAD%\lib\weblogic_sp.jar
    set PATH=%WL_HOME%\jdk131\bin;%PATH%
    set PATH=%WL_LOAD%\bin;%PATH%cd %temppath%
    del %jar2%
    javac test\E\*.javajavac test\S\*.javajar cf %jar1% nothingjar uf %jar1% test\E\*.classjar uf %jar1% test\S\*.classjar uf %jar1% META-INF\*.xmljava weblogic.ejbc20 %jar1% %jar2%copy %jar2% %WL_HOME%\wlserver6.1\config\mydomain\applications\%jar2%pushd c:\bea\wlserver6.1\config\mydomain\applications\DefaultWebApp\WEB-INF\classesjar xf %WL_LOAD%\config\mydomain\applications\%jar2%popd
      

  3.   

    不需要将jsp打包,但需要你检察两个问题,
    1。查看ejb的JNDI 是否是TestSB
    2。在jsp页面上加一个try-catch,将异常打印出来,或者,你直接看后台的错误输出,然后贴出来
      

  4.   

    to wyy_9715072(小宇) 
      你好!打印出来的错误信息如下:
    javax.naming.NameNotFoundException: Unable to resolve TestSB. Resolved: '' Unresolved:'TestSB' ; remaining name '' 
    看改错误信息好像是ejb的JNDI果然不是TestSB,而且我看过  myserver->view JNDI tree 都没有找到TestSB。
    我的EJB结构是这样的,test.jpx里包含两个EJB,一个是TestEB(Entity),另一个是TestSB(Session),然后TestSB调用TestEB,而TestEB连接数据库,
    我用上面的打包代码打包后发布(带进的参数是:test1.jar和test.jar),
    然后查看config.xml文件时生成如下代码:
    <Application Deployed="true" Name="test" Path=".\config\mydomain\applications">
            <EJBComponent Name="test" Targets="myserver" URI="test.jar"/>
    </Application>
      

  5.   

    试试这样
    TestSBHome testSBHome = (TestSBHome)PortableRemoteObject.narrow(obj,package.subpackage.TestSBHome.class);
    把完整的包路径写出来,
      

  6.   

    to  gdh_zj(Aris_go) 
      谢谢你!
      在改行前面已经出错了!也就是下面一行:
    Object obj = context.lookup("TestSB");
      

  7.   

    我将发布后的相关.xml文件贴出来
    路径是:
    C:\bea\wlserver6.1\config\mydomain\applications\DefaultWebApp\WEB-INF\classes\META-INFejb-jar.xml文件如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">
    <ejb-jar>
        <enterprise-beans>
            <session>
                <display-name>TestSB</display-name>
                <ejb-name>TestSB</ejb-name>
                <home>test.S.TestSBHome</home>
                <remote>test.S.TestSB</remote>
                <ejb-class>test.S.TestSBBean</ejb-class>
                <session-type>Stateless</session-type>
                <transaction-type>Container</transaction-type>
            </session>
            <entity>
                <display-name>TestEB</display-name>
                <ejb-name>TestEB</ejb-name>
                <home>test.E.TestEBRemoteHome</home>
                <remote>test.E.TestEBRemote</remote>
                <ejb-class>test.E.TestEBBean</ejb-class>
                <persistence-type>Container</persistence-type>
                <prim-key-class>java.lang.Integer</prim-key-class>
                <reentrant>False</reentrant>
                <cmp-version>2.x</cmp-version>
                <abstract-schema-name>TestEB</abstract-schema-name>
                <cmp-field>
                    <field-name>id</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>name</field-name>
                </cmp-field>
                <cmp-field>
                    <field-name>birthdate</field-name>
                </cmp-field>
                <primkey-field>id</primkey-field>
            </entity>
        </enterprise-beans>
        <assembly-descriptor>
            <container-transaction>
                <method>
                    <ejb-name>TestEB</ejb-name>
                    <method-name>*</method-name>
                </method>
                <method>
                    <ejb-name>TestSB</ejb-name>
                    <method-name>*</method-name>
                </method>
                <trans-attribute>Required</trans-attribute>
            </container-transaction>
        </assembly-descriptor>
    </ejb-jar>weblogic-ejb-jar.xml文件如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <!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>TestSB</ejb-name>
            <jndi-name>TestSB</jndi-name>
        </weblogic-enterprise-bean>
        <weblogic-enterprise-bean>
            <ejb-name>TestEB</ejb-name>
            <entity-descriptor>
                <persistence>
                    <persistence-type>
                        <type-identifier>WebLogic_CMP_RDBMS</type-identifier>
                        <type-version>6.0</type-version>
                        <type-storage>META-INF/weblogic-cmp-rdbms-jar.xml</type-storage>
                    </persistence-type>
                    <persistence-use>
                        <type-identifier>WebLogic_CMP_RDBMS</type-identifier>
                        <type-version>6.0</type-version>
                    </persistence-use>
                </persistence>
            </entity-descriptor>
            <jndi-name>TestEBRemote</jndi-name>
        </weblogic-enterprise-bean>
    </weblogic-ejb-jar>
      

  8.   

    你的ejb还没有发布成功,去weblogic的console看看
      

  9.   

    从ejb-jar.xml看来
    Object obj = context.lookup("TestSB");
    这个应该没有问题
      

  10.   

    天啊!怎么看EJB发布是否成功。
    我在console里可以看到EJB项目下已经存在test。
      

  11.   

    各位大虾我已经另开一个主题:
    EJB发布后看不到jndi name
      

  12.   

    谢谢各位捧场,该问题应该是我的发布代码有误,
    到目前我还不知道错误在那,但是我用JBuilder
    发布就解决了这个问题。