您可能在最后一篇Java EE 6 Galleria示例帖子中关注了我。 第一个是基本介绍。 第二个是关于在最新的GlassFish上运行它。 有人提到RedHat,我们应该研究将这个示例从GlassFish中移除。 很好;)感谢您的好主意。 这正是我们今天要做的。 我将把Galleria示例引入最新的WebLogic 12c。

制备

让自己有一些配置的心情。 您已经安装了最新的NetBeans 7.1 ,并且将在一秒钟内下载WebLogic 12c ZIP发行版。 下载wls1211_dev.zip后,将其放到所选位置并解压缩。 从现在开始,我们将这个文件夹称为%MW_HOME%文件夹。 打开命令行并在其中设置%JAVA_HOME%,%JAVA_VENDOR%和%MW_HOME%变量:

set JAVA_HOME=D:\jdk1.7.0_04
set MW_HOME=D:\temp\wls12zip
set JAVA_VENDOR=Sun

完成此步骤后,最后一步是在MW_HOME目录中运行安装配置脚本configure.cmd。 这是一次性的事情。

设置您的WebLogic域

接下来,我们需要一个WebLogic域。 打开一个新的命令行提示符。 通过运行%MW_HOME%\ wlserver \ server \ bin \ setWLSEnv.cmd脚本在当前Shell中设置环境。 执行%MW_HOME%\ wlserver \ common \ bin \ config.cmd,然后按照向导在您选择的文件夹(例如D:\ temp \ test-domain)中创建一个名为test-domain的基本WebLogic Server域。 输入您选择的用户名和密码(例如system / system1),然后单击向导,直到您在其下的“完成”按钮为止。 WebLogic需要Derby客户端jar文件才能配置和使用数据库。 将derbyclient-10.8.2.2.jar从m2存储库复制到test-domain \ lib文件夹。 现在,通过运行新创建的域目录中的startWebLogic.cmd,手动启动新创建的域。 导航到http:// localhost:7001 / console并使用上面的凭据登录,以验证一切是否正常运行。 导航到“服务>数据源”,然后从表上方选择“新建”按钮。 选择一个“通用数据源”并输入您选择的名称(例如GalleriaPool),然后输入jdbc / galleriaDS作为JNDI名称。 选择Derby作为数据库类型,然后单击“下一步”。 选择Derby的驱动程序(类型4),然后单击“下一步”和“下一步”,然后输入连接属性(数据库:GALLERIATEST,主机:localhost。用户名和密码:APP”,然后单击“下一步”。如果需要,可以单击单击顶部的“测试配置”按钮,并确保所有设置均以正确的方式进行。

接下来是最棘手的部分。 我们需要像为GlassFish配置的那样的JDBC领域。 这里的第一个区别是,我们实际上并没有创建一个新的领域,而是向可用的领域添加了一种身份验证机制。 WebLogic有一个令人讨厌的限制。 您可以配置任意多个安全领域,但在给定时间只能激活一个。 这让我停了一会儿,直到我从Michel Schildmeijer得到了小费(谢谢,顺便说一句!)。 导航到“安全领域”,然后从表中选择“ myrealm”。 切换到提供程序选项卡。 选择身份验证提供者表格上方的“新建”。 输入“ GalleriaAuthenticator”作为名称,然后从下拉框中选择“ SQLAuthenticator”作为类型。 单击确定。 选择GalleriaAuthenticator并设置控制标志:SUFFICIENT并保存。 之后,切换到“提供商特定”选项卡。 输入以下内容:

