HI,Everyone!我在学习ejb的时候遇到一个很令人困惑的问题,向各位求教,写得很多但都是一个相关的问题,相信对你们懂得人来说是小菜一碟
首先说一下开发环境我安装的是jdk1.6,JBOSS也是下的对应jdk1.6的JBOSS_4.2.3的版本
在myeclipse中使用用的JRE System Libraries[javaSE-1.6]版本,也就是我安装的那个JDK
--ps:我没有安装j2ee sdk
然后我建了一个java项目(注:不是EJB项目)-----------------------------------------定义了一个接口
package com.hi.ejb3;public interface HelloWorld {
public String sayHello(String name);
}----------------------------------------------实现类
package com.hi.ejb3.impl;import javax.ejb.Remote;
import javax.ejb.Stateless;import com.hi.ejb3.HelloWorld;@Stateless
@Remote(HelloWorld.class)
public class HelloWorldBean implements HelloWorld { @Override
public String sayHello(String name) {
return name + "*******你好,美丽世界*******";
}
}
---------------------------------------------客户端调用
package com.hi.ejb3.test;import java.util.Properties;import javax.naming.InitialContext;
import javax.naming.NamingException;import com.hi.ejb3.HelloWorld;public class EJBHelloWorldClient { /**
 * @param args
 */
public static void main(String[] args) {
Properties pros = new Properties();
pros.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
pros.setProperty("java.naming.provider.url","localhost:1099");
try {
InitialContext initialContext = new InitialContext(pros);
HelloWorld helloWorld = (HelloWorld)initialContext.lookup("HelloWorldBean/remote");
System.out.println(helloWorld.sayHello("张飞:"));
// 查看代理服务器的类名
System.out.println(helloWorld.getClass().getName());
} catch (NamingException e) {
e.printStackTrace();
}
}
}
=========================我通过运行EJBHelloWorldClient可以正常运行,以下是正常打印的信息
张飞:*******你好,美丽世界*******???????????????????????????????????????????????????????
当我通过ant来组织调用(建立路径,编译,打包,发布,移除)的时候
以下悲剧发生了,下面是控制台的打印信息
Buildfile: D:\MyEclipseWorkSpace\ejb\HelloWorld\build.xml
prepare:
   [delete] Deleting directory D:\MyEclipseWorkSpace\ejb\HelloWorld\build
    [mkdir] Created dir: D:\MyEclipseWorkSpace\ejb\HelloWorld\build
compile:
    [javac] Compiling 4 source files to D:\MyEclipseWorkSpace\ejb\HelloWorld\build
    [javac] D:\MyEclipseWorkSpace\ejb\HelloWorld\src\com\hi\ejb3\impl\HelloWorldBean.java:3: 软件包 javax.ejb 不存在
    [javac] import javax.ejb.Remote;
    [javac]                 ^
    [javac] D:\MyEclipseWorkSpace\ejb\HelloWorld\src\com\hi\ejb3\impl\HelloWorldBean.java:4: 软件包 javax.ejb 不存在
    [javac] import javax.ejb.Stateless;
    [javac]                 ^
    [javac] D:\MyEclipseWorkSpace\ejb\HelloWorld\src\com\hi\ejb3\impl\HelloWorldBean.java:8: 找不到符号
    [javac] 符号: 类 Stateless
    [javac] @Stateless
    [javac]  ^
    [javac] D:\MyEclipseWorkSpace\ejb\HelloWorld\src\com\hi\ejb3\impl\HelloWorldBean.java:9: 找不到符号
    [javac] 符号: 类 Remote
    [javac] @Remote(HelloWorld.class)
    [javac]  ^
    [javac] 4 错误BUILD FAILED
D:\MyEclipseWorkSpace\ejb\HelloWorld\build.xml:22: Compile failed; see the compiler error output for details.Total time: 1 second
---------------------------------------------------------------------------------------------
1.我也在网上查了一下,有很多人说下一个java ee sdk 就可以了,我昨天也去下了,不过安装到一半的时候死机了。所以也没有装j2ee sdk
今天又删了原来的java ee sdk安装目录,但是重新安装装不上去了。不知是为什么?
2.我很奇怪,我为什么不用ant能编译,通过ant就不能编译呢(这样就不是安不安装j2ee sdk的问题了吧?)?
3.我练习过一些web项目但重来没有装过java ee sdk,一般在搞哪些开发的时候需要安装j2ee sdk呢?
4.我使用的开发工具是myeclipse 7.0,里面有个JAVA EE 5 Libareries,是不是用它就可以不安转java ee sdk呢?
5.怎么会提示 “软件包 javax.ejb 不存在  找不到符号”?

解决方案 »

  1.   

    ant的compile的时候要把classpath设置到jboss的client目录
      

  2.   

    jdk是配的我安装的jdk 6
    应该不是jdk的问题,因为在不用ant编译,手动编译运行都没有问题
      

  3.   

    配置类路径         <path id="build.classpath">
    <fileset dir="${jboss.home}/client">
    <include name="*.jar" />
    </fileset>
    <pathelement location="${build.dir}" />
    </path>
     
              编译 <target name="compile" depends="prepare" description="编译">
    <javac srcdir="${src.dir}" destdir="${build.dir}" includes="entity/**,session/**">
    <classpath refid="build.classpath" />
    </javac>
    </target>
      

  4.   

    由于你是用 ant 编译,所在在 eclipse 引用的类路径不起做用,所以要配置
      

  5.   

    由于你是用 ant 编译,所在在 eclipse 引用的类路径不起做用,所以要配置
      

  6.   

    ant部署在编译的时候,你这种情况是需要将你编译需要依赖的JAR文件部署好的.这个问题无疑就是在这里.
      

  7.   

    全部是@注解的问题, @是JDK1.5的新特性
    是不是complier版本问题你查看下工程属性Property---Java Complier---Level  ---- 1.5+?或者你的buildPath是不是用的1.5+的Jdk