http://maven.glassfish.org/content/groups/glassfish/看起来应该是GlassFish的官方Maven存储库,但它目前只承载了glassfish-embedded-all的3.1.1-b05版本(参见http:/ /maven.glassfish.org/content/groups/glassfish/org/glassfish/extras/glassfish-embedded-all/).
http://download.java.net/maven/glassfish/org/glassfish/extras/与Embedded GlassFish的网站(Embedded Jars)相关联.它看起来不像官方的Maven存储库,但最多可容纳3.1.1-b11(在http://download.java.net/maven/glassfish/org/glassfish/extras/glassfish-embedded-all/).
所以问题是哪个是可靠的存储库来获取嵌入式GlassFish的Maven依赖项.
我试图运行使用maven-embedded-glassfish-plugin嵌入的ActiveMQ glassfish.
我已经单独完成了以下教程,所以我知道基础知识.目标是在一次点击中建立一个设置,避免在svn中使用3pp库.
1 http://www.hascode.com/2011/09/java-ee-6-development-using-the-maven-embedded-glassfish-plugin/
2 http://javadude.wordpress.com/2011/07/21/glassfish-v3-1-running-embedded-activemq-for-jms-part-1/
#2的项目设置从现在开始用作起点,我将尝试合并#1中的步骤
我已经设置了glassfish-resources.xml,希望它能从glassfish管理控制台执行配置教程1.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<resource-adapter-config resource-adapter-name="activemq-rar-5.6.0" thread-pool-ids="thread-pool-1">
<property name="ServerUrl" value="vm://localhost:61616"></property>
<property name="BrokerXmlConfig" value="broker:(tcp://0.0.0.0:61616)"></property>
</resource-adapter-config>
<connector-resource enabled="true" jndi-name="amqres"
object-type="user" pool-name="amqpool">
</connector-resource>
<connector-connection-pool
connection-definition-name="javax.jms.ConnectionFactory"
fail-all-connections="false" idle-timeout-in-seconds="300"
is-connection-validation-required="false" max-pool-size="32"
max-wait-time-in-millis="60000" name="amqpool" pool-resize-quantity="2"
resource-adapter-name="activemq-rar-5.6.0" steady-pool-size="2" />
<admin-object-resource res-adapter="activemq-rar-5.6.0"
res-type="javax.jms.Queue" jndi-name="amqmsg"></admin-object-resource>
</resources>
Run Code Online (Sandbox Code Playgroud)
添加到pom.xml
<dependencies>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-rar</artifactId>
<version>5.6.0</version>
<type>rar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.activemq</groupId>
<artifactId>activemq-core</artifactId>
<version>5.6.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)
Q1:如何加载glassfish-resources.xml?我应该使用maven admin命令还是将其放在某些META-INF中?编辑:看起来像是在web-inf如果是war和meta-inf如果是ejb-jar
Q2:不完全确定下一步是什么.#1让我将activemq和log4j库复制到GLASSFISH_HOME/glassfish/lib到目前为止我只在pom.xml中添加了依赖项,这里的等价物是什么?
问题3:还需要部署Rar.如何部署多个应用程序?
我正在尝试maven install在pom 上执行,结果显示:
坟墓:SEC5054:证书已过期
测试执行开始后就会出现此结果.我一直在谷歌搜索这个问题,但我只找到了与真正的glassfish应用服务器相关的解决方案.他们建议从他们所在的文件夹中删除违规证书等等(我看到的页面大多是这样的)或者"unjar"glassfish-embedded来删除认证,然后再次将其打包.
请注意,我正在执行maven install应用程序服务器上的实际部署,而不是实际部署.这就是为什么我不能接受许多博客给出的建议
pom包含以下依赖项:
<dependencies>
<dependency>
<groupId>org.glassfish.main.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1.2.2</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<version>1.0.0.Final</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-embedded-3.1</artifactId>
<version>1.0.0.CR3</version>
<scope>test</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这个问题是关于Java EE 6,使用glassfish v3 embedded-all.
我有一个单元测试,使用EJBContainer来测试我的无状态EJB.问题是我在使用JNDI查找EJB(远程)时遇到问题:
setup() {
ctx = EJBContainer.createEJBContainer().getContext();
}
...
test() {
BookService bookService = (BookService)ctx.lookup("java:global/BookServiceEJB!com.something.service.BookService");
...
}
@Stateless
public class BookServiceEJB implements BookService {
...
}
@Remote
public interface BookService {
...
}
Run Code Online (Sandbox Code Playgroud)
给出例外:
javax.naming.NamingException: Lookup failed for 'java:global/BookServiceEJB!com.something.service.BookService' in SerialContext [Root exception is javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found]
...
caused by: javax.naming.NameNotFoundException: BookServiceEJB!com.something.service.BookService not found
Run Code Online (Sandbox Code Playgroud)
我尝试了几个JNDI资源路径:
例如
java:global/BookServiceEJB
java:global/BookService
Run Code Online (Sandbox Code Playgroud)
甚至:
java:global/BookShelf-1.0-SNAPSHOT/BookServiceEJB
Run Code Online (Sandbox Code Playgroud)
等等...
没有用
我没有配置任何xml部署文件,只有persistence.xmlMETA-INF.
测试使用maven surefire: …
我正在使用Embedded Glassfish用Arquillian进行一些In-Container-Tests.现在,当我的测试失败时,我总是从那些混杂着Arquillian特定内容的测试中获得堆栈跟踪.但关于失败测试的真正原因是什么的信息很少.使用常规Glassfish,我可以检查server.log以获取更多信息.不幸的是,Embedded Glassfish似乎没有提供Server.log.我还查看了由Arquillian/Embedded Glassfish创建的临时目录,但它不包含任何日志文件.
如何在Embedded Glassfish中激活日志记录?
顺便说一下,我的pom中有以下依赖项:
<dependencies>
<dependency>
<groupId>org.jboss.arquillian.container</groupId>
<artifactId>arquillian-glassfish-embedded-3</artifactId>
<version>1.0.0.Alpha4</version>
</dependency>
<dependency>
<groupId>org.glassfish.extras</groupId>
<artifactId>glassfish-embedded-all</artifactId>
<version>3.1-b06</version>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-testng</artifactId>
<version>1.0.0.Alpha4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>5.13.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud) 我正在尝试按照这种方法为嵌入式glassfish创建数据源.教程和我的代码之间唯一的重要区别是我使用官方maven插件和embedded-glassfish:run目标运行服务器.
pom文件中的JDBC驱动程序存在依赖关系:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.155</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
和我的 glassfish-resources.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE resources PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Resource Definitions//EN" "http://glassfish.org/dtds/glassfish-resources_1_5.dtd">
<resources>
<jdbc-resource enabled="true" jndi-name="jdbc/myDatasource" object-type="user" pool-name="connectionPool">
<description/>
</jdbc-resource>
<jdbc-connection-pool datasource-classname="org.h2.jdbcx.JdbcDataSource" name="connectionPool" res-type="javax.sql.DataSource">
<property name="URL" value="jdbc:h2:~/Documents/Projetos/DBs/h2/glassfish/glassfish;AUTO_SERVER=TRUE;MVCC=TRUE"/>
<property name="User" value="sa"/>
<property name="Password" value=""/>
<property name="driverClass" value="org.h2.Driver"/>
</jdbc-connection-pool>
</resources>
Run Code Online (Sandbox Code Playgroud)
使用本地glassfish服务器运行良好.但嵌入式实例并不幸运:
03/06/2011 19:26:31 com.sun.enterprise.v3.server.ApplicationLifecycle deploy GRAVE:无效资源:jdbc/myDatasource_ pm java.lang.RuntimeException:无效资源: com.sun.enterprise中的jdbc/myDatasource _pm位于org.glassfish.persistence.common.PersistenceHelper.lookupPMResource(PersistenceHelper.java:63)的com.sun.enterprise.connectors.ConnectorRuntime.lookupPMResource(ConnectorRuntime.java:468)中的.connectors.ConnectorRuntime.lookupDataSourceInDAS(ConnectorRuntime.java:539) )org.glassfish.persistence.jpa.ProviderContainerContractInfoBase.lookupDataSource(ProviderContainerContractInfoBase.java:71)at
我很无能......任何人都可以对此有所了解吗?
我是比较新的JAX-RS,JPA,GlassFish的,Java DB的,和NetBeans,我想编写单元测试我的代码.[版本号在底部.]但是,我坚持从哪里开始.我已经做了很多搜索,但我还没有清楚地了解如何设置我的代码的嵌入式测试.我正在使用NetBeans,但我的问题很笼统.我希望我能更清楚地形成我的问题,但这是我能做的最好的事情.到目前为止,我已经找到了以下可能的部分(更像是此时的提示).
o我想在没有Maven的情况下进行设置,但这意味着我必须手动安装嵌入式jar.问:我在哪里可以找到它们?
o创建指定GlassFish和Java DB嵌入版本的config xml文件版本(glassfish-resources.xml和persistence.xml).问:但是,您如何告诉NetBeans使用它们进行测试而不是依赖于已安装版本的生产?
我认为persistence.xml看起来像这样(从使用嵌入式德比的hibernate):
<property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
<property name="javax.persistence.jdbc.url" value="jdbc:derby:test"/>
<property name="javax.persistence.jdbc.user" value="root"/>
<property name="javax.persistence.jdbc.password" value="root"/>
Run Code Online (Sandbox Code Playgroud)
o创建自定义Glassfish域配置文件(Embedded GlassFish忽略Maven测试资源).问:这应该是什么样的?我从使用NetBeans安装创建的默认domain1中获取了domain.xml,但它有很多内容.
o一旦我的项目可以访问嵌入的文件,并且它被配置为使用它们,我的JUnit线束应该是什么样的?http://jersey.java.net/nonav/documentation/latest/client-api.html#d4e759说:
protected void setUp() throws Exception {
...
glassfish = new GlassFish(BASE_URI.getPort());
ScatteredWar war = new ScatteredWar(...);
glassfish.deploy(war);
...
Run Code Online (Sandbox Code Playgroud)
但是,我也看到提到的EJBContainer,例如,(从http://docs.oracle.com/javaee/6/tutorial/doc/gkcqz.html):
@BeforeClass
public static void initContainer() throws Exception {
ec = EJBContainer.createEJBContainer(); ctx = ec.getContext();
}
Run Code Online (Sandbox Code Playgroud)
o我正在使用JPA,所以我需要访问PersistenceContext/EntityManager.目前我通过以下方式查询:
new InitialContext().lookup("java:module/<jax-rs resource name>");
Run Code Online (Sandbox Code Playgroud)
但我也看到了:
emf = Persistence.createEntityManagerFactory("chapter02PU");
Run Code Online (Sandbox Code Playgroud)
问:什么是正确的方法来掌握这个?
我将衷心感谢您的帮助.
我很难理解延迟获取,因为我在书中读到它时我不工作,他们说在延迟获取中 jpa 只会在通过 geters 访问实体时加载实体,所以我创建了一个 Arquillian 项目来测试这个概念但它不起作用。这是我的两个实体
人
package com.actionbazaar.model;
@Entity
@TableGenerator(
initialValue = 5,
name = "PERSON_SEQ",
table = "PERSON_SEQ_TABLE",
pkColumnName = "SEQ_NAME",
pkColumnValue = "PERSON",
valueColumnName = "SEQ_VALUE")
public class Person implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String fname;
private String lname;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "owner", cascade = CascadeType.PERSIST)
List<Address> addresses;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
地址
@Entity
public class Address implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private …Run Code Online (Sandbox Code Playgroud) 我们在测试环境中使用嵌入式 Glassfish 服务器。我们使用org.glassfish.embeddable.CommandRunner界面来执行管理任务(即,我们asadmin使用标准的独立 Glassfish 服务器执行的操作)
例子:
GlassFish glassfish = GlassFishRuntime.bootstrap( bp ).newGlassFish( gfp );
CommandRunner commandRunner = glassfish.getService( CommandRunner.class );
commandRunner.run(
"create-jms-resource",
"--restype",
"javax.jms.Queue",
"SOME_QUEUE_NAME"
);
Run Code Online (Sandbox Code Playgroud)
现在在命令行上,我可以使用imqcmd. 例如
imqcmd -u admin -passfile ../password.txt update dst -n SOME_QUEUE_NAME -t q -o maxBytesPerMsg=-1 -f
Run Code Online (Sandbox Code Playgroud)
有没有办法通过嵌入式 Glassfish 服务器实现相同的目标?
我有一个@RolesAllowed受保护的@Stateless EJB,我正在尝试使用嵌入式GlassFish容器进行JUnit-4测试.我克服的最新障碍是用于持久性单元和安全领域的GlassFish域配置.
Map<String, Object> properties = new HashMap<String, Object>();
properties.put(EJBContainer.MODULES, new File("build/classes"));
properties.put("org.glassfish.ejb.embedded.glassfish.configuration.file",
"test-resource/domain.xml");
ec = javax.ejb.embeddable.EJBContainer.createEJBContainer(properties);
Run Code Online (Sandbox Code Playgroud)
嵌入式GlassFish启动,我的应用程序部署,一切似乎按预期工作,直到我用@RolesAllowed注释调用EJB方法.
javax.ejb.AccessLocalException: Client not authorized for this invocation
Run Code Online (Sandbox Code Playgroud)
出于某种原因,我无法弄清楚如何设置容器的角色来通过安全检查.我错过了什么?