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
你好,我是一个新手,不知道如何将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
1。查看ejb的JNDI 是否是TestSB
2。在jsp页面上加一个try-catch,将异常打印出来,或者,你直接看后台的错误输出,然后贴出来
你好!打印出来的错误信息如下:
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>
TestSBHome testSBHome = (TestSBHome)PortableRemoteObject.narrow(obj,package.subpackage.TestSBHome.class);
把完整的包路径写出来,
谢谢你!
在改行前面已经出错了!也就是下面一行:
Object obj = context.lookup("TestSB");
路径是:
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>
Object obj = context.lookup("TestSB");
这个应该没有问题
我在console里可以看到EJB项目下已经存在test。
EJB发布后看不到jndi name
到目前我还不知道错误在那,但是我用JBuilder
发布就解决了这个问题。