DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Over 2 million developers have joined DZone.
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Zones

Culture and Methodologies Agile Career Development Methodologies Team Management
Data Engineering AI/ML Big Data Data Databases IoT
Software Design and Architecture Cloud Architecture Containers Integration Microservices Performance Security
Coding Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks
Culture and Methodologies
Agile Career Development Methodologies Team Management
Data Engineering
AI/ML Big Data Data Databases IoT
Software Design and Architecture
Cloud Architecture Containers Integration Microservices Performance Security
Coding
Frameworks Java JavaScript Languages Tools
Testing, Deployment, and Maintenance
Deployment DevOps and CI/CD Maintenance Monitoring and Observability Testing, Tools, and Frameworks

How does AI transform chaos engineering from an experiment into a critical capability? Learn how to effectively operationalize the chaos.

Data quality isn't just a technical issue: It impacts an organization's compliance, operational efficiency, and customer satisfaction.

Are you a front-end or full-stack developer frustrated by front-end distractions? Learn to move forward with tooling and clear boundaries.

Developer Experience: Demand to support engineering teams has risen, and there is a shift from traditional DevOps to workflow improvements.

Core Badge
Avatar

Nicolas Fränkel

DZone Core CORE

Developer Advocate at Loft Labs

CH

Joined Jun 2008

http://blog.frankel.ch/

About

Developer Advocate with 15+ years experience consulting for many different customers, in a wide range of contexts (such as telecoms, banking, insurances, large retail and public sector). Usually working on Java/Java EE and Spring technologies, but with focused interests like Rich Internet Applications, Testing, CI/CD and DevOps. Also double as a trainer and triples as a book author.

Stats

Reputation: 10941
Pageviews: 5.1M
Articles: 181
Comments: 142

Expertise

Java Expertise Icon

Java

Testing, Tools, and Frameworks Expertise Icon

Testing, Tools, and Frameworks

  • Articles
  • Comments

Articles

article thumbnail
LangChain4J and Ollama: Chatbot Integration, Streaming, and RAG
Learn how to integrate LangChain4J and Ollama into your Java app and explore chatbot functionality, streaming, chat history, and retrieval-augmented generation.
November 15, 2024
· 1,730 Views · 6 Likes
article thumbnail
Summary of the AJAX Frameworks Comparison
This final post of a series analyzing several libraries and frameworks that augment the client with AJAX capabilities concludes with a comprehensive comparison.
October 24, 2024
· 7,981 Views · 5 Likes
article thumbnail
Vaadin: The Battery-Included, Server-Side AJAX Framework
In this article, explore Vaadin in the context of AJAX and SSR.
October 17, 2024
· 9,247 Views · 2 Likes
article thumbnail
Augmenting the Client With HTMX
This post is part of a series comparing different ways to implement asynchronous requests on the client to augment the latter. This post focuses on HTMX.
October 10, 2024
· 6,901 Views · 2 Likes
article thumbnail
Augmenting the Client With Alpine.js
This post, dedicated to Alpine.js, is part of a series comparing different ways to implement asynchronous requests on the client.
October 4, 2024
· 6,423 Views · 1 Like
article thumbnail
Augmenting the Client With Vue.js
In this post, the author takes their first steps in augmenting an SSR app with Vue. In the next post, they will implement the same features with Alpine.js.
September 26, 2024
· 4,574 Views · 1 Like
article thumbnail
Server-Side Rendering With Spring Boot
Explore WebJars, which manages client-side dependencies in your Maven POM, and Thymeleaf, a templating mechanism that integrates well with Spring Boot.
September 19, 2024
· 11,392 Views · 8 Likes
article thumbnail
A Short History of AJAX and SSR
We must recognize the benefits that client-side rendering offers, but perhaps the pendulum has swung too far. Is it possible to have the best of both worlds?
September 13, 2024
· 5,968 Views · 4 Likes
article thumbnail
DRY Your Apache APISIX Config
DRY is an important principle in software development. This post will show you how to apply it to Apache APISIX configuration.
September 6, 2024
· 4,152 Views · 4 Likes
article thumbnail
When (Not) to Write an Apache APISIX Plugin
This post aims to provide practical alternatives to writing a custom plugin, offering solutions you can quickly implement in your projects.
August 29, 2024
· 3,304 Views · 1 Like
article thumbnail
Kotlin Coroutines and OpenTelemetry Tracing
Explore the underlying workings of OpenTelemetry and analyze the workings of @WithSpan in general as well as within the context of Kotlin Coroutines.
August 22, 2024
· 7,311 Views · 5 Likes
article thumbnail
Default Map Value
Learn how to provide a default value when querying an absent key in a hash map in different programming languages including Java, Kotlin, Python, and more.
August 16, 2024
· 5,902 Views · 2 Likes
article thumbnail
OpenTelemetry Tracing on Spring Boot: Java Agent vs. Micrometer Tracing
In this post, compare three different ways to utilize OpenTelemtry Tracing and Spring Boot components: Java agent v1, Java agent v2, and Micrometer Tracing.
August 12, 2024
· 10,333 Views · 3 Likes
article thumbnail
Free Tier API With Apache APISIX
A free tier is a must for any API service provider worth its salt. In this post learn how to configure such a free tier with Apache APISIX.
August 5, 2024
· 2,114 Views · 1 Like
article thumbnail
Differentiating Rate Limits in Apache APISIX
Learn how to implement rate limiting with Apache APISIX: set the rate limit on a route, and move it to individual consumers and consumer groups.
July 31, 2024
· 2,886 Views · 2 Likes
article thumbnail
Advanced URL Rewriting With Apache APISIX
Learn about using the proxy-rewrite plugin with a path variable in this post. You can reuse the same technique with multiple variables.
July 24, 2024
· 3,015 Views · 1 Like
article thumbnail
Dynamic Watermarking With IMGProxy and Apache APISIX
In this post, we implement a watermarking feature with the help of imgproxy. The more I think about it, the more I think they make a match made in Heaven.
July 17, 2024
· 5,514 Views · 1 Like
article thumbnail
Dynamic Watermarking on the JVM
Displaying images makes for an interesting problem: on one side, you want to make them publicly available; on the other, you want to protect them against undue use.
July 10, 2024
· 4,422 Views · 1 Like
article thumbnail
A Refresher on GitHub Pages
Deploying to GitHub Pages offers two options: either from a branch or from a custom workflow. Once I understood the options, I made the first one work.
June 24, 2024
· 2,969 Views · 1 Like
article thumbnail
Random and Fixed Routes With Apache APISIX
Some triage on the APISIX repo led to the discovery of an interesting use case involving random and fixed routes. Explore the solution in this post.
June 18, 2024
· 2,113 Views · 1 Like
article thumbnail
Even More OpenTelemetry!
In this post, the author describes several changes he made in his OpenTelemetry tracing demo and the lessons he learned.
June 7, 2024
· 4,110 Views · 2 Likes
article thumbnail
Parsing Structured Environment Variables in Rust
Anyone should be able to add a warehouse in their favorite tech stack if it returns the correct JSON payload to the inventory.
May 30, 2024
· 1,561 Views · 3 Likes
article thumbnail
Workflow, From Stateless to Stateful
A workflow comprises tasks; an automated task delegates to code, while a manual task requires somebody to do something and mark it as done.
May 24, 2024
· 2,392 Views · 3 Likes
article thumbnail
My Opinion on the Tauri Framework
Tauri is a Rust-based framework for building desktop applications. Read more about its functions, as well as the author's pros and cons.
May 16, 2024
· 1,729 Views · 1 Like
article thumbnail
Five Ways To Pass Parameters to Apache APISIX
This article explores all the ways to send parameters to Apache APISIX, which is beneficial when you write a custom plugin.
May 2, 2024
· 1,866 Views · 1 Like
article thumbnail
The Try Block in Rust
I wrote previously about libs for error management in Rust. This week, I want to write about the try block, an experimental feature.
April 25, 2024
· 1,416 Views · 1 Like
article thumbnail
Implementing the Idempotency-Key Specification on Apache APISIX
Learn how to implement Idempotency-Key header with Apache APISIX and Redis for reliable APIs without duplicates.
April 13, 2024
· 2,693 Views · 1 Like
article thumbnail
Fixing Duplicate API Requests
The first rule of distributed systems is: "Don’t distribute your system." Designing distributed systems correctly is infamously hard for multiple reasons.
April 11, 2024
· 1,986 Views · 1 Like
article thumbnail
The Pitfall of Implicit Returns
Implicit returns are a feature in some languages, but beware, concise code doesn't necessarily imply being better code. Learn more!
March 26, 2024
· 1,147 Views · 1 Like
article thumbnail
Using My New Raspberry Pi To Run an Existing GitHub Action
Experiment with self-hosted runner Raspberry Pi, using it to run an existing GitHub action. Read more about the author's findings!
March 18, 2024
· 7,490 Views · 2 Likes

Comments

API Versioning

Nov 15, 2023 · Nicolas Fränkel

Sorry, but I don't understand. how it's related, because before you can navigate via HATEOAS links, you need to access the root entity anyway. And you need a version

Send Your Logs to Loki

Sep 28, 2023 · Nicolas Fränkel

Thanks for reading it

Send Your Logs to Loki

Sep 05, 2023 · Nicolas Fränkel

Thanks for your kind words!

My Final Take On Gradle (vs Maven)

Aug 17, 2023 · Nicolas Fränkel

Do you dismiss them because they're potentially flexible?

I mostly favor boring and maintainable code over show-off code that nobody can maintain.

But as I said, difficult to have a proper discussion in 600 chars

The only point on which I agree with you ;-)

My Final Take On Gradle (vs Maven)

Aug 17, 2023 · Nicolas Fränkel

I feel like you didn't read the post...

Gradle claims that lack of flexibility is an issue; hence, it wants to fix it. I stand by the opposite: lack of flexibility for my build tool is a feature, not a bug. Gradle makes it easy to hack the build. Hence, anybody who thinks their project is a special snowflake and deserves customization will happily do so. Reality check: it's rarely the case; when it is, it's for frameworks, not regular projects. Gradle proponents say that it still offers standards while allowing easy configuration. The heart of the matter is that it's not a standard if it can be changed at anybody's whim.

Exploring OpenTelemetry Capabilities

Aug 14, 2023 · Dmitriy Bogdan

Unless it's on purpose (and I doubt it in the context), you wrote "disturbed" traces instead of "distributed" traces

Working on an Unfamiliar Codebase

May 24, 2023 · Nicolas Fränkel

Happy to help!

Fearless Distroless

Apr 26, 2023 · Nicolas Fränkel

You should probably give the same permissions to the same people who already are able to run kubectl exec, shouldn't you?

Discuss the Problem, Not the Solution

Oct 28, 2022 · Nicolas Fränkel

These points are IMHO unrelated but completely valid

Bean Validation and JSR 303

Oct 10, 2022 · James Sugrue

Hello!

