精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-12-17
最后修改:2009-12-31
今天兴起,想玩一玩Java EE 6.0,于是把Netbeans6.8给下载下来了。(好像是要快一些了。) 然后写了一个EJB3的模块(HelloWorld的无状态会话Bean),部署到它自带的Glassfishv3的服务器里。
但是问题出现了,我自己建了一个Java应用程序来,想通过JNDI的方式来访问这个EJB程序。 还是按照老规矩嘛:
public class Main { /** * @param args the command line arguments */ public static void main(String[] args) throws Exception { // TODO code application logic here Properties props = new Properties(); props.setProperty("java.naming.factory.initial", "com.sun.enterprise.naming.SerialInitContextFactory"); props.setProperty("java.naming.factory.url.pkgs", "com.sun.enterprise.naming"); props.setProperty("java.naming.factory.state", "com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl"); props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost"); //host props.setProperty("org.omg.CORBA.ORBInitialPort", "3700"); //EJB Port Context ctx = new InitialContext(props); HelloBeanRemote hr = (HelloBeanRemote) ctx.lookup(HelloBeanRemote.class.getName()); System.out.println(hr.getClass().getName()); System.out.println(hr.sayHello("zbs")); } } 然后就去找JNDI需要的SPI文件,按照以前的规矩是:Glassfish的lib目录下,包括javaee.jar,appserv-rt.jar,appserv-ext.jar和appserv-deploy-client.jar。但是,我发现除了javaee.jar,appserv-rt.jar以外,其它的没有了。奇怪! 同时,我很好奇的打开了appserv-rt.jar文件来看一下,发现里边什么都没有,就在META-INF下面有一个pom.xml和pom.properties,没有任何的class文件,我心里暗想:这还搞个屁啊! 但是,我还是把它引入到客户端项目里去了,然后运行以上的Main类,居然跑通了。我就奇怪了,没有任何的类文件,居然JNDI成功找到了资源。但是,如果我把appserv-rt.jar这个文件给单独copy出来(放在另外一个路径下),这就不能访问了,抛出了InitialFactory类没有找到。 难道这个Maven是个什么高级玩意,神奇了。(小弟没以前没玩过Maven,这不禁激起了我学习Maven的兴趣,改天发表一个Maven的学习感言个大家。)。打开pom.xml来看,也没看出什么奇特的。这就是传说中Java EE 6.0 对JDNI的改进吗? 真实奇特!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-12-17
MANIFEST.MF
|
|
返回顶楼 | |
发表时间:2009-12-17
X:\sges-v3\glassfish\lib\jndi-properties.jar
|
|
返回顶楼 | |
发表时间:2009-12-17
mikewang 写道 X:\sges-v3\glassfish\lib\jndi-properties.jar jndi-properties.jar里边只有一个jndi.properties的文件 它只定义了初始化context的工厂类是哪个。 这跟具体的类没什么关系吧 |
|
返回顶楼 | |
发表时间:2009-12-18
[stliu@papa-desktop t]$ unzip appserv-rt.jar
Archive: appserv-rt.jar creating: META-INF/ inflating: META-INF/MANIFEST.MF creating: META-INF/maven/ creating: META-INF/maven/org.glassfish.extras/ creating: META-INF/maven/org.glassfish.extras/appserv-rt/ inflating: META-INF/maven/org.glassfish.extras/appserv-rt/pom.xml inflating: META-INF/maven/org.glassfish.extras/appserv-rt/pom.properties [stliu@papa-desktop t]$ cat META-INF/MANIFEST.MF Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Created-By: Apache Maven Built-By: java_re Build-Jdk: GlassFish-ServerExcluded: true Class-Path: ../modules/gf-client.jar |
|
返回顶楼 | |
发表时间:2009-12-18
请恕小弟愚钝,MANIFEST.MF里这些信息的含义是什么?
|
|
返回顶楼 | |
发表时间:2009-12-18
http://java.sun.com/javase/6/docs/technotes/guides/jar/jar.html
http://www.java3z.com/cwbwebhome/article/article2/2843.html?id=1449 |
|
返回顶楼 | |
发表时间:2009-12-21
我知道你想说什么了。
你是想说MENIFEST.MF文件里边的Class-Path指向了另外一个jar文件: 引用 Class-Path: ../modules/gf-client.jar
然后我又把这个文件找到以后,打开来看了一看,我一下子就明白了。 哦,原来它也有一个Class-Path,指向了其它大量的jar文件,所以IDE在处理这些MENIFEST.MF的时候就会去动态的加载这些jar文件,因此它就可以运行了。 引用 Manifest-Version: 1.0 Ant-Version: Apache Ant 1.6.5 Created-By: Apache Maven Archiver-Version: Plexus Archiver Built-By: java_re Build-Jdk: 1.6.0_10 Package: org.glassfish.appclient.client.acc Main-Class: org.glassfish.appclient.client.AppClientFacade PreMain-Class: org.glassfish.appclient.client.acc.agent.AppClientConta inerAgent Class-Path: ../modules/woodstox-osgi.jar ../modules/tools.jar ../modul es/glassfish-corba-asm.jar ../modules/glassfish-corba-codegen.jar ../ modules/glassfish-corba-csiv2-idl.jar ../modules/glassfish-corba-newt imer.jar ../modules/glassfish-corba-omgapi.jar ../modules/glassfish-c orba-orb.jar ../modules/glassfish-corba-orbgeneric.jar ../modules/aut o-depends.jar ../modules/config.jar ../modules/config-types.jar ../mo dules/hk2.jar ../modules/hk2-core.jar ../modules/osgi-adapter.jar ../ modules/tiger-types-osgi.jar ../modules/grizzly-comet.jar ../modules/ grizzly-config.jar ../modules/grizzly-framework.jar ../modules/grizzl y-http.jar ../modules/grizzly-http-servlet.jar ../modules/grizzly-por tunif.jar ../modules/grizzly-rcm.jar ../modules/grizzly-utils.jar ../ modules/pkg-client.jar ../modules/jaxb-osgi.jar ../modules/webservice s-osgi.jar ../modules/activation.jar ../modules/el-api.jar ../modules /mail.jar ../modules/endorsed/webservices-api-osgi.jar ../modules/end orsed/jaxb-api-osgi.jar ../modules/junit.jar ../modules/javax.persist ence.jar ../modules/org.eclipse.persistence.antlr.jar ../modules/org. eclipse.persistence.asm.jar ../modules/org.eclipse.persistence.core.j ar ../modules/org.eclipse.persistence.jpa.jar ../modules/org.eclipse. persistence.jpa.modelgen.jar ../modules/org.eclipse.persistence.oracl e.jar ../modules/bean-validator.jar ../modules/endorsed/javax.annotat ion.jar ../modules/javax.ejb.jar ../modules/javax.enterprise.deploy.j ar ../modules/javax.jms.jar ../modules/javax.management.j2ee.jar ../m odules/javax.resource.jar ../modules/javax.security.auth.message.jar ../modules/javax.security.jacc.jar ../modules/javax.servlet.jar ../mo dules/javax.servlet.jsp.jar ../modules/javax.transaction.jar ../modul es/admin-core.jar ../modules/admin-util.jar ../modules/cli-framework. jar ../modules/config-api.jar ../modules/monitoring-core.jar ../modul es/acc-config.jar ../modules/gf-client-module.jar ../modules/amx-core .jar ../modules/amx-j2ee.jar ../modules/annotation-framework.jar ../m odules/common-util.jar ../modules/container-common.jar ../modules/gla ssfish-api.jar ../modules/glassfish-ee-api.jar ../modules/glassfish-n aming.jar ../modules/internal-api.jar ../modules/stats77.jar ../modul es/connectors-inbound-runtime.jar ../modules/connectors-internal-api. jar ../modules/connectors-runtime.jar ../modules/work-management.jar ../modules/glassfish.jar ../modules/kernel.jar ../modules/deployment- common.jar ../modules/deployment-javaee-core.jar ../modules/dol.jar . ./modules/dtds.zip ../modules/schemas.zip ../modules/ejb-container.ja r ../modules/ejb-internal-api.jar ../modules/asm-all-repackaged.jar . ./modules/ldapbp-repackaged.jar ../modules/management-api.jar ../modu les/flashlight-agent.jar ../modules/flashlight-framework.jar ../modul es/gmbal.jar ../modules/jms-core.jar ../modules/orb-connector.jar ../ modules/orb-iiop.jar ../modules/eclipselink-wrapper.pom ../modules/jp a-connector.jar ../modules/persistence-common.jar ../modules/cmp-inte rnal-api.jar ../modules/appclient.security.jar ../modules/ejb.securit y.jar ../modules/security.jar ../modules/websecurity.jar ../modules/w ebservices.security.jar ../modules/jta.jar ../modules/jts.jar ../modu les/transaction-internal-api.jar ../modules/el-impl.jar ../modules/js p-impl.jar ../modules/war-util.jar ../modules/web-cli.jar ../modules/ web-core.jar ../modules/web-glue.jar ../modules/web-gui-plugin-common .jar ../modules/web-naming.jar ../modules/jsr109-impl.jar ../modules/ mimepull.jar ../../mq/lib/imq.jar ../../mq/lib/imqadmin.jar ../../mq/ lib/imqutil.jar ../../mq/lib/fscontext.jar ../lib/install/application s/jmsra/imqjmsra.jar ../lib/install/applications/__ds_jdbc_ra/__ds_jd bc_ra.jar ../lib/install/applications/__cp_jdbc_ra/__cp_jdbc_ra.jar . ./lib/install/applications/__xa_jdbc_ra/__xa_jdbc_ra.jar ../lib/insta ll/applications/__dm_jdbc_ra/__dm_jdbc_ra.jar ../../javadb/lib/derby. jar ../../javadb/lib/derbyclient.jar ../../javadb/lib/derbynet.jar .. /../javadb/lib/derbytools.jar ../../javadb/lib/derbyrun.jar ../lib/in stall/applications/jaxr-ra/jaxr-ra.jar 但是,如果在命令提示符下去运行测试代码的话,则不能运行。 奇怪,"bin"目录下的java命令就不会去加载这些jar了吗? 不晓得MENIFEST.MF这个文件的东西是否被其它技术所支持? |
|
返回顶楼 | |
发表时间:2009-12-27
怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。
|
|
返回顶楼 | |
发表时间:2009-12-27
最后修改:2009-12-27
独立思考 写道 怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。
你去试嘛。 用Eclipse和Netbeans都可以运行。 如果在命令提示符下使用: java -cp c:/galssfish/lib/appserv-rt.jar Test 就抛出了Class Not Found的异常了 |
|
返回顶楼 | |