Data Source Name: GalleriaPool
Password Style Retained: unchecked
Password Algorithm: SHA-512
Password Style: SALTEDHASHED
SQL Get Users Password: SELECT PASSWORD FROM USERS WHERE USERID = ?
SQL Set User Password: UPDATE USERS SET PASSWORD = ? WHERE USERID = ?
SQL User Exists: SELECT USERID FROM USERS WHERE USERID = ?
SQL List Users: SELECT USERID FROM USERS WHERE USERID LIKE ?
SQL Create User: INSERT INTO USERS VALUES ( ? , ? )
SQL Remove User: DELETE FROM USERS WHERE USERID = ?
SQL List Groups: SELECT GROUPID FROM GROUPS WHERE GROUPID LIKE ?
SQL Group Exists: SELECT GROUPID  FROM GROUPS WHERE GROUPID  = ?
SQL Create Group: INSERT INTO GROUPS VALUES ( ? )
SQL Remove Group: DELETE FROM GROUPS WHERE GROUPID  = ?
SQL Is Member: SELECT USERID FROM USERS_GROUPS WHERE GROUPID  = ? AND USERID = ?
SQL List Member Groups: SELECT GROUPID  FROM USERS_GROUPS WHERE USERID  = ?
SQL List Group Members: SELECT USERID FROM USERS_GROUPS WHERE GROUPID = ? AND USERID LIKE ?
SQL Remove Group Memberships: DELETE FROM USERS_GROUPS WHERE GROUPID = ? OR GROUPID = ?
SQL Add Member To Group: INSERT INTO USERS_GROUPS VALUES( ?, ?)
SQL Remove Member From Group: DELETE FROM USERS_GROUPS WHERE GROUPID = ? AND USERID = ?
SQL Remove Group Member: DELETE FROM USERS_GROUPS WHERE GROUPID = ?
Descriptions Supported: unchecked

保存您的更改。 然后返回“提供商”标签。 单击“重新排序”按钮,然后将GalleriaAuthenticator推到列表顶部。 完成后单击“确定”,然后停止您的WebLogic实例。 您可以随时重新启动它。

配置您的项目

Java EE是可移植的。 对。 而且,您应该能够在不对WebLogic 12c进行任何更改的情况下运行相同的部署。 那是理论。 实际上,您将不得不接触部署。 因为WebLogic的Hibernate存在一些问题。 而且,与GlassFish相比,部署方面的问题要复杂得多。 首先,您必须创建一个“ galleria-ear \ src \ main \ application \ META-INF”文件夹。 将空白的weblogic-application.xml放入其中,并在其中放入以下代码:

<?xml version='1.0' encoding='UTF-8'?>
<weblogic-application xmlns="http://xmlns.oracle.com/weblogic/weblogic-application" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-application http://xmlns.oracle.com/weblogic/weblogic-application/1.4/weblogic-application.xsd"><prefer-application-packages><package-name>antlr.*</package-name></prefer-application-packages>
</weblogic-application>

这告诉WebLogic与服务器中已经存在的库相比,更喜欢应用程序打包的库。 让我们继续。 我们需要将Hibernate依赖项添加到耳朵。 使用GlassFish,我们跳过了这一步,因为我们在服务器上安装了Hibernate软件包。 开始了。 打开galleria-ear pom.xml并将以下内容添加到“依赖项”部分:

<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-core</artifactId><version>4.0.1.Final</version></dependency><dependency><groupId>org.hibernate</groupId><artifactId>hibernate-validator</artifactId><version>4.2.0.Final</version></dependency><dependency><groupId>org.jboss.logging</groupId><artifactId>jboss-logging</artifactId><version>3.1.0.CR2</version></dependency>

您还需要查看maven-ear-plugin并将以下内容添加到<configuration>:

<defaultLibBundleDir>lib</defaultLibBundleDir>

如果已经存在,请删除commons编解码器jarModule。 它没有问题,但已打包到ear / lib文件夹中,因此您可以跳过它。

接下来,导航到galleria-jsf项目并打开web.xml。 <login-config>不完整,应如下所示:

<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/Login.xhtml</form-login-page><form-error-page>/Login.xhtml</form-error-page></form-login-config></login-config>
<security-role><description>All registered Users belong to this Group</description><role-name>RegisteredUsers</role-name></security-role>

您还需要定义可能的角色,否则WebLogic安全性内容将开始抱怨。

将一个空白的weblogic.xml添加到galleria-jsf \ src \ main \ webapp \ WEB-INF文件夹中,并添加以下几行:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.4/weblogic-web-app.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment> <session-descriptor><timeout-secs>3600</timeout-secs><invalidation-interval-secs>60</invalidation-interval-secs><cookie-name>GalleriaCookie</cookie-name><cookie-max-age-secs>-1</cookie-max-age-secs><url-rewriting-enabled>false</url-rewriting-enabled></session-descriptor>
</weblogic-web-app>

我们在这里将web.xml角色映射到WebLogic角色。 您可能已经跳过了这个,但是我喜欢这种方式,所以您不会感到困惑。 session-descriptor元素负责JSESSION cookie名称。 如果您不进行更改,则会遇到登录用户登录管理控制台的麻烦。
继续执行galleria-ejb项目。 在“ galleria-ejb \ src \ main \ resources \ META-INF”文件夹中创建一个空白的weblogic-ejb-jar.xml。 将以下代码放入其中:

