如何正确部署Bean-JNDI,Weblogic 12C

问题描述 投票:0回答:1

我正在尝试为weblogic 12C服务器创建bean。 Bean只会保留几个值,至少一个(可能是多个)应用程序可以引用这些值(特别是-承载令牌,令牌的持续时间以及何时检索)

我对此很陌生(因此感到困惑)

我正在运行最新版本的Eclipse,并且已经安装了Weblogic工具。我构建我的bean并将其部署到本地服务器。在这一点上,我只是试图获取上下文并查找我的bean。当我运行客户端时,我得到的是:

java.lang.ClassCastException: weblogic.jndi.internal.WLContextImpl cannot be cast to com.salientcrgt.chums.oAuthToken
    at TestRemoteLoading.TestClass.getBean(TestClass.java:46)
    at TestRemoteLoading.TestClass.main(TestClass.java:27)

如果我使用Weblogic控制台并查找我的部署,则会在“测试”选项卡中看到此内容:

oAuthTokenBeanEAR oAuthTokenBeanEAR     
Classloader Analysis Tool   Classloader Analysis Tool on server AdminServer
oAuthToken 
oAuthToken      Test points for this EJB module.
oAuthToken  AdminServer No test point since this EJB's home does not have a JNDI name.

豆类项目:

ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd" version="3.2">
  <display-name>oAuthTokenBean </display-name>
  <ejb-client-jar>oAuthTokenBeanClient.jar</ejb-client-jar>
</ejb-jar>

weblogic-ejb-jar.xml

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-ejb-jar xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.7/weblogic-ejb-jar.xsd">
    <!--weblogic-version:12.2.1.3-->
    <wls:weblogic-enterprise-bean>
        <wls:ejb-name>oAuthToken</wls:ejb-name>
        <wls:stateless-session-descriptor></wls:stateless-session-descriptor>
        <wls:jndi-name>oAuthToken</wls:jndi-name>
        <wls:local-jndi-name>oAuthToken</wls:local-jndi-name>
        <wls:jndi-binding>
            <wls:class-name>com.salientcrgt.chums.oAuthToken</wls:class-name>
        </wls:jndi-binding>
    </wls:weblogic-enterprise-bean>
</wls:weblogic-ejb-jar>

oAuthToken.java

/**
 * Session Bean implementation class oAuthToken
 */
@Stateless(name = "oAuthToken", mappedName = "oAuthToken")
@Remote ({com.salientcrgt.chums.oAuthTokenOBJ.class})
public class oAuthToken implements oAuthTokenOBJ, Serializable {

    public oAuthToken() {
    }

    private static final long serialVersionUID = 1L;

    private String service = "default";
    private String bearerToken;
    private int duration;
    private Date timeStamp;
...

oAuthtokenOBJ.java

package com.salientcrgt.chums;

import java.util.Date;

public interface oAuthTokenOBJ {
    public String getService();
    public String getBearerToken();
    public int getDuration();
    public Date getTimeStamp();
    public boolean Expired();
}

豆耳项目

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<wls:weblogic-application xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/javaee_6.xsd http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.8/weblogic-application.xsd">
    <!--weblogic-version:12.2.1.3-->
    <wls:application-param>
        <wls:param-name>webapp.encoding.default</wls:param-name>
        <wls:param-value>UTF-8</wls:param-value>
    </wls:application-param>
</wls:weblogic-application>

客户端应用程序:

这里是我尝试获取bean的方法

   @SuppressWarnings("unchecked")
    private static Context getInitialContext() throws NamingException {
        @SuppressWarnings("rawtypes")
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
        env.put(Context.PROVIDER_URL, "t3://127.0.0.1:7001");
        return new InitialContext(env);
    }

    public static void getBean() {
        try {
            final Context c = getInitialContext();
            /** print list of jndi names in context */
            NamingEnumeration<NameClassPair> list = c.list("");
            while (list.hasMore()) {
              System.out.println(list.next().getName());
            }
            // get the bean
            setTokenBean((oAuthToken) c.lookup("oAuthToken#com"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

我认为我正在客户端中执行正确的操作,但是没有以某种方式正确地组装/部署bean。我希望这是足够的信息,以显示我在这里搞砸的内容。

这产生了以下输出:

mejbmejb_jarMejb_EO
oAuthToken#com
oAuthTokenBeanEARoAuthTokenBean_jaroAuthToken_Home
jmx
javax
oAuthTokenBeanEARoAuthTokenBean_jaroAuthToken_oAuthTokenOBJ
weblogic
__WL_GlobalJavaApp
_WL_internal_0N2TL1pYAVfZYdsOf5bIz5NXR1UAnTtG7gYEw8eSpFDasIK4NdrDolV9ZtejElAL
ejb
java:global
eis
java.lang.ClassCastException: weblogic.jndi.internal.WLContextImpl cannot be cast to com.salientcrgt.chums.oAuthToken
    at TestRemoteLoading.TestClass.getBean(TestClass.java:46)
    at TestRemoteLoading.TestClass.main(TestClass.java:27)
java weblogic stateless-session-bean
1个回答
0
投票

已排序。

以上代码大部分是正确的。这是我最终得到的结果:

    public static void getBean() {
        try {
            final Context c = getInitialContext();
            setTokenBean( (oAuthTokenOBJ) 
                   c.lookup("oAuthToken#com.salientcrgt.chums.oAuthTokenOBJ"));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }

oAuthTokenOBJ是接口。

我去了测试班的主要班,并且做到了:

    public static void main(String Arg[]) throws IOException  {
        getBean();
        String myService = tokenBean.getService();
        System.out.println(myService);
    }

它显示“ default”,它是该字段在bean中的初始值。希望这对其他人有帮助。

((我不是唯一一个发现Oracle文档是笨拙的人。)大声笑

© www.soinside.com 2019 - 2024. All rights reserved.