Well, thanks a lot for this blast from the past!

The Maze of Python Dependency Management

Sep 14, 2022 · Nicolas Fränkel

I love GraalVM and I'm a proponent but I still think it's overkill for my use-case.

Alternatives to DTO

Mar 18, 2022 · Nicolas Fränkel

I work on software projects since a long time. When I started, we always designed complex architectures just in case something changed: we paid upfront costs, continued to pay throughout the development, and most of the time, the change that we planned for never happened. Change is a constant, but among the infinity of changes, I can bet that your design is not fit for the ones that will happen.

Now, my approach is YAGNI. When you need to change, change it.

Alternatives to DTO

Mar 17, 2022 · Nicolas Fränkel

YAGNI. New requirements may never come. They may not evolve. etc.

Fluent-API: Creating Easier, More Intuitive Code With a Fluent API

Sep 13, 2021 · Otavio Santana

Good points but you could have gone much further and made it truly fluent by being compile-time valid using types instead of runtime valid using exceptions.

I explained it in this post.

On the down side, you might get a huge number of types depending on your valid object tree.


Kafka-Streams - Tips on How to Decrease Re-Balancing Impact for Real-Time Event Processing On Highly Loaded Topics

Jul 27, 2021 · Vasyl Sarzhynskyi

Too bad. Because Apache Pulsar is specifically designed so that you can change your compute nodes without rebalancing, making your problem disappear.

Kafka-Streams - Tips on How to Decrease Re-Balancing Impact for Real-Time Event Processing On Highly Loaded Topics

Jul 24, 2021 · Vasyl Sarzhynskyi

Use Pulsar? ;-)

Is Java Really Faster Than Go?

May 07, 2021 · Kai Hendry

Beware of what you find on the WWW ;-)

Here's a post on AWS Lambda with GraalVM https://blog.formkiq.com/tutorials/aws-lambda-graalvm/index.html. I didn't try it.

Is Java Really Faster Than Go?

May 07, 2021 · Kai Hendry

There's no "issue" with Spring. Whatever the framework, you can always run your JVM with a dedicated Java agent that records all interactions and generates the config file for you.

I'm not into serverless but I already read articles on how to GraalVM-ify your Java app and use it as an Amazon Lambda function.

Is Java Really Faster Than Go?

May 05, 2021 · Kai Hendry

I'm a Java developer and I hate Go (mainly because of the return Err pattern).

Anyway, I do love your the process you followed: get the sources, re-execute the tests and try to fix the issues. This is exactly what I find lacking in most comparisons I find regardless of the subject - a scientific approach.

I also am quite "specific" on semantics. In this case, I agree that a native binary starts faster than a VM but not that Go starts faster than Java. Did you know you can code in Java (or any JVM language for that matter) and compile the JAR to a native binary? If you're interested, have a look at GraalVM and its native image capabilities.

Again, great process!

Kotlin Null Safety for the Optional Experience

Jan 30, 2018 · Paweł Szeliga

I think you left out the most important point between nullable type and Optional.

You can write that in Java:

Optional<Foo> optional = null;

And now everything is broken again.


Would You Use JSF for Your Next Project?

Jan 17, 2018 · Duncan Brown

> Development is fast if you know all the traps of JSF.

Like for JavaScript. It's a crap language, but development is fast if you know all the (many) traps ;-)

Would You Use JSF for Your Next Project?

Jan 17, 2018 · Duncan Brown

I just recently used Vaadin CDI integration v3 in a teaching context and had no issue.

(Note that the Spring Boot integration is really good since the beginning)

Would You Use JSF for Your Next Project?

Jan 17, 2018 · Duncan Brown

When JSF was first released, I tried it. I remember the 7 or 8 phases lifecycle. The possibility of shortcut through the lifecycle. The fact that JSF was advertised as component-based but there was still a page-to-page navigation. End of the story.

Then I found Vaadin: a true component-oriented framework with event-based programming features. IMHO, that's what JSF should have been. Like some of the Java EE specifications, JSF was designed by very smart people who never had to work in a real-world project. As such, it's too complex with not enough benefits.

Jlink in Java 9

Jan 09, 2018 · Mike Gates

Besides, it's not because your app only loads 4 classes that only those 4 are used. For example, String is defined as:

public final class String implements java.io.Serializable, Comparable<String>, CharSequence

Hence, it will load itself and 3 additional classes.

Jlink in Java 9

Jan 09, 2018 · Mike Gates

> "So the problem with the default JRE is that it executes the all predefined .class files whether you want to or not."

I never understood how it works, the JRE changed recently or this is completely wrong. If a class is not required, then it's just not loaded into memory and that's all. The only downside of a monolithic rt.jar is that it takes space - and that's a no-go on embedded device.

Is OOP Compatible With an Enterprise Context?

Nov 18, 2017 · Mike Gates

> Scientific studies that OOP results in better readability?
I'm afraid you didn't read my post, or at least the conclusion, because that's exactly the question I ask.

That doesn't allow you to call OOP whatever code you happen to write in Java.

Is OOP Compatible With an Enterprise Context?

Nov 18, 2017 · Mike Gates

Quite the opposite, actually. It's just that I don't agree with most developers who think whey use OOP just because they code in Java, and they have getters and setters, etc. I'm (unfortunately?) quite used to the layered architecture and the anemic domain model, as I was taught them first.

Is OOP Compatible With an Enterprise Context?

Nov 17, 2017 · Mike Gates

Thanks Alexey,

Actually, I know the guy personnally, and though we don't always agree, I think he's quite good at pure OOP design - to the point where he pursues OOP for the sake of it.

Is OOP Compatible With an Enterprise Context?

Nov 17, 2017 · Mike Gates

Then, let me refer you this post.

Is OOP Compatible With an Enterprise Context?

Nov 17, 2017 · Mike Gates

I completely agree with you!

Yet, one cannot deny that Spring (and Java EE) code generally doesn't co-locate state and behavior. I just wanted to prove it's possible.

A Dockerfile for Maven-Based GitHub Projects

Aug 03, 2017 · Grzegorz Ziemoński

Thanks for your comment.

If you compare the number of steps, sure, your solution is better. But if you check the image size, then you have one single image file weighting 304 MB, while I have 2 weighting respectively 28 MB for Git and 116 MB for Maven.

So it all boils down to your objectives: reducing the number of steps, or having lightweight images.

Spring @Transactional and Private Methods [Snippets]

Jul 20, 2017 · Grzegorz Ziemoński

Pretty smart hack, but still a hack :-)

Scala vs. Kotlin: Multiple Inheritance and the Diamond Problem

Jul 13, 2017 · Mike Gates

It's not about new, it's about that one little feature that changes a lot. For me, that feature is extension functions. I don't care that it's present in language X or Y, it just allows me to write much cleaner and readable code than static methods in *Utils classes.

Scala vs. Kotlin: Multiple Inheritance and the Diamond Problem

Jul 13, 2017 · Mike Gates

I don't see in this post what problem I pointed out in Scala. I describe a generic problem, and check how Kotlin and Scala handle it.


I love a good debate, so instead of refering to generalities or using fallacies, please point out detailed arguments. Otherwise, I'm afraid your comment(s) has(have) not added value to the community.

Scala vs. Kotlin: Multiple Inheritance and the Diamond Problem

Jul 13, 2017 · Mike Gates

It doesn't compile.

Scala vs. Kotlin: Multiple Inheritance and the Diamond Problem

Jul 13, 2017 · Mike Gates

It's always funny to see such "argument" (cf. Ad hominem logical fallacy).

Exception-Free Code Using Functional Approach

Jul 11, 2017 · Paweł Szeliga

I beg to disagree. The exception-throwing code has been written, and is available. It's not because you don't use it that a developer won't.

It just feels like trying to put a square peg in a round hole: Java is not made for that.

Exception-Free Code Using Functional Approach

Jul 11, 2017 · Paweł Szeliga

IMHO, overriding a method to throw an exception at least defeats the principle of least surprise, and at worst is a design flaw. You didn't remove exception, you just pushed them udner the rug.

An Introduction to Code Coverage

May 24, 2017 · Ana Jones

Code coverage is a useless metric that project managers like because 1) it's a metric 2) they can understand what it means.

Unfortunately, some things definitely have more dimensions that can be put in an Excel Sheet, such as assertless tests, or boundaries testing, etc.

Please kill code coverage so we can focus on the real subject - tests quality.

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

1. I never wrote that. I just stated, it's not proper OOP

2. As soon as you write a getter, you'll soon have getA().getB().getC() in your codebase. Discipline is as good as the laziest team member.

3. Good we agree

I've seen several attempts to do without getters and the hoops you have to jump through are hideous, very much anti-KISS

I've seen that as well, with the same problems.

It seems we more or less agree. My point was that encapsulation or future validation are no reason to write accessors.

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

That's why you have decorators, and all those nice design patterns.

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

You're already stating an implementation detail... Let's design the system first, then we can talk about encapsulation.

In your example, then the Car should know how to register itself into the cache manager. Again, you don't need to access its state.

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

I like stupid examples :-)

But in OOP, you should never query about the state of an object. If you need the license plate for car control, then you ask the Car to check its own license plate, you don't access the data.

Car.checkValidLicensePlate()

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

Could you elaborate on that? Because I don't see any relationship between accessors and interfaces right now...

Why Should I Write Getters and Setters?

Apr 20, 2017 · Grzegorz Ziemoński

If you write getters and setters:

1. You are not doing proper OOP

2. You do not understand true encapsulation

3. If you do that for a possible future validation, YAGNI

The only reason for writing accessors is because most (all?) java libraries assume the JavaBean model.

Immutables in Java

Mar 23, 2017 · Marcus Biel

I heard that a lot. Care to elaborate about a getter being "only" an implementation detail? And no, there will never be any formatting or whatever involved.

Immutables in Java

Mar 22, 2017 · Marcus Biel

Why would I use it? To highlight the Pavlov reflex most people have to generate a getter. Because in that case, it's not necessary.

Now, I fully agree with your point. Principle of least surprise, etc.

My point was: stop calling encapsulation $$anonymous$$ property and its associated getter.

Immutables in Java

Mar 22, 2017 · Marcus Biel

Why would you want your fields to be private if they cannot be changed (like String)?

Immutables in Java

Mar 22, 2017 · Marcus Biel

Ok, your example convinced me. Thanks for the clarification (and your patience ;-))

Immutables in Java

Mar 21, 2017 · Marcus Biel

For encapsulation, I've written my arguments there: https://blog.frankel.ch/encapsulation-dont-think-means-think-means/, so I won't repeat myself. I'd be happy to talk further about it if you're interested.

As for the final on class, I still don't get it. If you can override methods, those overriden methods still cannot change final parent fields. So, EvilSpaceship is still immutable. Only if it adds additional fields that are not final, then it might mutable.

Immutables in Java

Mar 21, 2017 · Marcus Biel

Great article, providing advantages of immutability I didn't formerly think about.