<?xml version="1.0" encoding="UTF-8"?>
<weblogic-ejb-jar xmlns="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-ejb-jar http://xmlns.oracle.com/weblogic/weblogic-ejb-jar/1.0/weblogic-ejb-jar.xsd"><security-role-assignment><role-name>RegisteredUsers</role-name><principal-name>RegisteredUsers</principal-name></security-role-assignment>
</weblogic-ejb-jar>

与web.xml / weblogic.xml相比,这还告诉WebLogic如何将ejb-jar.xml安全角色映射到WebLogic角色。 好的,打开persistence.xml并添加以下行:

<property name="hibernate.dialect" value="org.hibernate.dialect.DerbyDialect" /><property name="hibernate.transaction.jta.platform"value="org.hibernate.service.jta.platform.internal.WeblogicJtaPlatform" />

第一个明确选择用于休眠的Derby方言。 第二个告诉Hibernate在何处以及如何查找事务。 全做完了。 现在,您应该能够再次构建项目并进行部署。 使用管理控制台或NetBeans进行部署。 感谢您抽出宝贵时间关注这篇冗长的帖子。 希望对您有所帮助!

是否想知道启动和运行单元和集成测试所需的时间? 继续阅读!

是时候继续Vineet的Java EE 6 Galleria示例了。 经过一番介绍之后 ,GlassFish和WebLogic 12c部署的基本入门指南终于可以开始进行测试了。 由于两个原因,我在前面的文章中跳过了这一部分。 第一个显然是我想写一篇单独的文章。 第二个是需要做的工作才能在最新的GlassFish 3.1.2上启动并运行它。 Vineet和团队在几天前发布Arquillian GlassFish Remote Container CR3方面做得很出色,现在还涵盖了GlassFish 3.1.2。 是时候开始测试Galleria示例了。

你要测试什么

构建Galleria的目的是通过使用JUnit 4编写的单元测试和集成测试来实现全面的测试覆盖。EJB和域模型的单元测试和集成测试依赖于EJB 3.1容器API。 表示层的集成测试依赖于Arquillian项目及其Drone扩展(用于执行Selenium测试)。
请确保更新到Galleria项目的最新资源,因为Vineet已将Arquillian GlassFish容器更新为CR3,并将Selenium内容更新为支持最新的FireFox浏览器。

单元测试域层

域层的测试分为五类。 前三个(Bean验证测试,相互注册验证测试,构造函数测试,等于和哈希码方法)涵盖了几乎所有基于JPA的应用程序的基本需求。 如果您沿着galleria-ejb \ src \ test源代码漫步,则可以在info.galleria.domain包中看到它们。 每个域对象都包含一个套件类,该套件类包括所有三种单元测试。

让我们从查看Bean验证测试开始。 与JavaBeans属性中的getter和setter关联的行为非常容易验证。 所有需要做的就是首先调用setter,然后调用getter,并验证getter返回的实例是否等于传递给setter的实例。 该项目使用
为此,可以使用BeanVerifier类(在galleria-ejb模块的src / tests / java根目录下)。 AlbumBeanVerifier测试只是一个参数化测试,它测试每个属性。 在这种情况下,唯一的例外是coverPhoto属性,该属性具有简单的JavaBean模式之外的特殊行为。

列表的下一个是对构造函数,equals和hashcode方法的测试。 仅通过创建类的新实例,同时声明将由构造函数设置的属性的有效性来测试域实体的构造函数。 equals和hashcode方法通过使用EqualsVerifier项目中的EqualsVerifier类进行验证。

最基本的测试的最后一类是相互注册 (PDF)验证测试。 您只想检查对实体之间关系的修改是否实际上导致对父属性和子属性的更改。 有关实现的更多详细信息,请参见综合Wiki页面 。 所有这些都在单元测试阶段执行,并被** / * Suite.java类覆盖。

除了基本测试,您还会发现针对基本测试模型不足或不适合的特定情况编写的一次性测试。 在这种情况下,一次性测试将通过手写断言来验证这种行为。 您可以在同一包的** / * Tests.java类中找到它们。

