当前位置: 首页 > news >正文

psdw做网站简述电子商务网站开发的基本原则

psdw做网站,简述电子商务网站开发的基本原则,网站 设计 案例 简单,手机网站后台知道MongoDB和Java EE #xff0c;但是您不知道如何将两者集成在一起#xff1f; 您是否阅读了很多有关该主题的内容#xff0c;但没有找到适合该目的的解决方案#xff1f; 这个入门项目适合您#xff1a; 您将学习如何以一种时尚的方式使用MongoDB和Java EE #xff0… 知道MongoDB和Java EE 但是您不知道如何将两者集成在一起 您是否阅读了很多有关该主题的内容但没有找到适合该目的的解决方案 这个入门项目适合您 您将学习如何以一种时尚的方式使用MongoDB和Java EE 而不必依赖于Spring Data MongoDB框架但具有“相似的”基本功能。 比Maven原型更好的唯一事情是可以使用已设置的所有内容进行存储的存储库。 跳过文档然后进行分叉编码。 该入门项目包含 Jongo如MongoDB的映射 www.jongo.org 。 Apache TomEE作为应用程序服务和集成。 tomee.apache.org 测试的Arquillian 。 www.arquillian.org 该示例非常简单我们希望将颜色存储在MongoDB集合中。 我们的POJO就像 public class Color {ObjectIdprivate String _id;private String name;private int r;private int g;private int b;public Color() {super();}public Color(String name, int r, int g, int b) {super();this.name name;this.r r;this.g g;this.b b;}// getters and setters } 请注意我们正在使用Jongo提供的ObjectId批注将此字段设置为MongoDB id。 此外由于它称为_id因此将自动设置id。 然后是服务层 Singleton Lock(LockType.READ) public abstract class ColorService implements InvocationHandler {JongoCollection(color)InjectMongoCollection colorMongoCollection;Insertpublic abstract Color createColor(Color c);Removepublic abstract int removeAllColors();FindByIdpublic abstract Color findColorById(String id);FindOne({name:#})public abstract Color findColorByColorName(String colorName);Find({r:#})public abstract IterableColor findColorByRed(int r);public long countColors() {return colorMongoCollection.count();}Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {return PersistenceHandler.invoke(colorMongoCollection, method, args);}} 请注意没有很多代码但是有些要点确实很有趣。 让我们对其进行分析。 Singleton用于将EJB定义为单例它也与Stateless一起使用对于Java EE用户而言这里没有消息。 该类是抽象的。 为什么 因为它允许我们不实现所有方法而是定义它们。 还实现java.lang.reflect.InvocationHandler 。 这是因为我们要使用一个非常有趣的功能该功能允许我们创建一个称为invoke的后备方法。 对于已定义但未实现的任何方法都会调用此方法。 我们有一个MongoCollection类来自Jongo项目已将其注入。 MongoCollection代表MongoDB中的集合。 因为我们需要设置要使用的集合所以将创建一个名为JongoCollection的注释以便您可以传递后端集合的名称。 请注意 MongoCollection是由CDI容器使用我们的自定义生成器生成的。 对于CDI用户这里也没有消息。 ApplicationScoped public class MongoCollectionProducer {InjectDB mongoDb;Jongo jongo;PostConstructpublic void initialize() throws UnknownHostException {jongo new Jongo(mongoDb);}ProducesJongoCollectionMongoCollection collection(InjectionPoint injectionPoint) {JongoCollection jongoCollectionAnnotation Reflection.annotation(injectionPoint.getQualifiers(), JongoCollection.class);if(jongoCollectionAnnotation ! null) {String collectionName jongoCollectionAnnotation.value();return jongo.getCollection(collectionName);}throw new IllegalArgumentException();}} 然后有很多方法代表CRUD操作。 请注意他们不执行他们只用InsertfindRemove注释...以设置这是我们要执行的方法的目的。 其中一些例如查找器或删除器可以接收要执行的类似于Jongo的查询。 还有一个名为countColors的方法您可以看到它可以作为自定义方法实现而不必依赖于invoke方法中实现的逻辑。 最后是invoke方法。 该方法将为所有抽象方法调用并简单地发送到PersistenceHandler类该类实际上是针对Jongo的util类用于执行所需的操作。 就是这么简单如果您想添加新的抽象操作则只需在PersistenceHandler类中实现它们即可。 你们中的有些人可能会奇怪为什么我使用注释而不是使用典型的Spring Data方法该方法的名称表示操作。 您也可以实现这种方法这是在PersistenceHandler类中创建正则表达式的简单问题而不是带有注释的if / else但是我更喜欢注释方法。 执行时间更快更干净例如您可以将批注名称从Find重构为Buscar 相当于西班牙文而不必担心是否破坏了某些正则表达式。 最后是测试 RunWith(Arquillian.class) public class ColorTest {private static final String MONGODB_RESOURCE resources\n Resource id\mongoUri\ class-name\com.mongodb.MongoClientURI\ constructor\uri\\n uri mongodb://localhost/test\n /Resource\n /resources;Deploymentpublic static JavaArchive createDeployment() {JavaArchive javaArchive ShrinkWrap.create(JavaArchive.class).addPackages(true, Color.class.getPackage()).addAsManifestResource(EmptyAsset.INSTANCE, beans.xml).addAsManifestResource(new StringAsset(MONGODB_RESOURCE), resources.xml).merge(getJongoAndMongoDependecies());return javaArchive;}private static JavaArchive getJongoAndMongoDependecies() {JavaArchive[] javaArchives Maven.configureResolver().loadPomFromFile(pom.xml).resolve(org.mongodb:mongo-java-driver, org.jongo:jongo).withTransitivity().as(JavaArchive.class);JavaArchive mergedLibraries ShrinkWrap.create(JavaArchive.class);for (JavaArchive javaArchive : javaArchives) {mergedLibraries.merge(javaArchive);}return mergedLibraries;}EJBColorService colorService;Beforepublic void cleanDatabase() {colorService.removeAllColors();}Testpublic void should_insert_color() {Color color colorService.createColor(new Color(red, 255, 0, 0));assertThat(color.getId(), notNullValue());assertThat(color.getName(), is(red));assertThat(color.getR(), is(255));assertThat(color.getB(), is(0));assertThat(color.getG(), is(0));}Testpublic void should_count_number_of_colors() {colorService.createColor(new Color(red, 255, 0, 0));colorService.createColor(new Color(blue, 0, 0, 255));assertThat(colorService.countColors(), is(2L));}Testpublic void should_find_colors_by_id() {Color originalColor colorService.createColor(new Color(red, 255, 0, 0));Color color colorService.findColorById(originalColor.getId());assertThat(color.getId(), notNullValue());assertThat(color.getName(), is(red));assertThat(color.getR(), is(255));assertThat(color.getB(), is(0));assertThat(color.getG(), is(0));}Testpublic void should_find_colors_by_name() {colorService.createColor(new Color(red, 255, 0, 0));Color color colorService.findColorByColorName(red);assertThat(color.getId(), notNullValue());assertThat(color.getName(), is(red));assertThat(color.getR(), is(255));assertThat(color.getB(), is(0));assertThat(color.getG(), is(0));}Testpublic void should_find_colors_by_red() {colorService.createColor(new Color(red, 255, 0, 0));colorService.createColor(new Color(white, 255, 255, 255));IterableColor colorByRed colorService.findColorByRed(255);assertThat(colorByRed, hasItems(new Color(red, 255, 0, 0), new Color(white, 255, 255, 255)));}} 这是一项Arquillian测试除一行外没有其他特殊之处 .addAsManifestResource新的StringAssetMONGODB_RESOURCE“ resources.xml” 因为我们使用的是Apache TomEE所以我们使用它必须配置在代码中用作javax.annotation.Resource的元素的方式。 META-INF / resources.xml的内容将是 resources Resource idmongoUri class-namecom.mongodb.MongoClientURI constructoruri uri mongodb://localhost/test/Resource /resources 然后在MongoClient生产者中使用它来创建要在代码内使用的MongoClient实例。 请注意我们将Resource用作任何标准资源例如DataSource 但实际上注入了MongoClientURI ApplicationScoped public class MongoDBProducer {Resource(name mongoUri)private MongoClientURI mongoClientURI;private DB db;PostConstructpublic void init() throws UnknownHostException {MongoClient mongoClient new MongoClient(mongoClientURI);db mongoClient.getDB(mongoClientURI.getDatabase());}Producespublic DB createDB() {return db;}} 因此实际上Mongo连接是在META-INF / resources.xml文件中配置的感谢TomEE我们可以将其视为任何标准资源。 如果要使用其他应用程序服务器则可以将此方法更改为它提供的方法或者如果需要可以使用DeltaSpike扩展或您自己的方法。 另外由于MongoClient数据库是从带有Produces注释的方法中获取的因此您可以在代码上的任何位置将其注入因此如果需要可以跳过抽象服务层。 这种方法有什么好处 首先它是Java EE解决方案您可以在不依赖Spring框架或任何其他库的情况下使用它。 您可以实现所需的内容而不必下载大量的库而仅仅是为了通过某种对象映射访问MongoDB 。 就像您可能看到的那样代码非常简单并且没有任何魔力您可以毫无问题地对其进行调试甚至可以根据需要进行改进或更改。 该代码是您的正在等待修改。 您是否要使用本机MongoDB对象而不是Jongo 没问题您可以实现它。 而且层数不多实际上只有一层 PersistenceHandler 因此该解决方案的执行速度非常快。 当然这并不意味着您不能使用Spring Data MongoDB 。 这是一个非常有趣的框架因此如果您已经在使用Spring 请继续进行下去但是如果您打算使用完整的J ava EE解决方案请克隆此项目并开始使用MongoDB而无需进行任何网络研究。关于如何将它们整合在一起的知识。 您可以从https://github.com/lordofthejars/tomee-mongodb-starter-project克隆项目 翻译自: https://www.javacodegeeks.com/2014/09/java-ee-mongodb-with-apache-tomee-and-jongo-starter-project.html
http://www.huolong8.cn/news/211239/

