论坛首页 Java企业应用论坛

Glassfish v3 jndi的一点发现

浏览 10171 次
精华帖 (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的改进吗?

   真实奇特!

 

 

 

   发表时间:2009-12-17  
MANIFEST.MF
0 请登录后投票
   发表时间:2009-12-17  
X:\sges-v3\glassfish\lib\jndi-properties.jar
0 请登录后投票
   发表时间:2009-12-17  
mikewang 写道
X:\sges-v3\glassfish\lib\jndi-properties.jar

jndi-properties.jar里边只有一个jndi.properties的文件
它只定义了初始化context的工厂类是哪个。
这跟具体的类没什么关系吧
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2009-12-18  
请恕小弟愚钝,MANIFEST.MF里这些信息的含义是什么?
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间: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这个文件的东西是否被其它技术所支持?
0 请登录后投票
   发表时间:2009-12-27  
怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。
0 请登录后投票
   发表时间:2009-12-27   最后修改:2009-12-27
独立思考 写道
怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。

你去试嘛。
用Eclipse和Netbeans都可以运行。
如果在命令提示符下使用:
java -cp c:/galssfish/lib/appserv-rt.jar Test

就抛出了Class Not Found的异常了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics