`
throne212
  • 浏览: 42283 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Glassfish v3 jndi的一点发现

    博客分类:
  • java
阅读更多

今天兴起,想玩一玩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的改进吗?

   真实奇特!

 

 

 

分享到:
评论
10 楼 lancezhcj 2010-11-01  
幸运不总常在,我在glassfish3的jms资源中定义了连接工厂,程序运行中lookup(jndi的名字),总是说找不到
9 楼 throne212 2009-12-27  
独立思考 写道
怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。

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

就抛出了Class Not Found的异常了
8 楼 独立思考 2009-12-27  
怎么可能不能运行呢,这个menifest.mf的格式是sun规定的。。。
7 楼 throne212 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这个文件的东西是否被其它技术所支持?
6 楼 独立思考 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
5 楼 throne212 2009-12-18  
请恕小弟愚钝,MANIFEST.MF里这些信息的含义是什么?
4 楼 独立思考 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
3 楼 throne212 2009-12-17  
mikewang 写道
X:\sges-v3\glassfish\lib\jndi-properties.jar

jndi-properties.jar里边只有一个jndi.properties的文件
它只定义了初始化context的工厂类是哪个。
这跟具体的类没什么关系吧
2 楼 mikewang 2009-12-17  
X:\sges-v3\glassfish\lib\jndi-properties.jar
1 楼 独立思考 2009-12-17  
MANIFEST.MF

相关推荐

    glassfish配置jndi(DB2数据库)

    在IT行业中,Glassfish是一款广泛使用的开源应用服务器,它支持多种Java EE标准,包括JNDI(Java Naming and Directory Interface)。JNDI是Java平台的一个重要特性,它为应用程序提供了一个统一的接口来查找和访问...

    Sun Glassfish v3 Administration 2009/12 PDF

    ### Glassfish v3 管理与配置指南 #### 标题解读 - **"Sun Glassfish v3 Administration 2009/12 PDF"**:此标题指明了文档的主题是关于Sun Microsystems(现已被Oracle收购)的Glassfish v3应用服务器的管理与配置...

    jmaki development with sun glassfish v3

    ### jMaki Development with Sun GlassFish V3:深入解析与应用实践 #### 一、概述 jMaki 是一种用于创建动态网页的轻量级框架,它为开发人员提供了简化的方式来构建基于 Java 的 Web 应用程序。本文档旨在介绍...

    GlassFish v3

    ### GlassFish v3知识点概述 #### 一、GlassFish v3简介 - **定义与背景**:GlassFish v3是一款由Sun Microsystems开发的企业级应用服务器,它基于Java平台标准(Java Platform, Enterprise Edition,简称Java EE...

    glassfish v3 集群搭建完全手册(自己写的教程)

    《Glassfish集群搭建完全手册》 在IT领域中,服务器集群是提高系统可用性和负载均衡的重要手段。Glassfish,作为一款开源的应用服务器,其集群功能的配置却常常被忽视或处理得不够详尽。本手册旨在弥补这一空缺,...

    Demo - EhCache Distributed Caching With Terracotta in GlassFish v3

    Demo of ehCache distributed caching with terracotta in glassFish v3 可以参考:http://blog.csdn.net/guobin0719/archive/2011/04/25/6361940.aspx

    glassfish v3 application server (I)

    引起鱼猫之争的东东 可与tomcat 媲美,看好它

    glassfish-v3-windows.part1

    glassfish-v3-windows.part1

    eclipse与glassfish3.1.1使用配置-连接池配置-JNDI配置[归纳].pdf

    本文档旨在指导读者如何在 Eclipse 中配置 GlassFish 3.1.1,实现连接池配置和 JNDI 配置。同时,也会解决在部署过程中可能出现的异常。 一、GlassFish 3.1.1 简介 GlassFish 是一个开源的 Java EE 应用服务器,由 ...

    glassfish v3 application server (II)

    引起鱼猫之争的东东 可与tomcat 媲美,看好它

    glassfish-v3-windows.part4

    glassfish-v3-windows.part4

    glassfish-v3-windows.part2

    glassfish-v3-windows.part2

    GlassfishV3参考手册

    Oracle Glassfish V3是一款开源的应用服务器,它是Java EE(企业版)平台的实现,提供了运行企业级Java应用程序的环境。本参考手册是Oracle官方提供的详细资料,是学习和理解Glassfish V3功能、配置和管理的重要资源...

    Glassfish关于tomcat的文档

    当前版本——GlassFish v3 Prelude,采用了一个模块化的架构设计。 #### GlassFish Web容器相对于Tomcat的优势 ##### 易用性和生产力 - **模块化设计**:GlassFish采用了高度模块化的设计,这使得开发者可以轻松...

    glassfish集群搭建手册

    标题《Glassfish集群搭建手册》指的是利用Oracle提供的Glassfish应用服务器软件进行集群配置的详细指南。此手册涵盖了在不同场景下通过图形化界面和命令行方式搭建集群的整个过程,并且描述了如何配置集群环境以支持...

    glassfish安装配置文档

    GlassFish 安装配置文档 GlassFish 是一个基于 Java 的开源应用服务器,提供了一个强大且灵活的平台来部署和管理基于 Java 的应用程序。本文档将指导 readers 通过安装和配置 GlassFish 服务器,并将其与 Eclipse ...

    glassfish建立连接池

    GlassFish 连接池配置指南 GlassFish 是一个功能强大且流行的Java EE 应用服务器,它提供了强大的连接池机制,使得应用程序可以高效地访问数据库。下面,我们将介绍如何在 GlassFish 管理员界面中配置连接池,特别...

Global site tag (gtag.js) - Google Analytics