2011-01-10 8 views
1

は、JavaEEの-5とJBossの5.1.0GA上の私の展開では、私は私が明示的に注釈を付けているかのように、これは同じであると仮定している一般的な形式JBossの5 - 解読スタックトレース

public interface Foo { 
    void baz(); 
} 

@Stateless 
public class FooBean implements Foo { 
    void baz() { // ... 
    } 
} 

の豆を持っています@LocalとのFooインターフェース。コード内でスタックトレースを見ることから、実際にはリモートインターフェイスを使用していると思いますが、すべてのBeanをローカルにしたいと思っています。

インターフェイスを明示的にローカルとして注釈する必要がありますか、またはデフォルトがありますか?これに関する文書を見つけることは困難であることが証明されているので、関連する文書へのリンクは非常に高く評価されます。

は、私はこのようなルックスを取得しています

スタックトレース(編集不審なスタックトレースを追加しました)。疑わしい行は "$ Proxy638"です。 FooBeanには上記のように注釈が付けられており、ClientとManagerはどちらもPOJOです(例:Java EE関連の項目に完全に注釈を付けない)。この呼び出しは、Message-Driven Beanによって処理されています。私は例外が鉱山の1つであることがわかります(「私のエラーメッセージはここに来ます!」というメッセージは私が実際のスタックトレースにしたいメッセージです)。

2011-01-10 11:15:06,428 ERROR [org.jboss.resource.adapter.jms.inflow.JmsServerSession](WorkManager(2)-11) Unexpected error delivering message delegator->JBossMessage[21211678385963013]:PERSISTENT, deliveryId=5 
javax.ejb.EJBTransactionRolledbackException: My error message goes here! 
    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleInCallerTx(Ejb3TxPolicy.java:115) 
    at org.jboss.aspects.tx.TxPolicy.invokeInCallerTx(TxPolicy.java:130) 
    at org.jboss.aspects.tx.TxInterceptor$Required.invoke(TxInterceptor.java:194) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.aspects.tx.TxPropagationInterceptor.invoke(TxPropagationInterceptor.java:76) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.security.RunAsSecurityInterceptorv2.invoke(RunAsSecurityInterceptorv2.java:94) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorv2.invoke(RoleBasedAuthorizationInterceptorv2.java:201) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3AuthenticationInterceptorv2.java:186) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterceptor.java:41) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContainerShutdownInterceptor.java:67) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invoke(CurrentInvocationInterceptor.java:67) 
    at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:102) 
    at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:182) 
    at org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContainer.java:240) 
    at org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandlerBase.invoke(SessionProxyInvocationHandlerBase.java:188) 
    at $Proxy638.generateWidget(Unknown Source) 
    at com.foobar.managers.Client.writeBananaToStream(Client.java:456) 
    at com.foobar.managers.Client.write(Client.java:123) 
    at com.foobar.managers.Manager.persist(Manager.java:275) 
    at com.foobar.FooBean.doSomething(FooBean.java:1243) 

私はコードを匿名化しなければならなかったので、クラス名との不一致はほとんど間違いありません。

+0

http://openejb.apache.org/3.0/simple-stateless-example.htmlは、デフォルトがローカルであることを確認するように見えますが、私は、権限のあるソース(JBossやEJBの仕様など)を期待していました。 。 –

+1

スタックトレースのどの部分が遠いと思いますか? – Osw

+0

問題の詳細とスタックトレースを追加しました。 –

答えて

2

これはローカルコールです。

JBoss ASでは、@Localアノテーションを省略すると、ローカルインタフェースのセマンティクスが得られます。私はこれが仕様に準拠しているかどうかを100%確信しているわけではないので、アノテーションをそこに置くことで明示的に定義するほうがよい。

$Proxy638は、EJBと同様のコンポーネントモデルがどのように機能するかの中心にあります。これは、新しい演算子を使用してEJBを作成することはできませんが、JNDI経由で@EJBまたは@Injectアノテーションによって注入されたもののみを検索することができます。

オブジェクトを直接取得することはありませんが、代わりにスタブとも呼ばれるプロキシを取得します。 EJB用語では、実際のBeanにはClient viewがあると言われています。このプロキシは、トランザクションを透過的に開始し、コミットまたはロールバックするなど、EJBコンテナがAOPの魔法を実行できるようにします。

+0

問題のオブジェクトは私のものですが、スタックトレースを得ることができると期待していますか?現時点でのスタックトレースには、自分のコードで例外がスローされた場所の詳細は含まれていません。それは私が解決しようとしていることです(JBossノイズを除外するのではなく)。 –

+1

これはEJBとは無関係の基本的なJavaのことだと思います:* EJBTransactionRolledbackException *でラップされた例外があり、単純に '' exception = exception.getCause() ) ''が例外になるまでループします。 –

関連する問題