域层测试以JPA存储库测试结束。 * RepositoryTest.java类中的每个类都会测试已处理域对象的CRUD行为。 通用的AbstractRepositoryTest会处理测试数据,并在每次测试运行后重置数据库。 数据库创建本身由maven-dbdeploy-plugin处理。 查看pom.xml,您可以看到它绑定到两个Maven生命周期阶段(流程测试资源和集成前测试),以确保两次被调用。 第一次是在单元测试之前,第二次是在集成测试之前(请在下面进行比较)。

所有这些单元测试都是通过surefire执行的。 如果您在galleria-ejb项目上发布了mvn测试,则可以看到总共138个测试通过了。 这是四个** / * Suite测试,四个** / * RepositoryTest和两个附加测试。 如果您简要查看控制台输出,就会发现这一切都是在Java SE环境中发生的。 到目前为止,尚未进行任何容器测试。

集成测试域层

因此,这实际上仅涵盖了每个人都应该做并且可能知道的基础知识。 进行集成测试是另一回事。 这是通过** / * IntegrationSuite测试完成的。 该名称故意不使用默认命名约定,以防止它们在Maven的单元测试阶段中运行。 要进入Maven的集成测试阶段,Galleria示例将使用Maven故障安全插件 。 您可以在info.galleria.service.ejb包中找到集成测试套件。 AbstractIntegrationTest注意处理单元测试的测试数据(与AbstractRepositoryTest相当)。 该套件为每个域对象都包含一个* ServiceIntegrationTest。 您可以遍历每个* IntegrationTest中的单个测试,并了解这里发生的事情。 ServicesIntegrationSuite通过使用AbstractIntegrationTest.startup();来启动和停止EJBContainer。 这种方法比较不明显且简单:

logger.info("Starting the embedded container.");
Map<String, Object> props = new HashMap<String, Object>();
props.put("org.glassfish.ejb.embedded.glassfish.installation.root","./glassfish-integrationtest-install/glassfish");
container = EJBContainer.createEJBContainer(props);
context = container.getContext();
datasource = (DataSource) context.lookup("jdbc/galleriaDS");

这里最重要的一点是,可嵌入的EJBContainer是通过现有的GlassFish域配置的,该域可以直接在galleria-ejb \ glassfish-integrationtest-install文件夹中找到。 如果查看glassfish \ domains \ domain1 \ config \ domain.xml,可以看到,所有配置都已经为您完成。 但是,部署来自何处? 这很容易回答。 默认情况下,可嵌入的EJBContainer在您的类路径中搜索ejb-jar jarfiles或文件夹,然后将其部署。 如果要从EJBContainer中看到更多详细输出,则必须在src / test / resources中提供一个customlogging.properties文件,并在其中添加一些简单的行:

handlers=java.util.logging.ConsoleHandler
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.ConsoleHandler.level=FINEST
#add some more packages if you need them
info.galleria.service.ejb.level=FINE

将以下内容添加到pom.xml的maven-failsafe-plugin配置部分:

<systemPropertyVariables>
<java.util.logging.config.file>${basedir}/src/test/resources/customlogging.
properties</java.util.logging.config.file>
</systemPropertyVariables>

集成测试应成功完成,并且maven应打印与以下内容类似的内容:

Tests run: 49, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 61.726 sec

注意,集成测试花费的时间比正常的单元测试长得多。 这一点也不奇怪,您应该确保仅在需要时才执行它们,以免影响开发进度。

集成测试表示层

域层覆盖了测试。 缺少的是表示层。 您可以在galleria-jsf项目中找到表示层测试。 首先检查pom.xml。 您可以在这里找到几个新的依赖项。 即Arquillian,Selenium和Drone。

首先再次进行一些配置。 向下滚动到配置文件部分,您可以看到一个集成测试配置文件,该配置文件使用了maven-glassfish-plugin并控制了一个配置有几个属性的容器。 将定义添加到pom顶部的properties部分:

<galleria.glassfish.testDomain.user>admin</galleria.glassfish.
testDomain.user>
<galleria.glassfish.testDomain.passwordFile>D:/glassfish-3.1.2-b22/glassfish3/glassfish/domains/
test-domain/config/local-password</galleria.glassfish.testDomain.passwordFile>
<galleria.glassfish.testDomain.glassfishDirectory>D:/glassfish-3.1.2-b22/glassfish3/glassfish/</galleria.glassfish.testDomain.glassfishDirectory>
<galleria.glassfish.testDomain.domainName>test-domain</galleria.glassfish.testDomain.domainName>
<galleria.glassfish.testDomain.adminPort>10048</galleria.glassfish.testDomain.adminPort>
<galleria.glassfish.testDomain.httpPort>10080</galleria.glassfish.testDomain.httpPort>
<galleria.glassfish.testDomain.httpsPort>10081</galleria.glassfish.testDomain.httpsPort>