Just nitpicking, but if the type of a field is immutable (like String in your spaceship example), it's not necessary to have it private: public is enough. I admit this is rather strange, but it works.

Also, the class can be not final if all its fields are final. This shouldn't be a requirement IMHO.

Spring Boot and Application Context Hierarchy

Dec 20, 2016 · Tim Spann

Generally speaking, Spring Boot applications do not need child contexts.

Logger Injection With Spring’s InjectionPoint

Nov 27, 2016 · Fatih Dirlikli

Dependency Injection in general - and Spring in particular, allows to mock/fake dependencies and be able to test the class "in insolation". I fail to understand why injecting the logger would be better than creating it in that regard. Plus you need to write as much (if not more) code to inject the logger nonetheless; hence you've got boilerplate code also.

I can understand declaring the logger is a tedious task. In that case, I'd just create the relevant aspect and use AOP to achieve that. Or Lombok as Jonatan proposes. In both cases, that might be a hammer to squat a fly, though

Create an Executable Fat JAR With Your Command Line

Oct 28, 2016 · Miro Wengner

Or, you know, just use this thing called a build tool and configure plugins to have be done for you

5 Practical Tips for Building Your Spring Boot API

Oct 25, 2016 · Mike Gates

You can do even better. With Spring new versions, you can remove the @Autowired annotation entirely on the constructor.

5 Practical Tips for Building Your Spring Boot API

Oct 19, 2016 · Mike Gates

Happy to have been of service ;-)

5 Practical Tips for Building Your Spring Boot API

Oct 19, 2016 · Mike Gates

That started well enough until "Use Dependency Injection With Autowired Services", I stopped reading after the code snippet featuring field injection.

Long talk short, even Spring engineers advocate against field injection: I let you read the full article, no need to rant against that practice here again.

An Opinionless Comparison of Spring and Guice

Oct 05, 2016 · Nikhil Wanpal

It's not about annotations, it's about style: explicit injection vs autowiring. If you're using explicit, there's nearly a 1-1 mapping between Guice and Spring.

An Opinionless Comparison of Spring and Guice

Oct 04, 2016 · Nikhil Wanpal

This comparison is only focused on Spring self-annotated classes without taking into account JavaConfiguration. This post - sadly like many others, pretend to compare Spring that was 10 years ago.

Exception Handling in Real-Life Java Applications

Jun 22, 2016 · Jalal Kiswani, PhD

Quite interesting. But you don't solve the initial problem: the junior developer might forget to use your API and catch silently - or do any of the things you don't want.

In that case, you should use AOP: it's clean and there's no place for error. And in that case, you'd customize the handling of the exception in the aspect itself, thus making your API not so useful.

By the way, regarding your design, using static methods make clients of your API completely unit-untestable. You might want to change that.

Who Are the Java EE Guardians and Why Should You Care?

Mar 24, 2016 · Dave Fecak

Reply or no reply, it doesn't change a thing. Java EE is the realm of application server vendors and customers who need to have someone to blame. But how many companies are running Tomcat? How many do have issues? Most don't really need the whole Java EE stack. Basically, only a few API are needed: Servlet, JMS, JPA (& JDBC), CDI, JAX-RS and perhaps a few I've forgotten. The rest? Useless... or worse. Batch is a pale copy of Spring and shouldn't have been part of EE. This was a shrewd move on the part of the vendors, so they can sell their high-priced ***ware. And now a MVC? Come on! I've always worked in the Java world with different application servers but this Java EE trend is becoming a tragedy.

Who Are the Java EE Guardians and Why Should You Care?

Mar 24, 2016 · Dave Fecak

JavaEE is dead, nobody cares about it so why would you guard a dead abandoned body?

@Autowired and Optional Dependencies

Mar 09, 2016 · Alan Hohn

I think your reasoning (without proof) makes for a great opportunity to learn... I wish you an interesting life ;-)

@Autowired and Optional Dependencies

Mar 09, 2016 · Alan Hohn

"@Autowired annotation makes our lives easier"

Not at all! It's just an evil snake waiting to bite you at the worst possible moment. It works until it doesn't anymore. It makes your app's structure completely unreadable. It also couples your classes and reduce re-use.

Could we please all switch to Java Config? Pretty please?

Gentle Introduction to Hystrix: Hello World

Oct 29, 2015 · Denzel D.

Thanks, it's now readable but there are still formatting issues (blank lines, indentation, HTML entities) that make it harder to read.

Gentle Introduction to Hystrix: Hello World

Oct 27, 2015 · Denzel D.

Code formatting is a mess... How can people "like" this?

Use Mockito to Mock Autowired Fields

Feb 11, 2014 · Lubos Krnac

You're welcome, but you only owe to you that you followed the path I only showed :-)

Use Mockito to Mock Autowired Fields

Feb 11, 2014 · Lubos Krnac

You're welcome, but you only owe to you that you followed the path I only showed :-)

Use Mockito to Mock Autowired Fields

Feb 11, 2014 · Lubos Krnac

You're welcome, but you only owe to you that you followed the path I only showed :-)

Use Mockito to Mock Autowired Fields

Feb 11, 2014 · Lubos Krnac

You're welcome, but you only owe to you that you followed the path I only showed :-)

Use Mockito to Mock Autowired Fields

Jan 29, 2014 · Lubos Krnac

But encapsulation decreases testability.
No, encapsulation does not decrease testability; bad design does. I would suggest you first switch to constructor injection to allow for testablity. Field injection is evil, period.

