Ejb3 JNDI名称与openEJB&行家

时间:2015-09-17 08:09:42

标签: maven-2 ejb-3.0 java-6 openejb

我的maven 2项目(在windows下)简单包含

ejb

package demo;

import javax.ejb.Stateless;

@Stateless
public class MyEjb
{
    public String sayHello()
    {
        return "Hello World from MyEjb";
    }
}

测试类

package demo;

import java.util.Properties;

import javax.naming.InitialContext;

public class TestMyEjb
{

    public static void main(String[] args) throws Exception
    {
        Properties p = new Properties();
p.put("java.naming.factory.initial","org.apache.openejb.client.LocalInitialContextFactory");
        p.put("openejb.jndiname.format", "{ejbName}");  
        p.put("openejb.descriptors.output", "true");  
        p.put("openejb.validation.output.level", "verbose");

        InitialContext ctx = new InitialContext(p);

        MyEjb myBean = (MyEjb) ctx.lookup("MyEjb");

        System.out.println(myBean.sayHello());
    } 

}

和我的pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<modelVersion>4.0.0</modelVersion>

<groupId>be.lab</groupId>
<artifactId>demo</artifactId>
<version>1.0</version>

<name>demo</name>

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

<dependencies>

    <dependency>
        <groupId>org.apache.openejb</groupId>
        <artifactId>openejb-core</artifactId>
        <version>4.7.2</version>
    </dependency>

    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

<build>

    <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.18.1</version>
            <configuration>
                <skipTests>true</skipTests>
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.4.1</version>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
              <execution>
                <id>make-assembly</id>
                <phase>package</phase> 
                <goals>
                    <goal>single</goal>
                </goals>
              </execution>
            </executions>
        </plugin>           

    </plugins>

</build>

在eclispe下运行我的测试类工作正常。

...
INFO - Using 'openejb.jndiname.format={ejbName}'
INFO - Jndi(name=MyEjb) --> Ejb(deployment-id=MyEjb)
...
Hello World from MyEjb

但是从命令行运行它是行不通的。

java -cp target\demo-1.0-jar-with-dependencies.jar demo.TestMyEjb
...
INFOS - Using 'openejb.jndiname.format={deploymentId}{interfaceType.openejbLegacyName}'
...
INFOS - Jndi(name=MyEjbLocalBean) --> Ejb(deployment-id=MyEjb)
...
Exception in thread "main" javax.naming.NameNotFoundException: Name "MyEjb" not found.
    at org.apache.openejb.core.ivm.naming.IvmContext.federate(IvmContext.java:199)
    at org.apache.openejb.core.ivm.naming.IvmContext.lookup(IvmContext.java:151)
    at org.apache.openejb.core.ivm.naming.ContextWrapper.lookup(ContextWrapper.java:137)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at demo.TestMyEjb.main(TestMyEjb.java:20)

似乎没有使用openejb.jndiname.format。为什么?

1 个答案:

答案 0 :(得分:0)

尝试推杆 java.naming.provider.url的本地主机= 在你的jndi财产