您可以按照第2部分中所述从galleria-ejb项目的开发配置文件中复制它。 您还应该已经拥有该域。 接下来是maven-surefire-plugin,您可以看到它遵循了galleria-ejb项目相同的约定。 但是查看测试类,您会发现这里没有单个单元测试。 因此,您可以直接转到处理集成测试的maven-failsafe-plugin。 只有一个AllPagesIntegrationTest涵盖了完整的测试。 让我们去那里。

这是一个Arquillian Testcase,它作为客户端针对远程实例执行。 除了部署的定义(@Deployment),您还会再次看到几个setUp和tearDown方法,它们可以进行一些初始化和销毁​​。 一件事必须单独处理。 您还会在其中看到一个writeCoverageData()方法,该方法显然连接到某种Socket并从中读取数据。 这是JaCoCo (Java代码覆盖率库)钩子,可以产生测试的覆盖率数据集。 要进行此工作,您将必须下载该软件包并将其解压缩到您选择的位置。 接下来转到GlassFish test-domain \ config \ domain.xml并将其打开。 找到服务器配置– java-config并在其中添加以下内容:

<jvm-options>-javaagent:D:\path\to\jacoco-0.5.6.201201232323\lib\jacocoagent.jar=output=tcpserver</jvm-options>

这将启用GlassFish的覆盖代理。 现在完成所有配置。 返回到NetBeans,选择集成测试配置文件(在NetBeans中,您可以通过从图标区域中的小锤子旁边的下拉框中选择条目,或者使用-Pintegration-test作为maven命令行开关来执行此操作。输出告诉您,GlassFish域已启动,并且info.galleria.view.AllPagesIntegrationTest正在运行,请注意,在此运行期间将弹出FireFox实例,而Arquillian Drone扩展正在驱动您的Selenium测试。

如果您以前从未看过,以这种方式远程控制的浏览器看起来很奇怪。 如果一切正常,您现在应该在控制台输出中看到以下内容:

Tests run: 30, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 138.014 sec

如果您在浏览器中使用的语言环境不是en,则测试可能会完全失败。 因此,还需要配置Drone以支持它 。 Drone允许您通过arquillian.xml指定Firefox配置文件。 您可以创建一个Firefox配置文件,该配置文件配置为发送以en / en-US作为值的接受语言标头。

要创建新的配置文件,请使用以下命令启动Firefox配置文件管理器(您可能需要关闭所有正在运行的实例):firefox -profilemanager(在Windows上,您需要执行命令“ d:\ complete \ path \ to \ firefox.exe” “ -profilemanager)在cmd外壳中。 记住创建此配置文件的光盘上的位置–以后将需要它。 要配置创建的配置文件,在Firefox中,转到选项(菜单)->内容(选项卡)->语言(字段集)->选择添加英语(并将其移至顶部,作为首选语言)。 现在浏览Galleria-jsf \ src \ test \ resources \ arquillian.xml,然后可以添加一个属性:

<extension qualifier="webdriver">
<property name="implementationClass">org.openqa.selenium.firefox.FirefoxDriver</property>
<property name="firefoxProfile">location of the Firefox profile for English</property>
</extension>

现在全部完成。 您现在应该可以运行完整的清理和构建过程,而没有任何测试失败。 一个大的“绿色酒吧” :)

参考: Java EE 6示例–在WebLogic 12上运行Galleria –第3部分 , Java EE 6示例–测试Galleria –第4部分,来自Markus Eisele博客上的JCG合作伙伴 Markus Eisele。

翻译自: https://www.javacodegeeks.com/2012/04/java-ee-6-example-galleria-part-2.html

Java EE 6示例– Galleria第2部分相关推荐

  1. Java EE 6示例– Galleria

    您是否一直想知道在哪里可以找到使用Java EE 6构建的良好端到端示例? 我有. 您在网上找到的大多数东西都是非常基础的,不能解决现实世界中的问题. Java EE 6教程就是这样. 所有其他内容, ...

  2. Java EE 6示例– Galleria –第3部分

    关于Galleria示例的先前文章( 第1 部分 | 第2部分 | 第3部分 | 第4部分 )指导您完成基础知识以及对GlassFish和WebLogic的初始部署. 从今天开始,我尝试在其中添加一些 ...

  3. 后端 java ee_刷新器-Java EE 7后端十大功能

    后端 java ee 这是我的小型Java EE 7复习系列的第二部分. 在进行了简要概述的第一篇介绍之后,我决定请Arjan Tijms撰写有关Java EE 7中他最喜欢的后端新功能的信息.如果您 ...

  4. java-ee-api_刷新器-Java EE 7概览

    java-ee-api 随着红帽JBoss企业应用平台7(EAP 7)的迫在眉睫,甚至WebLogic Server刚刚获得Java EE 7认证,我认为现在应该是时候对Java Enterprise ...

  5. 黑马ee在职进阶视频_进阶– Java EE 7前端5强

    黑马ee在职进阶视频 系列继续. 在初步概述和Arjan关于最重要的后端功能的文章之后 ,我现在非常高兴让Ed Burns( @edburns )使用他最喜欢的Java EE 7前端功能完成本系列. ...

  6. jboss eap 7_EAP 7 Alpha和Java EE 7入门

    jboss eap 7 红帽JBoss企业应用程序平台7(JBoss EAP 7)是基于开放标准构建并符合Java Enterprise Edition 7规范的中间件平台. 它建立在WildFly等 ...

  7. openshift使用_OpenShift v3:使用WildFly和MySQL的Java EE 7入门

    openshift使用 OpenShift是Red Hat的开源PaaS平台. OpenShift v3 (将于今年发布)将提供使用Docker和Kubernetes运行微服务的整体体验. 以经典的R ...

  8. java学习里程碑_记录您的里程和社区运行情况:Java EE 7真实体验

    java学习里程碑 miles2run.org是跟踪跑步活动并与亲朋好友共享的简便方法. 可以创建然后跟踪基于天或基于距离的目标. 它还允许创建社区运行目标,并使多个跑步者参与并跟踪他们朝着该目标的活 ...

  9. java与java ee_计划Java EE 7批处理作业

    java与java ee Java EE 7添加了使用JSR 352以标准方式执行批处理作业的功能. <job id="myJob" xmlns="http://x ...

最新文章

  1. 用户态下init进程1的执行
  2. ARM架構的Linux內核的空間佈局
  3. uoj 118 赴京赶考
  4. iptables日志探秘
  5. server2012 r2搭建双DNS
  6. webpack 工作方式
  7. java.lang.NoSuchFieldError: No instance field
  8. #react 之ant design Pro 学习研究#----启动项目
  9. Essential Phone PH1原生系统常见问题以及解答
  10. Java程序性能优化16
  11. oracle登录卡,【Oracle连接问题】关于windows xp3上oracle连接登录卡住的问题
  12. android graphics,Android graphics值Bitmap
  13. 分子动力学模拟学习3-Gromacs数据处理
  14. 马尔可夫决策过程和贝尔曼方程
  15. Android Studio生成二维码
  16. 怎么把图片转PDF格式?转换方法分享
  17. 对字符串进行信道编码C语言,【单选题】PCM编码主要用于实现模拟信号数字化,它属于( ) A. 信道编码 B. 纠错编码 C. 信源编码 D. 压缩编码...
  18. 相关系数-excel-CORREL()
  19. java四则运算思路_java四则运算
  20. 科技云报道:数字化技术,正在改写企业出海的游戏规则

热门文章

  1. 纹理和基元_通过粘性仙人掌基元进行延迟加载和缓存
  2. gradle maven_将工件从Gradle自动提升到Maven Central
  3. 排队论游乐场的游乐项目_外汇游乐场
  4. java jax-rs_在Java EE 7和WildFly中使用Bean验证来验证JAX-RS资源数据
  5. 使用Gradle构建Monorepo项目
  6. 如何在Java中使用重复项查找整数数组中的K个缺失数字?
  7. mockito 静态方法_Mockito –带有注释和静态方法的额外接口
  8. CDI中的事务异常处理
  9. apache apollo_Apache Apollo REST API
  10. javacv 人脸检测_使用JavaCV进行手和手指检测