There are plentyt of arguments regarding this statement. For the sake of brevity, here's a Google Search for "field vs constructor injection".
A Dive into the Builder Pattern

Oct 08, 2013 · James Sugrue

Site must be down :-(

A Dive into the Builder Pattern

Oct 08, 2013 · James Sugrue

Site must be down :-(

A Dive into the Builder Pattern

Oct 08, 2013 · James Sugrue

Hello Robert,

This is adequate, until you have parameters dependent on one another, like in the house example.

A Dive into the Builder Pattern

Oct 08, 2013 · James Sugrue

Hello Robert,

This is adequate, until you have parameters dependent on one another, like in the house example.

A Dive into the Builder Pattern

Oct 08, 2013 · James Sugrue

Hello Robert,

This is adequate, until you have parameters dependent on one another, like in the house example.

Java Optional Objects

Apr 17, 2013 · James Sugrue

Alternatively, Programming-by-contract could solve this problem: if you could annotate your code with post-conditions, callers would clearly see the intent.

For example:

@NotNull

public Fruit findFruit(...) {

...

}

Changing Default Spring Bean Scope

Feb 04, 2013 · James Sugrue

Silliness depends on your point of view. I have a use-case when default beans have to have a scope narrower than singleton.

Changing Default Spring Bean Scope

Feb 04, 2013 · James Sugrue

Silliness depends on your point of view. I have a use-case when default beans have to have a scope narrower than singleton.

Changing Default Spring Bean Scope

Feb 04, 2013 · James Sugrue

Silliness depends on your point of view. I have a use-case when default beans have to have a scope narrower than singleton.

Web Services: JAX-WS vs Spring

Sep 17, 2012 · James Sugrue

Hi Seb,

I tend to frown on AOP, but that depends on my team skill. Anyway, this a great idea. Thanks!

Marker Interfaces in Java

Mar 17, 2012 · James Sugrue

Marker interfaces should be deprecated since Java 5: you should use annotations that play the exact role marker interfaces did before.
A Hard Fact About Transaction Management In Spring

Mar 07, 2012 · James Sugrue

I also prefer XML to annotations because of coupling :-) only not for transactions.

Spring's XML way of dealing with transaction is way too decoupled for junior (or even senior in some cases) developers. Pattern matching is a little bit dangerous for something as critical as transations, don't you think?

But the heart of the matter is the last point you raise: transactional behavoir shouldn't be part of the design contract for you; for me it should.

A Hard Fact About Transaction Management In Spring

Mar 07, 2012 · James Sugrue

I also prefer XML to annotations because of coupling :-) only not for transactions.

Spring's XML way of dealing with transaction is way too decoupled for junior (or even senior in some cases) developers. Pattern matching is a little bit dangerous for something as critical as transations, don't you think?

But the heart of the matter is the last point you raise: transactional behavoir shouldn't be part of the design contract for you; for me it should.

A Hard Fact About Transaction Management In Spring

Mar 07, 2012 · James Sugrue

I also prefer XML to annotations because of coupling :-) only not for transactions.

Spring's XML way of dealing with transaction is way too decoupled for junior (or even senior in some cases) developers. Pattern matching is a little bit dangerous for something as critical as transations, don't you think?

But the heart of the matter is the last point you raise: transactional behavoir shouldn't be part of the design contract for you; for me it should.

A Hard Fact About Transaction Management In Spring

Mar 06, 2012 · James Sugrue

Perhaps because I would want to switch implementations and have no side-effects on transactionality?
A Hard Fact About Transaction Management In Spring

Mar 06, 2012 · James Sugrue

Perhaps because I would want to switch implementations and have no side-effects on transactionality?
A Hard Fact About Transaction Management In Spring

Mar 06, 2012 · James Sugrue

Perhaps because I would want to switch implementations and have no side-effects on transactionality?
Why "Polyglot Programming" or "Do It Yourself Programming Languages" or "Language Oriented Programming" sucks?

Jan 24, 2012 · Lofi Dewanto

@Fabien

If you're even more radical (like myself), have a look at Vaadin. It generates HTML/JS/CSS for you and in the context of a simple CRUD application, you have containers that can directly connect to the database.

Why "Polyglot Programming" or "Do It Yourself Programming Languages" or "Language Oriented Programming" sucks?

Jan 24, 2012 · Lofi Dewanto

@Fabien

If you're even more radical (like myself), have a look at Vaadin. It generates HTML/JS/CSS for you and in the context of a simple CRUD application, you have containers that can directly connect to the database.

Why "Polyglot Programming" or "Do It Yourself Programming Languages" or "Language Oriented Programming" sucks?

Jan 24, 2012 · Lofi Dewanto

@Fabien

If you're even more radical (like myself), have a look at Vaadin. It generates HTML/JS/CSS for you and in the context of a simple CRUD application, you have containers that can directly connect to the database.

OAuth in headless applications

Oct 13, 2011 · Giorgio Sironi

Interesting, I didn't know about Scribe. Thanks!
SSL your Tomcat 7

Jul 07, 2011 · James Sugrue

The APR is a native library that you may install during Tomcat installation. It does tie your Tomcat to your OS but "provide superior scalability and performance". This is a good thing to do for your production environment. In other environments, I don't see the point.

You can see more info on the Tomcat website.

SSL your Tomcat 7

Jul 07, 2011 · James Sugrue

The APR is a native library that you may install during Tomcat installation. It does tie your Tomcat to your OS but "provide superior scalability and performance". This is a good thing to do for your production environment. In other environments, I don't see the point.

You can see more info on the Tomcat website.

SSL your Tomcat 7