相关文章:

  • 尧都网站建设公众号设计
  • 微信开放社区兰州优化官网推广
  • 网站建设与管理的书销售产品网站有哪些
  • 南充高端网站建设做网站如何选择关键词
  • 合肥市建设工程造价信息网站景安做网站教程
  • 专业做网站建设制作服务建设网站需要的工具
  • 百度不收录网站内页注册公司需要什么条件吗
  • 做网站的公司怎么找客户做网站需要掌握的软件
  • 网站建设的报告蓝色网站后台
  • 如何建设一个自己的网站首页网站前期定位
  • 苏州 规划建设局网站做企业咨询管理怎么样
  • 企业网站实名审核中心厦门学网站建设
  • 网页设计和网站开发有什么区别东营企业自助建站
  • 内江建网站龙岩天宫山缆车门票多少钱
  • 商城网站微信支付接口申请流程营销网站首页设计
  • html可以做网站后台吗现在哪里大搞建设
  • 湖州网站开发公司锡林郭勒盟建设工程造价信息管理网站
  • 个人电影网站备案衡阳网络营销公司
  • 做托福的网站怎样重新运行wordpress
  • 建设文明网站包括19
  • asp开发网站详细步骤做设计网站的工作内容
  • 网站建设咨询什么宿州高端网站建设公司哪家好
  • 网站建设推广案例c 转网站开发
  • 网站代码怎么看网站开发 硬件环境
  • 公司企业网站设计尺寸网站建设的企业目标
  • 搜索引擎站长平台云南官网制作
  • 做网站需要了解什么漳州微信网站开发
  • 八年级信技做网站网站建设客户资源
  • 注册网站需要多少钱手机端怎么变成电脑端
  • 外国网站建设公司中国河北网站