代码之家  ›  专栏  ›  技术社区  ›  Simon Lehmann

EJB3:从应用程序客户端访问有状态会话bean

  •  5
  • Simon Lehmann  · 技术社区  · 17 年前

    从应用程序客户端访问有状态会话bean(SFSB)时遇到一些问题。我正在使用JBoss5.0.1.GA。应用程序客户机和EJB都打包在一个EAR中,可以部署,我还有其他的应用程序客户机,它们可以正常工作。到目前为止,我只使用了无状态会话bean(slsb),但就我所知,slsb和sfsb之间的差异不应影响如何从应用程序客户端访问它们。

    类/接口的结构:

    @Local public interface A {...}
    
    @Stateless public class ABean implements A {...}
    
    @Remote public interface B {...}
    
    @Stateful public class BBean implements B {
        @EJB private A anInstanceOfA;
    
        @PostConstruct private void init() {
            this.anInstanceOfA.someMethod();
        }
    }
    

    应用程序客户端通过“appclient启动器”运行,如中所述 "How to use an application client in JBoss 5"

    我做错什么了吗?我应该如何从应用程序客户端使用SFSB?

    到目前为止,我还没有发现关于这个问题的任何有用的东西。该例外情况在中的类似上下文中提到 [#JBAS-4317] Security Context over the invocation

    2 回复  |  直到 17 年前
        1
  •  1
  •   Simon Lehmann    17 年前

    尽管我仍然想知道为什么我最初的设置非常适合无状态会话bean,但不适合有状态会话bean,下面是我找到的解决方案:

    <application-policy name="My-SD">
        <authentication>
            <login-module code="org.jboss.security.auth.spi.DatabaseServerLoginModule" flag="required">
                <module-option name="unauthenticatedIdentity">guest</module-option>
                <module-option name="dsJndiName">java:/myDS</module-option>
                <module-option name="principalsQuery">SELECT PASSWORD FROM LOGIN WHERE LOGIN = ? AND STATUS > 0</module-option>
                <module-option name="rolesQuery">SELECT ROLE, 'Roles' FROM USER_ROLE WHERE LOGIN = ?</module-option>
            </login-module>
        </authentication>
    </application-policy>
    

    我在web应用程序的jboss-web.xml以及EJB项目的jboss.xml中使用了这个安全域,尽管我实际上只在web应用程序中使用它(EJB无需身份验证即可访问)。

        2
  •  0
  •   Martin Höller    14 年前

    原因可以在 EJB 3.0 Core Specification

    生命周期回调侦听器方法在未指定的事务和安全上下文中调用。


    -马丁

    推荐文章