Jul 07, 2011 · James Sugrue

The APR is a native library that you may install during Tomcat installation. It does tie your Tomcat to your OS but "provide superior scalability and performance". This is a good thing to do for your production environment. In other environments, I don't see the point.

You can see more info on the Tomcat website.

SSL your Tomcat 7

Jul 07, 2011 · James Sugrue

The APR is a native library that you may install during Tomcat installation. It does tie your Tomcat to your OS but "provide superior scalability and performance". This is a good thing to do for your production environment. In other environments, I don't see the point.

You can see more info on the Tomcat website.

SSL your Tomcat 7

Jul 07, 2011 · James Sugrue

The APR is a native library that you may install during Tomcat installation. It does tie your Tomcat to your OS but "provide superior scalability and performance". This is a good thing to do for your production environment. In other environments, I don't see the point.

You can see more info on the Tomcat website.

SSL your Tomcat 7

Jul 06, 2011 · James Sugrue

Hi,

I think the root of the problem lies in that you're using the Apache Portable Runtime, and I'm not. I think you should look into this direction.

CDI 1.0 vs. Spring 3.1 Feature Comparsion

Jul 06, 2011 · James Sugrue

Hello,

You matrix is interesting; yet, there's a point you fail to mention. By default, all classes on the classpath are available for injection in CDI whereas only those referenced are in Spring.

Since this is a big source of potential problems, I think you should mention it.

Setting Up SSL on Tomcat in 5 minutes

Jul 01, 2011 · James Sugrue

You just destroyed my next article :-/
Java Web Application Security - Part V: Penetrating with Zed Attack Proxy

Jun 22, 2011 · James Sugrue

Very nice article.

Just an additional info: if your webapp uses HTTPS, you'll need ZAP to generate a dummy certificate (Options -> Dynamic SSL Certificates, Generate button) or import the real one before going further otherwise it won't work. Then accept the browser's security warning if there's one.

Spring and Hibernate Application with Zero XML

Feb 23, 2011 · Siva Prasad Reddy Katamreddy

package com.sivalabs.springmvc.config;

import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.io.ClassPathResource;

/**
* @author SivaLabs
*
*/
@Import({RepositoryConfig.class})
@Configuration
public class AppConfig
{
//<context:property-placeholder location="classpath:application.properties"></context:property-placeholder>
@Bean
public PropertyPlaceholderConfigurer getPropertyPlaceholderConfigurer()
{
PropertyPlaceholderConfigurer ppc = new PropertyPlaceholderConfigurer();
ppc.setLocation(new ClassPathResource("application.properties"));
ppc.setIgnoreUnresolvablePlaceholders(true);
return ppc;
}
}

Here @Import({RepositoryConfig.class}) is the same as the xml version: <import resource="applicationContext-dao.xml"></import>

I am amazed to see how far this XML-bashing trend go: should we be so happy to have replaced a single line XML with 1 line of compiled Java annotation? What's the damn point?

XML is not bad when you have the right tool. Just use Spring IDE and be done with it!

PS: sorry, your post could be interesting but I couldn't muster the courage to get past this part...

Mock Static Methods using Spring Aspects

Jan 25, 2011 · Shekhar Gulati

Why use static methods at all? If you use Spring, beans are singleton by default. The only pertinent use case is mocking a static method from a third-party library, which is not apparent from your example.

What's the point in designing static methods? They make your code far more complext to test, and you have to use powerful tools in order to still test them. I wish good luck to the poor developer who has to do the maintenance of your projects, once you're gone...

How to Display Maven Project Version in Your Webapp Overview

Sep 23, 2010 · James Sugrue

With filtering, you just create a properties file with ${project.version}. Now you can read it and make it available everywhere.
The Power of Proxies in Java

May 12, 2010 · James Sugrue

Well, Spring, although it supports AspectJ, does not use it itself. AOP is a way of seeing the world that the above frameworks do not need (and thus do not use).

I must admit it's only supposition on my part so the debate could go forever but IMHO, I don't think it's a licensing problem.Thanks for your input though.

The Power of Proxies in Java

May 12, 2010 · James Sugrue

Well, Spring, although it supports AspectJ, does not use it itself. AOP is a way of seeing the world that the above frameworks do not need (and thus do not use).

I must admit it's only supposition on my part so the debate could go forever but IMHO, I don't think it's a licensing problem.Thanks for your input though.

The Power of Proxies in Java

May 12, 2010 · James Sugrue

I do agree with you too: AOP (aspect oriented programming) gives a nice abstraction over plain proxy "plumbing". Yet, you can ask yourself why Hibernate, Spring, LambdaJ and all do not use this abstraction layer...

The Power of Proxies in Java

May 12, 2010 · James Sugrue

I do agree with you too: AOP (aspect oriented programming) gives a nice abstraction over plain proxy "plumbing". Yet, you can ask yourself why Hibernate, Spring, LambdaJ and all do not use this abstraction layer...

The Power of Proxies in Java

May 12, 2010 · James Sugrue

I do agree with you too: AOP (aspect oriented programming) gives a nice abstraction over plain proxy "plumbing". Yet, you can ask yourself why Hibernate, Spring, LambdaJ and all do not use this abstraction layer...

The Power of Proxies in Java

May 12, 2010 · James Sugrue

I do agree with you too: AOP (aspect oriented programming) gives a nice abstraction over plain proxy "plumbing". Yet, you can ask yourself why Hibernate, Spring, LambdaJ and all do not use this abstraction layer...

DRY and Skinny War

Apr 30, 2010 · James Sugrue

