【发布时间】:2020-05-31 14:49:25
【问题描述】:
我正在尝试为 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();
}
豆耳朵项目
应用程序.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