java - 从同一包中的主类访问无状态 session bean

标签 java ejb-3.1 ibm-was

我在访问无状态 session bean 属性时遇到一些问题。这些是我迄今为止尝试过的事情。请阐明我所缺少的内容。

我在 IBM WAS 8.5 中将 namespace 绑定(bind)为 global/env

我的 ejb 为:

@Singleton 
@Stateless(mappedName="envEJB")
@LocalBean
@ConcurrencyManagement
@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
public class EnvEJB {

    @Resource(lookup="global/env")
    protected String env;


    @Lock(LockType.READ)
    @AccessTimeout(1000)
    public String getEnv() {
        return env;
    }

我正在尝试访问我的主类:

Hashtable<String, String> env = new Hashtable<String, String>();
pdEnv.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
pdEnv.put(Context.PROVIDER_URL, "iiop://localhost:2890");

String str = "java:comp/env/envEJB";
Context context = new InitialContext(env);
EnvironmentEJB ejb = (EnvironmentEJB) context.lookup(str);

我在这里想要实现的唯一一件事是尝试从服务器访问一些 namespace 绑定(bind)。

进行上述通话后,我收到了

javax.naming.ConfigurationException: Name space accessor for the java: name space has not been set. Possible cause is that the user is specifying a java: URL name in a JNDI Context method call but is not running in a J2EE client or server environment.

调用 String str = "java:app/appname/envEJB"; 给我同样的错误。

更新

同时做

Hashtable<String, String> pdEnv = new Hashtable<String, String>();
pdEnv.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
pdEnv.put(Context.PROVIDER_URL, "iiop://localhost:2890");
Context context = new InitialContext(pdEnv);        
java.lang.Object ejbBusIntf = context.lookup("com.test.EnvironmentEJBRemote");        
EnvironmentEJB ejb = (EnvironmentEJB)javax.rmi.PortableRemoteObject.narrow(ejbBusIntf, EnvironmentEJB.class);

出现以下异常

Exception in thread "P=925268:O=0:CT" java.lang.ClassCastException: cannot cast class org.omg.stub.java.rmi._Remote_Stub to class com.test.EnvironmentEJB
at com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:396)
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:148)
at com.test.Test.main(Test.java:43)

最佳答案

java: 命名空间仅在托管环境(应用程序服务器或应用程序客户端)中受支持。它们在瘦客户端(独立的 Java SE 主类)中不受支持。为此,您需要使用非 java: 名称。请参阅 SystemOut.log 中的 CNTR0167I 消息以查找非 java: 绑定(bind)。

关于java - 从同一包中的主类访问无状态 session bean,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36188802/

相关文章:

java - 使用 callablestatement 或 jdbctemplate 进行 mysql 插入的字符编码

java - Android:mpeg4/H.264 打包示例

java - System.in 无法与 Scanner 配合使用 (NoSuchElementException)

java - spring boot oauth2 feign 允许匿名请求

authentication - 如何手动设置/传播安全上下文信息,例如JBoss 7 的主体(通过 JBoss 远程处理 2)

spring - Spring 中无状态和有状态 Bean 的类似物

java - 有人能够在 Websphere Liberty Profile 8.5.5.7 上运行 Wicket 7.0.0 吗?

jakarta-ee - @Singleton @Startup @PostConstruct 方法保证在 EJB 可用于客户端调用之前返回?

ibm-was - WebSphere Application Server 7.0.0.33 安装错误 - "failed to Install Update Installer"

java - 使用 IBM WAS ConnectionFactory 和 Spring 时出错