WebSphere Liberty 8.0.0.3 EJB查找失败:
我使用以下代码创建了一个EJB,并将其部署在WebSphere Liberty 8.0.0.3。中。
ITestEJBRemoteInterface.java
package ejb31.test;
import javax.ejb.EJB;
import javax.ejb.Remote;
@Remote
@EJB(name="ejb/checkName")
public interface ITestEJBRemoteInterface
{
public boolean checkNames(String fsName);
}
TestEJB.java:
package ejb31.test;
import java.util.Arrays;
import java.util.List;
import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Remote;
import javax.ejb.Stateless;
/** * Session Bean implementation class TestEJB */
@Stateless
@EJB(name="ejb/checkName")
public class TestEJB implements ITestEJBRemoteInterface
{
List<String> moListOfNames = Arrays.asList("Kevin","Jiten","Martina","Brian");
/** * Default constructor. */
public TestEJB()
{
}
/** * Find if the passed name is present in the default list of names
*
*
*
* @return */
public boolean checkNames(String fsName)
{
boolean lboolNamePresent = false;
if(fsName != null)
{
lboolNamePresent = moListOfNames.contains(fsName);
}
return lboolNamePresent;
}
}
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:ejb="http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd" version="3.1">
<display-name> TestEJB3.1 </display-name>
</ejb-jar>
EJB部署成功,并且日志文件抛出了绑定位置:
java:global / TestEJB3.1EAR / TestEJB3.1 / TestEJB!ejb31.test.ITestEJBRemoteInterface
问题在于调用ejb时。 WebSphereClient.java
package com.client;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class WebSphereClient {
public static void main(String[] args) {
String jndiPath = "corbaname:rir:#ejb/global/TestEJB3.1EAR/TestEJB3.1/TestEJB!ejb31.test.ITestEJBRemoteInterface";
String provider = "corbaname:iiop:localhost:2809";
Properties jndiLookupProps = new Properties();
jndiLookupProps.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
com.ibm.websphere.naming.PROPS.INITIAL_CONTEXT_FACTORY);
jndiLookupProps.put(javax.naming.Context.PROVIDER_URL, provider);
try {
Object found = new InitialContext().lookup(jndiPath);
} catch (NamingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
它抛出一个错误: javax.naming.InvalidNameException:名称组件“ TestEJB!ejb31.test.ITestEJBRemoteInterface”违反了INS名称语法。有多个未转义的ID /种类分隔符(“。”)。
当我尝试转义jndiPath时:
jndiPath = "corbaname:rir:#ejb/global/TestEJB3%5c.1EAR/TestEJB3%5c.1/TestEJB!ejb31%5c.test%5c.ITestEJBRemoteInterface";
或
jndiPath = "corbaname:rir:#ejb/global/TestEJB3\.1EAR/TestEJB3\.1/TestEJB!ejb31\.test\.ITestEJBRemoteInterface";
或
jndiPath = "corbaname:rir:#ejb/global/TestEJB3\\.1EAR/TestEJB3\\.1/TestEJB!ejb31\\.test\\.ITestEJBRemoteInterface";
它给出相同的错误。 如何使用远程客户端正确调用部署在Websphere自由中的EJB?