JBoss5 可否 上 EJB2

我把项目从jboss4.0 移到 jboss5.0GA上,就出现问题,我用的是ejb2,不止是否支持呢?
错误内容如下:
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:585)
... 54 more
Caused by: javax.ejb.EJBException: Invalid invocation, check your deployment packaging, method=public abstract com.driverstand.webshop.common.mysql.general.OmGeneralSession com.driverstand.webshop.common.mysql.general.OmGeneralSessionHome.create() throws java.rmi.RemoteException,javax.ejb.CreateException
at org.jboss.ejb.StatelessSessionContainer$ContainerInterceptor.invokeHome(StatelessSessionContainer.java:167)
at org.jboss.resource.connectionmanager.CachedConnectionInterceptor.invokeHome(CachedConnectionInterceptor.java:187)
at org.jboss.ejb.plugins.StatelessSessionInstanceInterceptor.invokeHome(StatelessSessionInstanceInterceptor.java:97)
at org.jboss.ejb.plugins.CallValidationInterceptor.invokeHome(CallValidationInterceptor.java:56)
at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInterceptor.java:125)
at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:350)
at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.java:161)
at org.jboss.ejb.plugins.SecurityInterceptor.process(SecurityInterceptor.java:230)
at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityInterceptor.java:205)
at org.jboss.ejb.plugins.security.PreSecurityInterceptor.process(PreSecurityInterceptor.java:99)
at org.jboss.ejb.plugins.security.PreSecurityInterceptor.invokeHome(PreSecurityInterceptor.java:88)
at org.jboss.ejb.plugins.LogInterceptor.invokeHome(LogInterceptor.java:132)
... 76 more
而jboss4上面,我改了以下三个地方就好了
1] Edit conf/jboss-service.xml and make CallByValue as 'true' in NamingService as below
<mbean code="org.jboss.naming.NamingService"
name="jboss:service=Naming"
xmbean-dd="resource:xmdesc/NamingService-xmbean.xml">
true
2] Edit deploy/ear-deployer.xml, and set Isloated and CallByValue as true
3]Edit deploy\jbossweb-tomcat55.sar\META-INF\jboss-service.xml , and set Java2ClassLoadingCompilance and UseJbossWebLoader attributes as false

然而jboss5好像目录变得蛮厉害,3]这个目录没有了,而deploy\jbossweb.sar\META-INF\里面也没有
jboss-service.xml
有谁可知道,望告知一二,谢谢!

望高手们不吝赐教阿,困扰我多多时了
顺便说一下,我的浏览器
[Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.0.6) Gecko/2009011913 Firefox/3.0.6]
无法在这里发表。。。。

可以运行EJB2 EJB是兼容的。

你的问题是因为classloader设置,你似乎要将WEB的classloader和ejb分开。

JBoss5正如我几年前指出一样,是一个完全重新编写可彻底分离的组件服务器,因此,很多部署方法和配置与以前完全不同了,思路也不一样。

如果说现在EJB和非EJB还有什么区别的话,就是还是部署困难和麻烦,特别要掌握复杂烦人的classloader策略,不知这个问题何时简单化。

jboss 4.0 迁移到 jboss 5.0,oops!跨度够大的呀~~

从4.0到4.2,变化就很大了:4.0里的【deploy\jbossweb-tomcat55.sar】到4.2.2就变成了【deploy\jboss-web.deployer】;4.2.2已经完全支持ejb3.0了。

从4到5,major version都改变了,变化大是可想而知的。目前我还在用jboss 4.2.2,还没有时间研究jboss5,所以爱莫能助啦 :-) 楼主仔细阅读过jboss 5的文档了吗?你要的答案我想能在那里找到。

BTW, 不大理解为什么要在全面支持Java EE 5+ / ejb3.0+ stack 的jboss application server 5 上部署陈旧的ejb2. 客户强制要求的?同情你~~哈哈 :-)

On 2009年02月10日 13:18 banq wrote:
>特别要掌握复杂烦人的classloader策略,不知这个问题何时简单化。

期待基于OSGi的application server(jboss5也是其中之一)能利用OSGi带来的classload magic解决此问题。:-)

谢谢楼上的两位
你们还不知道更大的跨度在于,我是从weblogic上把这些老系统迁移过来的,在我看来要基本成功的时候,jboss4.0和jboss4.2都给我了一次打击,我不知道到底是什么问题,感觉tomcat的jsp变异好像跟weblogic的有很大的不同,下面就是我在jboss4上面报的错

14:38:29,968 ERROR [[jsp]] サーブレット jsp のServlet.service()が例外を投げまし

org.apache.jasper.JasperException: JSPのクラスをコンパイルできません:

JSPファイル: /J0/J003/J003G01/J003G01convertmessage.inc の中の16行目でエラーが発
生しました
Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )
13: <%@ page import="java.util.*" %>
14: <%@ page import="jp.co.nec.ome.relay.*" %>
15:
16: <%!
17: /** フィールド定義 */
18: private static final String[] fieldArray = {
19: "tcode",


Stacktrace:
at org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErro
rHandler.java:92)
at org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher
.java:330)
at org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java
:415)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
at org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext
.java:566)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper
.java:316)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:3
36)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke

应该是编码/字符集的问题。jasper默认采用UTF-8来处理源代码中的所有字符(特别是英文以外的字符)。可能是代码中转义符周围的日文字符出现了乱码,导致编译器无法正确解析转义符,认为它们是无效的“escape sequence”。

你又来啦,呵呵
可能是你说的,我也尝试了一下在web.xml里加了:
<jsp-property-group>
<description>Special property group for JSP Configuration JSP example.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.jsp</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>SHIFT_JIS</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>

<description>Special property group for JSP Configuration JSP example.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>*.html</url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>SHIFT_JIS</page-encoding>
<scripting-invalid>false</scripting-invalid>
<include-prelude></include-prelude>
<include-coda></include-coda>
</jsp-property-group>

不过还是不行。。。。
不知道有没有其他的办法,可以再jboss里全局设置字符集?

或者加个Filter?

web.xml追加以下内容,还是不行。。郁闷。。!
<!-- =========================== -->
<!-- Setting for URL filter -->
<!-- =========================== -->
<filter>
<filter-name>URL filter</filter-name>
<!--filter-class>org.thf.web.SetCharacterEncodingFilter</filter-class-->
<filter-class>com.driverstand.webadmin.common.utility.UrlFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>Shift_JIS</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>URL filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

让Jboss载入web可以配置 <property name="useJBossWebLoader">true</property>,默认是false
文件是$JBoss_HOME/server/all/deployers/jbossweb.deployer/META-INF/war-deployers-jboss-beans.xml
但我感觉不是这个的问题
还有JBoss5好像缓存配置,所以有时候第一次修改错了,以后就算修改成正确的也不管用,我不知道这些东西都缓存到哪去了,我解决的办法是删掉JBoss重新再来。
[该贴被freebox于2009-02-10 16:35修改过]

to big1980 :
休息一下吧,你都开始晕了~~ :-)
你那是编译问题,出现在compile-time, 怎么能指望servlet filter来解决?根本两码事嘛~~

在上面的配置中,你已经告诉jasper采用SHIFT_JIS来处理所有*.jsp、*.html(如果真的是html,则没有必要,html不需要编译)中的字符了,而问题的关键是,当前你的这些源文件中的字符本身是以何种编码保存的(不是看里面代码头部pageEncoding/contextType中设置的值,而是保存这些文件时用的编码)?也是SHIFT_JIS吗? 如果所有环节的编码都是统一的(比如都是SHIFT_JIS),那就该没问题了;否则的话,需要使用工具来转换某些字符编码到合适的值。
[该贴被dearshor于2009-02-10 17:48修改过]