gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:28:17 25 4
gpt4 key购买 nike

我正在尝试为 weblogic 12C 服务器创建一个 bean。该 bean 将保存至少一个(可能更多)应用程序可以引用的几个值(具体来说 - 不记名 token 、 token 的持续时间以及检索 token 的时间)

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

我正在运行最新版本的 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.

Bean 项目:

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();
}

bean 耳项目

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)

最佳答案

已经解决了。

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

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

oAuthTokenOBJ 是接口(interface)。

我进入测试类的主要部分并执行了以下操作:

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

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

(我不是唯一一个认为 Oracle 文档有点迟钝的人。)哈哈

关于java - 如何正确部署 Bean - JNDI、Weblogic 12C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62117935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com