我正在尝试为一个简单的EJB项目编写一个客户端,我已经在本地部署了在Eclipse中运行的Wildfly 8。
我的界面:
package com.jwt.ejb.business;
import javax.ejb.Remote;
@Remote
public interface Hello {
public String sayHello();
}
我的实施:
package com.jwt.ejb.businesslogic;
import javax.ejb.Stateless;
import com.jwt.ejb.business.Hello;
@Stateless
public class HelloBean implements Hello {
public HelloBean() {
}
public String sayHello() {
return "Hello Boss Welcome to EJB";
}
}
我的客户:
package com.jwt.ejb.test;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import com.jwt.ejb.business.Hello;
import com.jwt.ejb.businesslogic.HelloBean;
public class Client {
public static void main(String[] args) {
Hello bean = doLookup();
if (bean != null)
System.out.println(bean.sayHello());
}
private static Hello doLookup() {
Context context = null;
Hello bean = null;
try {
final Hashtable jndiProperties = new Hashtable();
jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
context = new InitialContext(jndiProperties);
bean = (Hello) context.lookup(getLookupString());
} catch (NamingException e) {
e.printStackTrace();
}
return bean;
}
private static String getLookupString() throws NamingException {
final String appName = "";
final String moduleName = "EJBTest";
final String distinctName = "";
final String beanName = HelloBean.class.getSimpleName();
final String viewClassName = Hello.class.getName();
return "ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName;
}
}
当我运行它时,我得到这个异常:
javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial
at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(Unknown Source)
at javax.naming.InitialContext.lookup(Unknown Source)
at com.jwt.ejb.test.Client.doLookup(Client.java:26)
at com.jwt.ejb.test.Client.main(Client.java:15)
Exception in thread "main" java.lang.NullPointerException
at com.jwt.ejb.test.Client.main(Client.java:16)
官方文件也是这样:https://docs.jboss.org/author/display/AS71/EJB使用JNDI从远程客户端调用
问题出在哪里?
我在帖子中谈到了boss ejb客户端。属性,但我不知道该放什么。据我所知,我可以拥有这个属性文件,也可以像我那样通过编程方式声明属性。
除了使用Wildfly 8并引用JBoss作为7.1的文档之外,您还缺少JNDI属性上的InitialContextFactory。
Wildfly通过JNDI对EJB调用的留档在这里。因此,您应该执行以下操作:
void doBeanLookup() {
Properties jndiProperties = new Properties();
jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
jndiProperties.put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
// This is an important property to set if you want to do EJB invocations via the remote-naming project
jndiProps.put("jboss.naming.client.ejb.context", true);
// create a context passing these properties
Context ctx = new InitialContext(jndiProps);
// lookup the bean Hello
Hello bean = (Hello) ctx.lookup(getLookupString());
}
在您的pom.xml
中,您应该具有以下内容:
<dependency>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-ejb-client-bom</artifactId>
<version>8.0.0.Final</version>
<type>pom</type>
</dependency>
如果要使用http远程处理协议,请在方法上删除ejb并显示
超文本传输协议-远程客户端假设远程查找中的JNDI名称相对于java: jboss/导出命名空间,绝对JNDI名称的查找将失败。
更多信息可以在Wildfly 8 Remote JNDI参考更新草案中找到。
我试图建立一个简单的SpringMVC项目。 我创建了Web应用程序项目,然后添加了Spring和公共日志库。 还有这个网站。xml文件 这是HelloWebservlet。xml 然后我创建了java类(HelloContoller.java)com.tutorialspoint包 然后我在WEB-INF/JSP/hello中创建了JSP页面。jsp 我正在处理服务器glassfish,当我运行
我创建了一个NetBeans企业应用程序,它由包装ejb(jar)项目和web(war)项目的ear组成。 我的web项目中有一个servlet,我想在其中使用ejb项目中的一个ejb。
我目前正在将一些项目转换为maven,并且在战争开始时遇到了一些问题。因此,我刚刚创建了一个非常简单的ehcache maven项目,我得到了一个类加载器类型的问题。这是我的POM: Spring Config:http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring
为了配置一个简单的JPA项目,我使用了Wildfly 8,数据源是在单机版中配置的。xml。 在Web项目中,我配置了持久性。像这样的xml文件 http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd" 但是,当我添加br时。通用域名格式。卖应用程序。奥姆。通常,我在项目启动时出错,该错误表示存在hibernate问题org/hiber
我正在开发一个电子商务应用程序。为此,我想为每个客户创建一个会话,以维护他们的购物车信息。 如果它是一个普通的JavaEE项目,我会使用并将所有购物车信息添加到该会话中。 我的问题是对于EJB项目,为上述目的创建会话的过程是什么?
这是我的代码... build.sbt *hello.scala* 顺便说一下,我使用的是OSX Mountain Lion,sbt 0.13,Scala 2.10.3。