I will look into it ASAP; if that's true, that's a very good comment!

After verification, kudo to tyou! Updated article to take this into account.

DRY and Skinny War

Apr 30, 2010 · James Sugrue

I will look into it ASAP; if that's true, that's a very good comment!

After verification, kudo to tyou! Updated article to take this into account.

DRY and Skinny War

Apr 30, 2010 · James Sugrue

I will look into it ASAP; if that's true, that's a very good comment!

After verification, kudo to tyou! Updated article to take this into account.

DRY and Skinny War

Apr 30, 2010 · James Sugrue

I will look into it ASAP; if that's true, that's a very good comment!

After verification, kudo to tyou! Updated article to take this into account.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 16, 2010 · James Sugrue

I don't know nothing about Ebean and I won't argue about the product but the log produced (the theme of this article) is not copy/pastable into a SQL Query product (Toad or what have you):

trans[1004], 08:51:39.587, delete from e_basicver where id=? and last_update=?
trans[1004], 08:51:39.587, Binding Delete [e_basicver] where[id=1, lastUpdate=2010-03-01 08:51:39.515, ]

P6Spy logging fits the previous requirement, EBean logging does not.

Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

You're right! I'm editing the post, thanks for your advice.
Debugging Hibernate Generated SQL

Apr 13, 2010 · James Sugrue

Hi Andy,

Granted they are more. Yet, from my experience, I've only seen Hibernate (mostly) and TopLink (rarely). Sometimes, they are accessed through JPA...

It would be interesting to have statistics about each use but it isn't far fetched to approximate to these two major actors.

Thanks for your interest.

Free Online SVN Repositories

Feb 24, 2010 · James Sugrue

I noticed this site and despite a crude look, I wanted to include it. Yet, on the front page, it warns about space shortage because some undelicate users used it as media storage.
Free Online SVN Repositories

Feb 24, 2010 · James Sugrue

I noticed this site and despite a crude look, I wanted to include it. Yet, on the front page, it warns about space shortage because some undelicate users used it as media storage.
Lombok Reduces Your Boilerplate Code

Dec 07, 2009 · James Sugrue

@zqudlyba

Very good question! No, I haven't yet and won't use it for a while. I'm working at the moment for a company that is stuck on Java 1.5 and Java 1.6 is a prerequisite for Lombok. To be frank, I wouldn't recommend using any project in production before some companies used it before you: in the companies I worked for, the value is in the business code, not in using the latest products.

However, I do think this project should be monitored closely since it could bring some productivity gains soon.

Creating a Custom JSF 1.2 Component - With Facets, Resource Handling, Events and Listeners

Oct 08, 2009 · Wouter Van Reeven

Jacek,

Executing code client-side or server-side is a major architectural decision that you don't have the luxury to make! For most clients I have worked for, these choices were made before I came. It has nothing to do with this article whatsoever.

Besides, you'll get the same problem in developing from scratch for whatever framework you're using (Swing, .Net, what have you) if you don't have the component you want when needed, which is a common occurence. Making reusable components libraries for your organization is a big step in speeding up development.

I must concede though that JSF architecture favors ease of use over ease of development so new components are a bit complex to develop.

Creating a Custom JSF 1.2 Component - With Facets, Resource Handling, Events and Listeners

Oct 08, 2009 · Wouter Van Reeven

Jacek,

Executing code client-side or server-side is a major architectural decision that you don't have the luxury to make! For most clients I have worked for, these choices were made before I came. It has nothing to do with this article whatsoever.

Besides, you'll get the same problem in developing from scratch for whatever framework you're using (Swing, .Net, what have you) if you don't have the component you want when needed, which is a common occurence. Making reusable components libraries for your organization is a big step in speeding up development.

I must concede though that JSF architecture favors ease of use over ease of development so new components are a bit complex to develop.

Creating a Custom JSF 1.2 Component - With Facets, Resource Handling, Events and Listeners

Oct 08, 2009 · Wouter Van Reeven

Jacek,

Executing code client-side or server-side is a major architectural decision that you don't have the luxury to make! For most clients I have worked for, these choices were made before I came. It has nothing to do with this article whatsoever.

Besides, you'll get the same problem in developing from scratch for whatever framework you're using (Swing, .Net, what have you) if you don't have the component you want when needed, which is a common occurence. Making reusable components libraries for your organization is a big step in speeding up development.

I must concede though that JSF architecture favors ease of use over ease of development so new components are a bit complex to develop.

Java Properties Without Getters and Setters

May 30, 2009 · Javier Paniza

If I remember well what I was taught a looong time ago, OOP is about 3 things: encapsulation, inheritance and polymorphism.

What I understand from this article is that the first one is about to get shot. A more OOP-friendly approach would be the under-the-hood creation of defaults getters/setters if none existed, just like the creation of a default constructor is handled by the compiler. With annotations to configure in case one property shouldn't be accessed.

But I'm perhaps too old to consider new approaches...

Running the Table With JMesa

Jun 18, 2008 · David Sills

Hello,

Don't get me wrong, but displaying tabular data in HTML is done since a loooooong time with the DisplayTaglib. There's a short article on my blog if you're interested. They use taglibs but I see it as an advantage.

For more informations, see their site or their live demos which are really bluffing when you see the tiny amount of config needed on the JSP.

Cheers.

Nicolas

User has been successfully modified

Failed to modify user

ABOUT US

  • About DZone
  • Support and feedback
  • Community research
  • Sitemap

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 100
  • Nashville, TN 37211
  • [email protected]

Let's be friends: