Hello.java如下:package examples.session.stateless;public interface Hello {
public String hello() ;
}HelloBean.java如下:package examples.session.stateless;import javax.ejb.*;@Stateless
@Remote(Hello.class)
public class HelloBean implements Hello{
public String hello(){
System.out.println("hello()");
return "Hello,World!";
}
}
package examples.session.stateless;import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;public class HelloClient {
public static void main(String[] args) throws Exception{
Context ctx=new InitialContext();
Hello hello=(Hello)ctx.lookup("example.session.stateless.Hello");
System.out.println(hello.hello());
}
}服务器用weblogic9.2,程序发布上去后,运行HelloClient.java,提示如下:
init:
deps-jar:
compile-single:
run-main:
Exception in thread "main" 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(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at examples.session.stateless.HelloClient.main(HelloClient.java:20)
Java Result: 1
请问什么原因?该怎么改???
public String hello() ;
}HelloBean.java如下:package examples.session.stateless;import javax.ejb.*;@Stateless
@Remote(Hello.class)
public class HelloBean implements Hello{
public String hello(){
System.out.println("hello()");
return "Hello,World!";
}
}
package examples.session.stateless;import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;public class HelloClient {
public static void main(String[] args) throws Exception{
Context ctx=new InitialContext();
Hello hello=(Hello)ctx.lookup("example.session.stateless.Hello");
System.out.println(hello.hello());
}
}服务器用weblogic9.2,程序发布上去后,运行HelloClient.java,提示如下:
init:
deps-jar:
compile-single:
run-main:
Exception in thread "main" 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(NamingManager.java:645)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at examples.session.stateless.HelloClient.main(HelloClient.java:20)
Java Result: 1
请问什么原因?该怎么改???
改成
Hello hello=(Hello)ctx.lookup("remote/example.session.stateless.Hello")或
Hello hello=(Hello)ctx.lookup("example.session.stateless.Hello/remote")具体哪个忘了
(Jod.Sun) 好象不需要重起。如果是热部署的话,最后那个文件导个examples.session.stateless。HelloBean 试试 怎么导入?
语句之后还要写3条语句,以前我是放在属性文件里的
在哪里看???概述 目标 备注
单击 更改中心内的锁定并编辑 按钮,以修改此页上的设置。
使用此页可以查看(有时更改)有关 J2EE 库的常规配置信息,如名称、应用程序源的路径以及临时模式。使用“部署顺序”字段可以更改服务器启动时部署此库的相对于其他部署的顺序。
名称: HelloBeanEJB 此 J2EE 库的名称。详细信息...
路径: D:\ javatest\ HelloBeanEJB\ dist\ HelloBeanEJB. jar “管理服务器”上可部署单元来源的路径。详细信息...
临时模式: (未指定) 用于指定是否在应用程序准备期间,将应用程序文件从管理服务器上的源复制到受管服务器临时区域的模式。详细信息...
部署顺序: 表示启动过程中此单元相对于服务器上的其他 DeployableUnit 的部署时间的数值。详细信息...
是这个HelloBeanEJB吗?
语句之后还要写3条语句,以前我是放在属性文件里的 哪三条?
第一:
new InitialContext()的时候:
Context ctx=new InitialContext(); 改成:java.util.Properties h = new java.util.Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
//初始化Context对象。
Context ctx =new InitialContext(h);JNDI需要配置具体的ContextFactory实现类的第二:
如果出什么CLassNotFound之类的话就把weblogic/lib下的包加到classpath下吧。over!!
java.util.Properties h = new java.util.Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");之前我门是把这些文件放在属性文件里的。之前忘了
public static void main(String[] args) throws Exception{
// ctx=new InitialContext();
java.util.Properties h = new java.util.Properties();
h.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://localhost:7001");
//初始化Context对象。
Context ctx =new InitialContext(h);
//Hello hello=(Hello)ctx.lookup("examples.session.stateless.HelloBean");
//Hello hello=(Hello)ctx.lookup("remote/examples.session.stateless.HelloBean");
Hello hello=(Hello)ctx.lookup("examples.session.stateless.HelloBean/remote");
System.out.println(hello.hello());
}
}
提示如下:
init:
deps-jar:
Compiling 1 source file to D:\javatest\HelloBeanEJB\build\jar
compile-single:
run-main:
Exception in thread "main" javax.naming.NameNotFoundException: While trying to lookup 'remote.examples.session.stateless.HelloBean' didn't find subcontext 'remote'. Resolved '' [Root exception is javax.naming.NameNotFoundException: While trying to lookup 'remote.examples.session.stateless.HelloBean' didn't find subcontext 'remote'. Resolved '']; remaining name 'remote/examples/session/stateless/HelloBean'
at weblogic.rjvm.ResponseImpl.unmarshalReturn(ResponseImpl.java:215)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:338)
at weblogic.rmi.cluster.ClusterableRemoteRef.invoke(ClusterableRemoteRef.java:252)
at weblogic.jndi.internal.ServerNamingNode_923_WLStub.lookup(Unknown Source)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:379)
at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:367)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at examples.session.stateless.HelloClient.main(HelloClient.java:23)
Caused by: javax.naming.NameNotFoundException: While trying to lookup 'remote.examples.session.stateless.HelloBean' didn't find subcontext 'remote'. Resolved ''
at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1139)
at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:247)
at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:171)
at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:206)
at weblogic.jndi.internal.RootNamingNode_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:553)
at weblogic.rmi.cluster.ClusterableServerRef.invoke(ClusterableServerRef.java:224)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:443)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:363)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:147)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:439)
at weblogic.rmi.internal.BasicServerRef.access$300(BasicServerRef.java:61)
at weblogic.rmi.internal.BasicServerRef$BasicExecuteRequest.run(BasicServerRef.java:983)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
Java Result: 1
成功生成(总时间:2 秒)
还是不成功,快要绝望了。
[javax.naming.NameNotFoundException]
这个还不好解决吗??各个服务器为EJBBean生成的默认jndi名称是不一样的,weblogic我不太清楚。
weblogic不是用管理界面吗,用ie连上去。。
然后找JNDI server那个节点,从里面找你的bean对应的jndi名称,把你程序里的改成你看到的那个就ok了。有问题加我msn:[email protected]
JNDI 树结构 AdminServer
bea_wls_remote_deployerbea_wls_remote_deployer_jarDeployerBean_EO
ejbmgmtMEJBjavaxmejbmejb_jarMejb_EO
weblogic
怎么没有我ejb呀?是不是我把ejb发布成库不行呀?但是发布成应用程序要报错呀。激活更改期间出错,有关详细信息,请查看日志。
Exception preparing module: EJBModule(HelloBeanEJB) [EJB:011023]An error occurred while reading the deployment descriptor. The error was: VALIDATION PROBLEMS WERE FOUND D:\javatest\HelloBeanEJB\dist\HelloBeanEJB.jar\META-INF\ejb-jar.xml:5:6:5:6: problem: cvc-complex-type.2.4c: Expected elements 'session@http://java.sun.com/xml/ns/j2ee entity@http://java.sun.com/xml/ns/j2ee message-driven@http://java.sun.com/xml/ns/j2ee' before the end of the content in element enterprise-beans@http://java.sun.com/xml/ns/j2ee:.
VALIDATION PROBLEMS WERE FOUND D:\javatest\HelloBeanEJB\dist\HelloBeanEJB.jar\META-INF\ejb-jar.xml:5:6:5:6: problem: cvc-complex-type.2.4c: Expected elements 'session@http://java.sun.com/xml/ns/j2ee entity@http://java.sun.com/xml/ns/j2ee message-driven@http://java.sun.com/xml/ns/j2ee' before the end of the content in element enterprise-beans@http://java.sun.com/xml/ns/j2ee:
log已经说得很清楚了。-----------
An error occurred while reading the deployment descriptor The error was: VALIDATION PROBLEMS WERE FOUND
---
ejb-jar.xml有问题,把ejb-jar.xml贴出来。
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar version="2.1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd">
<display-name>HelloBeanEJB</display-name>
<enterprise-beans>
</enterprise-beans>
</ejb-jar>
enterprise-beans下面应该定义一下session 或者实体bean,比如
.
<session>
<ejb-name>Hello</ejb-name>
<home>sample.HelloHome</home>
<remote>sample.Hello</remote>
<ejb-class>sample.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
<security-identity>
<use-caller-identity/>
</security-identity>
</session>